45 أسطر
1.2 KiB
Python
45 أسطر
1.2 KiB
Python
import json
|
|
|
|
import click
|
|
from flask import current_app
|
|
from flask.cli import with_appcontext
|
|
|
|
from .utils import is_openapi3
|
|
|
|
|
|
@click.command()
|
|
@click.option("-f", "--file", type=click.File("w"), default="-")
|
|
@click.option("-e", "--endpoint", default=None)
|
|
@with_appcontext
|
|
def generate_api_schema(file, endpoint):
|
|
"""Generate the swagger schema for your api."""
|
|
try:
|
|
if endpoint is None:
|
|
endpoint = current_app.swag.config["specs"][0]["endpoint"]
|
|
|
|
spec = current_app.swag.get_apispecs(endpoint)
|
|
except RuntimeError as e:
|
|
click.echo(e, err=True)
|
|
click.echo(
|
|
"Possible values for endpoint are: {}".format(
|
|
", ".join(
|
|
[
|
|
spec["endpoint"]
|
|
for spec in current_app.swag.config["specs"]
|
|
if "endpoint" in spec
|
|
]
|
|
)
|
|
),
|
|
err=True,
|
|
)
|
|
raise click.Abort
|
|
|
|
# See also: https://github.com/flasgger/flasgger/issues/267
|
|
if is_openapi3(spec.get("openapi")):
|
|
if "definitions" in spec:
|
|
del spec["definitions"]
|
|
|
|
json.dump(spec, file, indent=4)
|
|
|
|
return spec
|