Metadata-Version: 2.1
Name: star_resty
Version: 0.0.12
Summary: The web framework
Home-page: https://github.com/slv0/start_resty
Author: Slava Cheremushkin
Author-email: slv0.chr@gmail.com
License: BSD
Description: # Star resty
        Object-oriented rest framework based on starlette, marshmallow and apispec.
        
        ## Requirements
        
        * [Python] 3.7+
        * [Starlette] 0.12.0+
        * [Marshmallow] 3.0.0rc8+
        * [APISpec] 2.0.2+
        
        ## Installation
        
        ```console
        $ pip install star_resty
        ```
        
        ## Example
        
        ```python
        from dataclasses import dataclass
        from typing import Optional
        
        from marshmallow import Schema, fields, post_load, ValidationError
        from starlette.applications import Starlette
        from starlette.responses import UJSONResponse
        
        from star_resty import Method, Operation, endpoint, json_schema, query, setup_spec
        
        
        class EchoInput(Schema):
            a = fields.Int()
        
        
        @dataclass
        class Payload:
            a: int
            s: Optional[str] = None
        
        
        class PayloadSchema(Schema):
            a = fields.Int(required=True)
            s = fields.String()
        
            @post_load
            def create_payload(self, data, **kwargs):
                return Payload(**data)
        
        
        app = Starlette(debug=True)
        
        @app.exception_handler(ValidationError)
        def register_error(request, e: ValidationError):
            return UJSONResponse(e.normalized_messages(), status_code=400)
        
        
        @app.route('/echo')
        @endpoint
        class Echo(Method):
            meta = Operation(tag='default',
                             description='echo')
            response_schema = EchoInput
        
            async def execute(self, query_params: query(EchoInput)):
                return query_params
        
        
        @app.route('/post', methods=['POST'])
        @endpoint
        class Post(Method):
            meta = Operation(tag='default', description='post')
        
            async def execute(self, item: json_schema(PayloadSchema, Payload)):
                return {'a': item.a * 2, 's': item.s}
        
        
        if __name__ == '__main__':
            import uvicorn
        
            setup_spec(app, title='Example')
            uvicorn.run(app, port=8080)
        ```
        
        Open [http://localhost:8080/apidocs.json](http://localhost:8080/apidocs.json) to view generated openapi schema.
        
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Programming Language :: Python :: 3.7
Requires-Python: >=3.7
Description-Content-Type: text/markdown
