Specification#
pjrpc has built-in OpenAPI and OpenRPC
specification generation support implemented by pjrpc.server.specs.openapi.OpenAPI
and pjrpc.server.specs.openrpc.OpenRPC respectively.
Method description, tags, errors, examples, parameters and return value schemas can be provided by hand
using pjrpc.server.specs.openapi.metadata() or automatically extracted using schema extractor.
pjrpc provides pydantic extractor: pjrpc.server.specs.extractors.pydantic.PydanticMethodInfoExtractor.
They uses pydantic models for method summary,
description, errors, examples and schema extraction respectively. You can implement your own schema extractor
inheriting it from pjrpc.server.specs.extractors.BaseMethodInfoExtractor and implementing abstract methods.
@methods.add(
metadata=[
openapi.metadata(
tags=['users'],
errors=[AlreadyExistsError],
)
]
)
def add_user(user: UserIn) -> UserOut:
"""
Creates a user.
:param object user: user data
:return object: registered user
:raise AlreadyExistsError: user already exists
"""
for existing_user in flask.current_app.users_db.values():
if user.name == existing_user.name:
raise AlreadyExistsError()
user_id = uuid.uuid4().hex
flask.current_app.users_db[user_id] = user
return UserOut(id=user_id, **user.dict())