Metadata-Version: 2.1
Name: apidecorators
Version: 0.0.1
Summary: API Decorators
Home-page: https://bitbucket.org/miguel_alarcos/apidecorators/src
Author: Miguel Ángel Alarcos Torrecillas
Author-email: miguel.alarcos@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
Requires-Dist: PyJWT (==1.6.4)
Requires-Dist: aiohttp (==3.4.4)
Requires-Dist: flatten-dict (==0.0.3.post1)
Requires-Dist: motor (==2.0.0)

# API Decorators

```python
from api import jwt_auth, is_owner, get, insert, is_owner, has_role, update, push, pull, \
                validate, validate_push
from cerberus import Validator

schema = {
    'author': {'type': 'string'},
    'title': {'type': 'string'}
}

validator = Validator(schema)

schema_comments = {
    'author': {'type': 'string'},
    'message': {'type': 'string'}
}

validator_comments = Validator(schema_comments)

def set_routes_book(routes):

    @routes.get('/api/book/{_id}')
    @jwt_auth
    #@is_owner('book')
    @get('book')
    async def get_book(document):      
        return document

    @routes.put('/api/book/{_id}/push/{push}')
    @jwt_auth
    #@is_owner('book')
    @validate_push(validator=validator_comments)
    @push('book')
    async def handle_push(document, request, payload):      
        return document

    @routes.put('/api/book/{_id}/pull/{pull}/{sub_id}')
    @jwt_auth
    #@is_owner('book')
    @pull('book')
    async def handle_pull(document, request, payload):      
        pass

    @routes.post('/api/book')
    @jwt_auth
    @validate(validator=validator)
    @insert('book')
    async def handle_post(document, request, payload):
        return document       

    @routes.put('/api/book/{_id}')
    @jwt_auth
    #@is_owner('book')
    @validate(update=True, validator=validator)
    @update('book')
    async def handle_put(document, request, payload):      
        return document    
```


