RESTful Flask framework with builtin MongoDB, Redis, Celery, Sentry and Slack integrations
Project description
🙈 Dead Simple Web Framework 🙉
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
Built Distribution
Close
Hashes for dead_simple_framework-1.2.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9c5259c7a1cd90e9d579e7f26e386cd8b192cabf75e2a7656c14421bb130a698 |
|
MD5 | a6efa3e5f3ef0fb6496107bb7bfc436a |
|
BLAKE2b-256 | 33ac86fa84966226bf55ecc610c8ac8be105f02e577a0dc60c6a716b3ae1b09a |
Close
Hashes for dead_simple_framework-1.2.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9222b24914b61b47db62f10514b03ae9aaca099d3aba405a4a42a58feec082b9 |
|
MD5 | db122304519e35276f49872e247938e5 |
|
BLAKE2b-256 | ab4df46bc37182d4addfd5248dadae3d0c48c71d0085d9b613cde5efbee8099b |