Skip to content

OpenAPI

add_response(operation, status_code, schema, description, example=None, examples=None, links=None, content_type='application/json')

Add response to operation.

Version changed: 1.3.0

  • Add parameter content_type.

Version changed: 0.10.0

  • Add links parameter.
Source code in apiflask/openapi.py
def add_response(
    operation: dict,
    status_code: str,
    schema: t.Union[SchemaType, dict],
    description: str,
    example: t.Optional[t.Any] = None,
    examples: t.Optional[t.Dict[str, t.Any]] = None,
    links: t.Optional[t.Dict[str, t.Any]] = None,
    content_type: t.Optional[str] = 'application/json',
) -> None:
    """Add response to operation.

    *Version changed: 1.3.0*

    - Add parameter `content_type`.

    *Version changed: 0.10.0*

    - Add `links` parameter.
    """
    operation['responses'][status_code] = {}
    if status_code != '204':
        operation['responses'][status_code]['content'] = {
            content_type: {
                'schema': schema
            }
        }
    operation['responses'][status_code]['description'] = description
    if example is not None:
        operation['responses'][status_code]['content'][
            content_type]['example'] = example
    if examples is not None:
        operation['responses'][status_code]['content'][
            content_type]['examples'] = examples
    if links is not None:
        operation['responses'][status_code]['links'] = links

add_response_with_schema(spec, operation, status_code, schema, schema_name, description)

Add response with given schema to operation.

Source code in apiflask/openapi.py
def add_response_with_schema(
    spec: APISpec,
    operation: dict,
    status_code: str,
    schema: OpenAPISchemaType,
    schema_name: str,
    description: str
) -> None:
    """Add response with given schema to operation."""
    if isinstance(schema, type):
        schema = schema()
        add_response(operation, status_code, schema, description)
    elif isinstance(schema, dict):
        if schema_name not in spec.components.schemas:
            spec.components.schema(schema_name, schema)
        schema_ref = {'$ref': f'#/components/schemas/{schema_name}'}
        add_response(operation, status_code, schema_ref, description)
    else:
        raise TypeError(_bad_schema_message)

get_argument(argument_type, argument_name)

Make argument from given type and name.

Source code in apiflask/openapi.py
def get_argument(argument_type: str, argument_name: str) -> t.Dict[str, t.Any]:
    """Make argument from given type and name."""
    argument: t.Dict[str, t.Any] = {
        'in': 'path',
        'name': argument_name,
    }
    if argument_type == 'int:':
        argument['schema'] = {'type': 'integer'}
    elif argument_type == 'float:':
        argument['schema'] = {'type': 'number'}
    else:
        argument['schema'] = {'type': 'string'}
    return argument

get_auth_name(auth, auth_names)

Get auth name from auth object.

Source code in apiflask/openapi.py
def get_auth_name(
    auth: HTTPAuthType,
    auth_names: t.List[str]
) -> str:
    """Get auth name from auth object."""
    name: str = ''
    if hasattr(auth, 'security_scheme_name'):
        name = auth.security_scheme_name  # type: ignore
    if not name:
        if isinstance(auth, HTTPBasicAuth):
            name = 'BasicAuth'
        elif isinstance(auth, HTTPTokenAuth):
            if auth.scheme.lower() == 'bearer' and auth.header is None:
                name = 'BearerAuth'
            else:
                name = 'ApiKeyAuth'
        else:
            raise TypeError('Unknown authentication scheme.')

    if name in auth_names:
        v = 2
        new_name = f'{name}_{v}'
        while new_name in auth_names:
            v += 1
            new_name = f'{name}_{v}'
        name = new_name
    return name

get_operation_tags(blueprint, blueprint_name)

Get operation tag from blueprint object.

Source code in apiflask/openapi.py
def get_operation_tags(
    blueprint: APIBlueprint,
    blueprint_name: str
) -> t.List[str]:
    """Get operation tag from blueprint object."""
    tags: t.List[str]
    if blueprint.tag is not None:
        if isinstance(blueprint.tag, dict):
            tags = [blueprint.tag['name']]
        else:
            tags = [blueprint.tag]
    else:
        tags = [blueprint_name.title()]
    return tags

get_path_description(func)

Get path description from the docstring of the view function.

Source code in apiflask/openapi.py
def get_path_description(func: t.Callable) -> str:
    """Get path description from the docstring of the view function."""
    docs = (func.__doc__ or '').strip().split('\n')
    if len(docs) > 1:
        # use the remain lines of docstring as description
        return '\n'.join(docs[1:]).strip()
    return ''

get_path_summary(func, fallback=None)

Get path summary from the name or docstring of the view function.

Source code in apiflask/openapi.py
def get_path_summary(func: t.Callable, fallback: t.Optional[str] = None) -> str:
    """Get path summary from the name or docstring of the view function."""
    summary: str
    docs: list = (func.__doc__ or '').strip().split('\n')
    if docs[0]:
        # Use the first line of docstring
        summary = docs[0]
    else:
        # Use the function name
        summary = fallback or ' '.join(func.__name__.split('_')).title()
    return summary

get_security_and_security_schemes(auth_names, auth_schemes)

Make security and security schemes from given auth names and schemes.

Source code in apiflask/openapi.py
def get_security_and_security_schemes(
    auth_names: t.List[str],
    auth_schemes: t.List[HTTPAuthType]
) -> t.Tuple[t.Dict[HTTPAuthType, str], t.Dict[str, t.Dict[str, str]]]:
    """Make security and security schemes from given auth names and schemes."""
    security: t.Dict[HTTPAuthType, str] = {}
    security_schemes: t.Dict[str, t.Dict[str, str]] = {}
    for name, auth in zip(auth_names, auth_schemes):  # noqa: B905
        security[auth] = name
        security_schemes[name] = get_security_scheme(auth)
        if hasattr(auth, 'description') and auth.description is not None:
            security_schemes[name]['description'] = auth.description
    return security, security_schemes

get_security_scheme(auth)

Get security scheme from auth object.

Source code in apiflask/openapi.py
def get_security_scheme(auth: HTTPAuthType) -> t.Dict[str, t.Any]:
    """Get security scheme from auth object."""
    security_scheme: t.Dict[str, t.Any]
    if isinstance(auth, HTTPTokenAuth):
        if auth.scheme.lower() == 'bearer' and auth.header is None:
            security_scheme = {
                'type': 'http',
                'scheme': 'bearer',
            }
        else:
            security_scheme = {
                'type': 'apiKey',
                'name': auth.header,
                'in': 'header',
            }
    else:
        security_scheme = {
            'type': 'http',
            'scheme': 'basic',
        }
    return security_scheme

get_tag(blueprint, blueprint_name)

Get tag from blueprint object.

Source code in apiflask/openapi.py
def get_tag(
    blueprint: APIBlueprint,
    blueprint_name: str
) -> t.Dict[str, t.Any]:
    """Get tag from blueprint object."""
    tag: t.Dict[str, t.Any]
    if blueprint.tag is not None:
        if isinstance(blueprint.tag, dict):
            tag = blueprint.tag
        else:
            tag = {'name': blueprint.tag}
    else:
        tag = {'name': blueprint_name.title()}
    return tag