mirror of https://github.com/encode/starlette.git
104 lines
2.7 KiB
Python
104 lines
2.7 KiB
Python
|
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"}}
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|