Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for star-resty, version 0.0.12
Filename, size File type Python version Upload date Hashes
Filename, size star_resty-0.0.12.tar.gz (10.8 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page