Schemas updated

This commit is contained in:
2025-04-02 18:53:33 +03:00
parent 27c48bb86a
commit 3583d178e9
38 changed files with 2672 additions and 28 deletions

View File

@@ -2,7 +2,9 @@ from typing import Any, Dict
from fastapi import FastAPI
from fastapi.routing import APIRoute
from fastapi.openapi.utils import get_openapi
from ApiServices.TemplateService.config import template_api_config
from ApiServices.TemplateService.endpoints.routes import get_safe_endpoint_urls
class OpenAPISchemaCreator:
@@ -18,8 +20,11 @@ class OpenAPISchemaCreator:
app: FastAPI application instance
"""
self.app = app
self.safe_endpoint_list: list[tuple[str, str]] = get_safe_endpoint_urls()
self.routers_list = self.app.routes
def create_security_schemes(self) -> Dict[str, Any]:
@staticmethod
def create_security_schemes() -> Dict[str, Any]:
"""
Create security scheme definitions.
@@ -36,6 +41,30 @@ class OpenAPISchemaCreator:
}
}
def configure_route_security(
self, path: str, method: str, schema: Dict[str, Any]
) -> None:
"""
Configure security requirements for a specific route.
Args:
path: Route path
method: HTTP method
schema: OpenAPI schema to modify
"""
if not schema.get("paths", {}).get(path, {}).get(method):
return
# Check if endpoint is in safe list
endpoint_path = f"{path}:{method}"
list_of_safe_endpoints = [
f"{e[0]}:{str(e[1]).lower()}" for e in self.safe_endpoint_list
]
if endpoint_path not in list_of_safe_endpoints:
if "security" not in schema["paths"][path][method]:
schema["paths"][path][method]["security"] = []
schema["paths"][path][method]["security"].append({"BearerAuth": []})
def create_schema(self) -> Dict[str, Any]:
"""
Create the complete OpenAPI schema.
@@ -46,7 +75,7 @@ class OpenAPISchemaCreator:
openapi_schema = get_openapi(
title=template_api_config.TITLE,
description=template_api_config.DESCRIPTION,
version=template_api_config,
version=template_api_config.VERSION,
routes=self.app.routes,
)
@@ -56,7 +85,7 @@ class OpenAPISchemaCreator:
openapi_schema["components"][
"securitySchemes"
] = self._create_security_schemes()
] = self.create_security_schemes()
# Configure route security and responses
for route in self.app.routes: