from flask import send_file from flask_swagger_ui import get_swaggerui_blueprint from apispec import APISpec from apispec.ext.marshmallow import MarshmallowPlugin from core_apispec.apispec import CoreApiSpec from atlas_um.api.v1.views import api_v1 from atlas_um.oauth import oauth SCHEMA_PATH = "api/v1/openapi.yaml" SWAGGER_URL = "/api/v1/docs-old" API_URL = "/api/v1/docs-old/openapi.yaml" api_v1_docs = get_swaggerui_blueprint( SWAGGER_URL, API_URL, config={"app_name": "AtlasUM"}, blueprint_name="swagger_ui_v1", ) @api_v1_docs.route("openapi.yaml", methods=["GET"]) def schema(): return send_file(SCHEMA_PATH, "application/x-yaml") def register_apispec(app): description = "User account management for SME Data & Analytics" terms_of_service = "https://www.sonymusic.com/terms-and-conditions/" version = "v1" blueprints = (api_v1, oauth) spec = APISpec( title="AtlasUM API", version=version, info={ "description": description, "termsOfService": terms_of_service, "license": { "name": "Proprietary", }, }, openapi_version="3.0.2", plugins=[MarshmallowPlugin()], security=[ {"bearerAuth": []}, {"cookieAuth": []}, ], components={ "securitySchemes": { "cookieAuth": { "type": "apiKey", "in": "cookie", "name": "dna_bearer_token", }, "bearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT", }, }, }, ) docs = CoreApiSpec( app=app, document_options=False, spec=spec, version=version, swagger_url=f"/api/{version}/swagger/", swagger_ui_url=f"/api/{version}/docs/", blueprints=blueprints, ) docs.register_blueprints()