API Decorators
Project description
API Decorators
# ctest.py
from apidecorators.api import jwt_auth, get, insert, has_role, update, push, pull, \
validate, get_many, delete, read_access, write_access, collection, aggregate, \
update_array, get_from_array
from cerberus import Validator
public = {'*': '*'}
schema = {
'a': {'type': 'string'},
'b': {'type': 'integer'},
'nested': {
'type': 'dict',
'schema': {
'n1': {'type': 'string'},
'n2': {'type': 'integer'}
}
}
}
validator = Validator(schema)
schema_array = {
'c': {'type': 'string'}
}
validator_array = Validator(schema_array)
def set_routes_test(routes):
@routes.post('/api/test')
@jwt_auth
@collection('test')
@write_access(public)
@validate(validator=validator)
@insert
async def post_test(document, request, payload):
return document
@routes.get('/api/test/{_id}')
@jwt_auth
@collection('test')
@read_access({'__owner': ['a', 'nested.n1']})
@get
async def get_test(document, payload):
return document
@routes.put('/api/test/{_id}')
@jwt_auth
@collection('test')
@write_access({'__owner': '*'})
@validate(update=True, validator=validator)
@update
async def put_test(old_doc, document, request, payload):
return document
@routes.put('/api/test/{_id}/array')
@jwt_auth
@collection('test')
@write_access({'__owner': '*'})
@validate(validator=validator_array)
@push('array')
async def push_array(document, request, payload):
document['__owner'] = payload['user']
return document
@routes.get('/api/test/{_id}/array')
@jwt_auth
@collection('test')
@read_access({'__owner': ['c']})
@get_from_array('array')
async def get_test(document, payload):
return document
@routes.put('/api/test/{_id}/array/{sub_id}')
@jwt_auth
@collection('test')
@write_access({'__owner': ['c']}, root='array')
@update_array('array')
async def update_test(document, payload):
return document
@routes.get('/api/test/aggregate/agg1')
@jwt_auth
@collection('test')
@read_access({'__owner': ['__owner', 'length']})
@get_many
async def get_aggr_test(col, query, payload):
pipeline = [{"$match": {"b": 5}},
{"$project": {"__owner": 1, "length": {"$size": "$array"} }}
]
return col.aggregate(pipeline)
#app.py
import asyncio
from ctest import set_routes_test
from aiohttp import web
from apidecorators.api import cors_factory
async def handle(loop):
app = web.Application(loop=loop, middlewares=[cors_factory])
routes = web.RouteTableDef()
set_routes_test(routes)
app.router.add_routes(routes)
await loop.create_server(app.make_handler(), '0.0.0.0', 8888)
def main():
loop = asyncio.get_event_loop()
loop.run_until_complete(handle(loop))
print("Server started at port 8888")
loop.run_forever()
loop.close()
if __name__ == '__main__':
main()
docker-compose.yml
version: '3'
services:
api:
build: .
environment:
- DB_URI=mongodb://<user>:<password>@url:port/data-base
- DB=data-base
- SECRET=secret
stdin_open: true
tty: true
ports:
- "8089:8089"
volumes:
- ./:/usr/src/app
command: python -m watchgod app.main
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
apidecorators-0.1.3.tar.gz
(4.8 kB
view details)
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 apidecorators-0.1.3.tar.gz.
File metadata
- Download URL: apidecorators-0.1.3.tar.gz
- Upload date:
- Size: 4.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
926a799f7e7965729f3f1554e95db0d60b35278e100d8c939bb4408af163c4a0
|
|
| MD5 |
12e76991aa3188308cd1676d266109bb
|
|
| BLAKE2b-256 |
c21a359d7d29d05193fe762e1da66f137b69a1677613e0e169f33939d9de3786
|
File details
Details for the file apidecorators-0.1.3-py3-none-any.whl.
File metadata
- Download URL: apidecorators-0.1.3-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.0 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
546964bdd8e80a5687960cfaa89949872d028c06d97bfbf0f0a02799e265dc52
|
|
| MD5 |
674b09eda6271aabb92d36d19a38c019
|
|
| BLAKE2b-256 |
285f754364afc30baf20b355f93ab34a42c0a41ec616f35cf1bc7cc08f45f808
|