Skip to main content

RESTful Flask framework with builtin MongoDB, Redis, Celery, Sentry and Slack integrations

Project description

🙈 Dead Simple Web Framework 🙉

Python Flask MongoDB/Pymongo PyPi

Overview:

A RESTful Flask framework with MongoDB, Redis, Celery, Slack and Sentry integrations:

Backend:

  • Flask [Framework]
  • MongoDB [Database]
  • Redis [Cache]
  • Celery + RabbitMQ [Async Tasks]
  • Slack + Sentry [Logging]

Installing:

$ pip install dead-simple-framework

Configuration:

TODO - DOCS

Example Application (demo.py):

from dead_simple_framework import Route, RouteHandler, Application
from dead_simple_framework.handlers import UserRouteHandler, LoginRouteHandler, Permissions, DefaultPermissionsRouteHandler
from dead_simple_framework.database import Indices
from dead_simple_framework.api.errors import API_Error
from dead_simple_framework.api.utils import JsonError

# Method that throws a sample error
def throw(msg): raise API_Error(msg, 400)

# App config for a simple blog application with user accounts
sample_config = {
    'routes': {
        # Users
        'users': Route(
            # Route with a built-in handler for creating, updating, fetching and deleting users
            # Only authenticated users can perform certain operations.
            # Adding a `verifier` to the class will let you allow only a specific user to update 
            # their data or delete their account.
            url = '/api/users',
            handler=UserRouteHandler(permissions=Permissions(
                PUT='USER', PATCH='USER', GET='USER', DELETE='USER'
            )),
            # The schema controls what data can be passed to the endpoint
            # In this case, a user ObjectId is required and the only property
            # supported. 
            schema={
                'GET': {
                    'type': 'object',
                    'properties': {
                        '_id': {'type': 'string'}
                    },
                    'required': ['_id']
                }
            },
            # The MongoDB collection where data for this route should be stored
            # It is passed to any overloaded method handlers (e.g. a custom GET method)
            collection='users'
        ),

        # Authentication
        'authentication': Route(
            # Route with a built-in handler for authenticating users and issuing a JSON Web Token
            url='/api/authenticate', 
            handler=LoginRouteHandler(),
            # It relies on the same collection as the core `users` route
            collection='users'
        ),

        # Posts
        'posts': Route(
            # Route with a builtin generic CRUD handler for creating, updating, fetching and deleting posts
            # Only authenticated users can perform certain operations.
            url='/api/posts',
            handler=DefaultPermissionsRouteHandler(permissions=Permissions(POST=['USER'], PUT=['USER'], PATCH=['USER'], DELETE=['USER'])),
            collection='posts'
        ),

        # Sample Error
        'error': Route(
            # Route that demonstrates built-in error handling
            url='/error',
            handler=RouteHandler(
                # Custom handlers allow a POST request or a GET request to create different errors
                POST=lambda request, payload: throw(f'POST - Error from payload {payload}'),
                GET=lambda request, payload: JsonError('This is a GET error', code=500),
            )
        ),
    },

    # Application settings
    'settings': {
        # JWT Settings determine if the app uses JWT, what the token lifespan will be and more
        'jwt_settings': {
            'app_use_jwt': True,
            'app_jwt_lifespan': 600,
            'app_permissions': ['USER', 'ADMIN'],
        }
    },

    # MongoDB indices for each collection used by the application
    'indices': Indices({
        'users': {
            'username': {
                'order': -1
            },
            'password': {
                'order': 1,
                'compound_with': 'username'
            }
        },
    })
}

if __name__ == '__main__':
    Application(sample_config).run()
  • Starts a local server at http://0.0.0.0:5000/

  • Serves CRUD operations for MongoDB users collection users at endpoint /api/users

  • Issues JWT tokents for created users at endpoint /api/authenticate

  • Serves CRUD operations for MongoDB collection posts at endpoint /api/posts

  • Demos errors at endpoint /error

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dead_simple_framework-1.3.9.tar.gz (35.8 kB view details)

Uploaded Source

Built Distribution

dead_simple_framework-1.3.9-py3-none-any.whl (49.2 kB view details)

Uploaded Python 3

File details

Details for the file dead_simple_framework-1.3.9.tar.gz.

File metadata

  • Download URL: dead_simple_framework-1.3.9.tar.gz
  • Upload date:
  • Size: 35.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.26.0 setuptools/65.4.1 requests-toolbelt/0.9.1 tqdm/4.65.0 CPython/3.9.15

File hashes

Hashes for dead_simple_framework-1.3.9.tar.gz
Algorithm Hash digest
SHA256 d54afa2407dda1dec9b85aa1b3f3630b639e351b033bc053b70c95362e5bfdbb
MD5 6f32725e42dca1c22975ae66d4b54be0
BLAKE2b-256 09deeb09a4e2c2e4e56ef44bd4c058b73c8bc53c43e9cdd5dbe4180dc02e295a

See more details on using hashes here.

File details

Details for the file dead_simple_framework-1.3.9-py3-none-any.whl.

File metadata

  • Download URL: dead_simple_framework-1.3.9-py3-none-any.whl
  • Upload date:
  • Size: 49.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.26.0 setuptools/65.4.1 requests-toolbelt/0.9.1 tqdm/4.65.0 CPython/3.9.15

File hashes

Hashes for dead_simple_framework-1.3.9-py3-none-any.whl
Algorithm Hash digest
SHA256 ead8c9cd8ee1bb2229dea6698cb0fdc6926f5be732188d54eed68e2fc2227fdd
MD5 a7ec3de8d601594a143ff8acb90145fe
BLAKE2b-256 4bb061263309cf30042e49cb573a4c23d7f3106ed39cf5ca94d2859b4a34c06d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page