40 lines
1.4 KiB
Python
40 lines
1.4 KiB
Python
from fastapi import APIRouter
|
|
import uuid
|
|
from Events.Engine.abstract_class import CategoryCluster, MethodToEvent
|
|
|
|
|
|
class CreateRouterFromCluster:
|
|
|
|
def __init__(self, **kwargs):
|
|
self.prefix = kwargs.get("prefix")
|
|
self.tags = kwargs.get("tags")
|
|
self.include_in_schema = bool(kwargs.get("include_in_schema", True))
|
|
self.router = APIRouter(
|
|
prefix=self.prefix, tags=self.tags, include_in_schema=self.include_in_schema
|
|
)
|
|
|
|
|
|
class CreateEndpointFromCluster:
|
|
|
|
def __init__(self, **kwargs):
|
|
self.router: CategoryCluster = kwargs.get("router")
|
|
self.method_endpoint: MethodToEvent = kwargs.get("method_endpoint")
|
|
self.attach_router()
|
|
|
|
def attach_router(self):
|
|
method = getattr(self.router, self.method_endpoint.METHOD.lower())
|
|
|
|
# Create a unique operation ID based on the endpoint path, method, and a unique identifier
|
|
kwargs = {
|
|
"path": self.method_endpoint.URL,
|
|
"summary": self.method_endpoint.SUMMARY,
|
|
"description": self.method_endpoint.DESCRIPTION,
|
|
}
|
|
if (
|
|
hasattr(self.method_endpoint, "RESPONSE_MODEL")
|
|
and self.method_endpoint.RESPONSE_MODEL is not None
|
|
):
|
|
kwargs["response_model"] = self.method_endpoint.RESPONSE_MODEL
|
|
|
|
method(**kwargs)(self.method_endpoint.endpoint_callable)
|