RESTful Flask framework with MongoDB, Redis and Celery integrations
Project description
🙈 Dead Simple Web Framework 🙉
Overview:
A RESTful Flask framework with MongoDB, Redis and Celery integrations:
Backend:
- Flask [Framework]
- MongoDB [Database]
- Redis [Cache]
- Celery + RabbitMQ [Async Tasks]
Installing:
$ pip install dead-simple-framework
Configuration:
TODO - DOCS
Example Application (demo.py):
* Celery must be running *
$ celery -A demo worker -l info
from dead_simple_framework import Application, Task_Manager, Database, API, Route, RouteHandler, DefaultRouteHandler, Task
from random import choice
sample_config = {
'routes': {
'insert': Route( # A route with automatic CRUD support
url='/insert',
collection='insert',
),
'demo': Route( # Another route with automatic CRUD support (with all options specified)
url='/demo', # The URL at which the server should handle requests
defaults=None, # Default parameters to pass to the handler function for this URL
database='db', # The database that should be passed to the handler function for this URL
collection='demo', # The collection that should be passed to the handler function for this URL
handler=DefaultRouteHandler() # A class specifying the handler functions to use based on the method used to access the URL
),
'refresh': Route( # Route with a handler for the GET method that runs an async task (in this case an API call)
url='/api/refresh',
handler=RouteHandler(
GET=lambda request, payload: str(Task_Manager.run_task('scheduled_call'))
)
),
'index': Route( # Route that fetches the cached latest result of an async task (in this case an API call)
url='/',
handler=RouteHandler(
GET=lambda request, payload: str(Task_Manager.get_result('scheduled_call'))
)
),
'add': Route( # Route that runs an async task (in this case simple addition) and fetches the result
url='/add',
handler=RouteHandler(
GET=lambda request, payload: str(Task_Manager.run_task('add'))
)
),
},
'tasks': { # Async tasks available to the Task_Manager [celery] to schedule or run
'add': { # Simple Addition Task (with default arguments)
'logic': lambda x,y: x + y,
'schedule': None,
'default_args': (2,2)
},
'insert': { # Periodic Database Insert Task
'logic': lambda res: Database(collection='insert').connect().insert_one({'test': 'doc', 'result': res}),
'schedule': {}, # Default - every minute
'depends_on': 'add' # Return value substituted for `res`
},
'call_api': { # API Call Task
'logic': lambda url, params=None: str(API.get(url, params, ignore_errors=False, retry_ms=10000, num_retries=20).content),
},
'scheduled_call': Task( # Make 3 parallel API calls
name='scheduled_call',
logic=lambda: Task_Manager.parallelize([['call_api', [x]] for x in get_websites(3)]),
schedule={}
)
}
}
WEBSITES =[
"http://www.google.com",
"http://www.yahoo.com",
"http://www.ebay.com",
"http://www.cnn.com",
"http://www.pbs.org",
"https://www.reddit.com/",
]
def get_websites(n):
_websites = [*WEBSITES]
res = []
for x in range(n):
res.append(choice(_websites))
_websites.remove(res[-1])
return res
app = Application(sample_config)
if __name__ == '__main__':
app.run()
-
Starts a local server at http://0.0.0.0:5000/
-
Serves CRUD operations for MongoDB collection
demoat endpoint/demo -
Runs an asynchronous chained value calculation and insert into the
insertcollection (viewable at/insert) -
Runs asynchronous parallel API calls and displays the latest result at endpoint
/(can be manually run at/api/refresh)
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dead_simple_framework-0.7.3.tar.gz.
File metadata
- Download URL: dead_simple_framework-0.7.3.tar.gz
- Upload date:
- Size: 28.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.9.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b53fcb69c3afa27a18be619eab9c47f4d74903a40a6c84c16381147d32170849
|
|
| MD5 |
2d83f90778181b9d0b37fa503c23f963
|
|
| BLAKE2b-256 |
90bc07f7ccab1d47ac87a1f2563b7ac55a902f608d24fbe000b73ef234ea256d
|
File details
Details for the file dead_simple_framework-0.7.3-py3-none-any.whl.
File metadata
- Download URL: dead_simple_framework-0.7.3-py3-none-any.whl
- Upload date:
- Size: 37.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.53.0 CPython/3.9.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d01857eefb9193644697c915039a81c6b1bd1a6705c9392416426f8dd03a2b38
|
|
| MD5 |
34f99ad1f4119ec676bbb6d16ab0a310
|
|
| BLAKE2b-256 |
8b0a0ce52abcfcc8771c976a4e1a9272050d62a8e8789c6e8bf583b30c0569ef
|