63 lines
1.3 KiB
Python
63 lines
1.3 KiB
Python
from functools import partial
|
|
from typing import Any, override
|
|
|
|
import orjson
|
|
from django.http import HttpRequest
|
|
from ninja import NinjaAPI, Schema
|
|
from ninja.renderers import BaseRenderer
|
|
|
|
from api.v1 import handlers
|
|
from api.v1.auth.endpoints import router as auth_router
|
|
from api.v1.flags.endpoints import router as flags_router
|
|
from api.v1.reviews.endpoints import router as reviews_router
|
|
from api.v1.users.endpoints import router as users_router
|
|
|
|
|
|
class ORJSONRenderer(BaseRenderer):
|
|
media_type: str | None = "application/json"
|
|
|
|
@override
|
|
def render(
|
|
self, request: HttpRequest, data: Any, *, response_status: int
|
|
) -> Any:
|
|
return orjson.dumps(data, default=self.default)
|
|
|
|
def default(self, obj: Any) -> Any:
|
|
if isinstance(obj, Schema):
|
|
return obj.model_dump()
|
|
raise TypeError
|
|
|
|
|
|
router = NinjaAPI(
|
|
title="Lotty API",
|
|
version="1",
|
|
description="API docs for Lotty A/B platform",
|
|
openapi_url="/docs/openapi.json",
|
|
renderer=ORJSONRenderer(),
|
|
)
|
|
|
|
|
|
router.add_router(
|
|
"auth",
|
|
auth_router,
|
|
)
|
|
|
|
router.add_router(
|
|
"flags",
|
|
flags_router,
|
|
)
|
|
|
|
router.add_router(
|
|
"users",
|
|
users_router,
|
|
)
|
|
|
|
router.add_router(
|
|
"reviews",
|
|
reviews_router,
|
|
)
|
|
|
|
|
|
for exception, handler in handlers.exception_handlers:
|
|
router.add_exception_handler(exception, partial(handler, router=router))
|