57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
from fastapi import Header, Request, Response
|
|
from pydantic import BaseModel
|
|
|
|
from ApiDefaults.config import api_config
|
|
|
|
|
|
class CommonHeaders(BaseModel):
|
|
language: str | None = None
|
|
domain: str | None = None
|
|
timezone: str | None = None
|
|
token: str | None = None
|
|
request: Request | None = None
|
|
response: Response | None = None
|
|
operation_id: str | None = None
|
|
|
|
model_config = {
|
|
"arbitrary_types_allowed": True
|
|
}
|
|
|
|
@classmethod
|
|
def as_dependency(
|
|
cls,
|
|
request: Request,
|
|
response: Response,
|
|
language: str = Header(None, alias="language"),
|
|
domain: str = Header(None, alias="domain"),
|
|
tz: str = Header(None, alias="timezone"),
|
|
):
|
|
token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None)
|
|
|
|
# Extract operation_id from the route
|
|
operation_id = None
|
|
if hasattr(request.scope.get("route"), "operation_id"):
|
|
operation_id = request.scope.get("route").operation_id
|
|
|
|
return cls(
|
|
language=language,
|
|
domain=domain,
|
|
timezone=tz,
|
|
token=token,
|
|
request=request,
|
|
response=response,
|
|
operation_id=operation_id,
|
|
)
|
|
|
|
def get_headers_dict(self):
|
|
"""Convert the headers to a dictionary format used in the application"""
|
|
import uuid
|
|
|
|
return {
|
|
"language": self.language or "",
|
|
"domain": self.domain or "",
|
|
"eys-ext": f"{str(uuid.uuid4())}",
|
|
"tz": self.timezone or "GMT+3",
|
|
"token": self.token,
|
|
}
|