from starlette.applications import Starlette from starlette.endpoints import HTTPEndpoint from starlette.schemas import SchemaGenerator app = Starlette() app.schema_generator = SchemaGenerator( {"openapi": "3.0.0", "info": {"title": "Example API", "version": "1.0"}} ) @app.websocket_route("/ws") def ws(session): """ws""" pass # pragma: no cover @app.route("/users", methods=["GET", "HEAD"]) def list_users(request): """ responses: 200: description: A list of users. examples: [{"username": "tom"}, {"username": "lucy"}] """ pass # pragma: no cover @app.route("/users", methods=["POST"]) def create_user(request): """ responses: 200: description: A user. examples: {"username": "tom"} """ pass # pragma: no cover @app.route("/orgs") class OrganisationsEndpoint(HTTPEndpoint): def get(self, request): """ responses: 200: description: A list of organisations. examples: [{"name": "Foo Corp."}, {"name": "Acme Ltd."}] """ pass # pragma: no cover def post(self, request): """ responses: 200: description: An organisation. examples: {"name": "Foo Corp."} """ pass # pragma: no cover def test_schema_generation(): assert app.schema == { "openapi": "3.0.0", "info": {"title": "Example API", "version": "1.0"}, "paths": { "/orgs": { "get": { "responses": { 200: { "description": "A list of " "organisations.", "examples": [{"name": "Foo Corp."}, {"name": "Acme Ltd."}], } } }, "post": { "responses": { 200: { "description": "An organisation.", "examples": {"name": "Foo Corp."}, } } }, }, "/users": { "get": { "responses": { 200: { "description": "A list of users.", "examples": [{"username": "tom"}, {"username": "lucy"}], } } }, "post": { "responses": { 200: {"description": "A user.", "examples": {"username": "tom"}} } }, }, }, }