The web framework
Project 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
$ pip install star_resty
Example
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 to view generated openapi schema.
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
star_resty-0.0.13.tar.gz
(11.6 kB
view details)
File details
Details for the file star_resty-0.0.13.tar.gz
.
File metadata
- Download URL: star_resty-0.0.13.tar.gz
- Upload date:
- Size: 11.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.1 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4fc7c947d91e58fe462006469912fd47e6434854d830c2539e1ecd8384a6b763 |
|
MD5 | dcb960e7e71306a243abe1f678389206 |
|
BLAKE2b-256 | 19d24465498d533d889db65edfc25b366ee2bdca04ad738c7335756f7dc5f123 |