MCPcopy Create free account
hub / github.com/dbunt1tled/python-fast-api / JsonAPIService

Class JsonAPIService

src/core/http/response/json_api.py:8–69  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6
7
8class JsonAPIService:
9 def __init__(self) -> None:
10 pass
11
12 @staticmethod
13 def response(
14 data: Any = None,
15 errors: list[JsonApiError | dict[str, Any]] | None = None,
16 meta: dict[str, Any] | None = None,
17 resource_type: str | None = None,
18 ) -> JsonApiResponse:
19 resources: list[JsonApiResource] | list[dict[str, Any]] | JsonApiResource = [] # noqa
20 if data is None and errors is None:
21 return JsonApiResponse(meta=meta)
22 if resource_type is None:
23 resource_type = data.__class__.__name__
24 if errors:
25 return JsonApiResponse(
26 errors=[error.model_dump() if hasattr(error, "model_dump") else error for error in errors],
27 meta=meta,
28 )
29 if isinstance(data, Paginator):
30 resources = JsonAPIService.map_items(data.items)
31 meta = {
32 "total": data.total,
33 "page": data.page,
34 "perPage": data.per_page,
35 "totalPages": data.pages,
36 }
37 elif isinstance(data, list):
38 resources = JsonAPIService.map_items(data)
39 else:
40 resources = ResponseBaseModel.data_to_resource(data, resource_type)
41
42 return JsonApiResponse(data=resources, meta=meta)
43
44 @staticmethod
45 def map_items(data: list | Sequence[Any]) -> list[JsonApiResource]:
46 resources = []
47 resource_type = ""
48 if len(data) > 0:
49 resource_type = data[0].__class__.__name__
50 for item in data:
51 resources.append(ResponseBaseModel.data_to_resource(item, resource_type))
52 return resources
53
54 @staticmethod
55 def error(
56 status: int,
57 title: str,
58 detail: str | list[str] | None = None,
59 code: str | None = None,
60 source: dict[str, Any] | None = None,
61 ) -> JsonApiResponse:
62 error = JsonApiError(
63 status=status,
64 title=title,
65 detail=detail,

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected