26 lines
781 B
Python
26 lines
781 B
Python
import json
|
|
from typing import Any, Mapping, Optional, Type
|
|
|
|
from django.http import HttpRequest
|
|
|
|
from ninja.responses import NinjaJSONEncoder
|
|
|
|
__all__ = ["BaseRenderer", "JSONRenderer"]
|
|
|
|
|
|
class BaseRenderer:
|
|
media_type: Optional[str] = None
|
|
charset: str = "utf-8"
|
|
|
|
def render(self, request: HttpRequest, data: Any, *, response_status: int) -> Any:
|
|
raise NotImplementedError("Please implement .render() method")
|
|
|
|
|
|
class JSONRenderer(BaseRenderer):
|
|
media_type = "application/json"
|
|
encoder_class: Type[json.JSONEncoder] = NinjaJSONEncoder
|
|
json_dumps_params: Mapping[str, Any] = {}
|
|
|
|
def render(self, request: HttpRequest, data: Any, *, response_status: int) -> Any:
|
|
return json.dumps(data, cls=self.encoder_class, **self.json_dumps_params)
|