Skip to content

Commit 06abe7c

Browse files
committed
API module refactoring
1 parent c90bb96 commit 06abe7c

1 file changed

Lines changed: 41 additions & 38 deletions

File tree

fastapi_jsonapi/api.py

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
Literal,
1212
Optional,
1313
TypeVar,
14-
Union,
1514
)
1615

1716
from fastapi import APIRouter, Body, Path, Query, Request, status
@@ -62,19 +61,19 @@ class RoutersJSONAPI:
6261
def __init__(
6362
self,
6463
router: APIRouter,
65-
path: Union[str, list[str]],
64+
path: str | list[str],
6665
tags: Iterable[str],
6766
class_list: type["ListViewBase"],
6867
class_detail: type["DetailViewBase"],
6968
model: type[TypeModel],
7069
schema: type[BaseModel],
7170
resource_type: str,
72-
schema_in_post: Optional[type[BaseModel]] = None,
73-
schema_in_patch: Optional[type[BaseModel]] = None,
74-
pagination_default_size: Optional[int] = 25,
75-
pagination_default_number: Optional[int] = 1,
76-
pagination_default_offset: Optional[int] = None,
77-
pagination_default_limit: Optional[int] = None,
71+
schema_in_post: type[BaseModel] | None = None,
72+
schema_in_patch: type[BaseModel] | None = None,
73+
pagination_default_size: int | None = 25,
74+
pagination_default_number: int | None = 1,
75+
pagination_default_offset: int | None = None,
76+
pagination_default_limit: int | None = None,
7877
methods: Iterable[str] = (),
7978
) -> None:
8079
"""
@@ -121,10 +120,10 @@ def __init__(
121120
raise ValueError(msg)
122121
self.all_jsonapi_routers[self.type_] = self
123122

124-
self.pagination_default_size: Optional[int] = pagination_default_size
125-
self.pagination_default_number: Optional[int] = pagination_default_number
126-
self.pagination_default_offset: Optional[int] = pagination_default_offset
127-
self.pagination_default_limit: Optional[int] = pagination_default_limit
123+
self.pagination_default_size: int | None = pagination_default_size
124+
self.pagination_default_number: int | None = pagination_default_number
125+
self.pagination_default_offset: int | None = pagination_default_offset
126+
self.pagination_default_limit: int | None = pagination_default_limit
128127
self.schema_builder = SchemaBuilder(resource_type=resource_type)
129128

130129
dto = self.schema_builder.create_schemas(
@@ -280,25 +279,21 @@ def _create_pagination_query_params(self) -> list[Parameter]:
280279
offset = Query(self.pagination_default_offset, alias="page[offset]", title="pagination_page_offset")
281280
limit = Query(self.pagination_default_limit, alias="page[limit]", title="pagination_page_limit")
282281

283-
params = []
284-
285-
for q_param in (
286-
size,
287-
number,
288-
offset,
289-
limit,
290-
):
291-
params.append(
292-
Parameter(
293-
# name doesn't really matter here
294-
name=q_param.title,
295-
kind=Parameter.POSITIONAL_OR_KEYWORD,
296-
annotation=Optional[int],
297-
default=q_param,
298-
),
282+
return [
283+
Parameter(
284+
# name doesn't really matter here
285+
name=q_param.title,
286+
kind=Parameter.POSITIONAL_OR_KEYWORD,
287+
annotation=int | None,
288+
default=q_param,
299289
)
300-
301-
return params
290+
for q_param in (
291+
size,
292+
number,
293+
offset,
294+
limit,
295+
)
296+
]
302297

303298
@classmethod
304299
def _create_filters_query_dependency_param(cls):
@@ -387,8 +382,11 @@ def _update_signature_for_resource_detail_view(
387382

388383
return sig.replace(parameters=params + include_params + list(additional_dependency_params) + tail_params)
389384

390-
@staticmethod
391-
def _create_dependency_params_from_pydantic_model(model_class: type[BaseModel]) -> list[Parameter]:
385+
@classmethod
386+
def _create_dependency_params_from_pydantic_model(
387+
cls,
388+
model_class: type[BaseModel],
389+
) -> list[Parameter]:
392390
return [
393391
Parameter(
394392
name=field_name,
@@ -399,8 +397,12 @@ def _create_dependency_params_from_pydantic_model(model_class: type[BaseModel])
399397
for field_name, field_info in model_class.model_fields.items()
400398
]
401399

402-
@staticmethod
403-
def _update_method_config(view: type["ViewBase"], method: HTTPMethod) -> HTTPMethodConfig:
400+
@classmethod
401+
def _update_method_config(
402+
cls,
403+
view: type["ViewBase"],
404+
method: HTTPMethod,
405+
) -> HTTPMethodConfig:
404406
target_config = view.method_dependencies.get(method) or HTTPMethodConfig()
405407
common_config = view.method_dependencies.get(HTTPMethod.ALL) or HTTPMethodConfig()
406408

@@ -425,17 +427,18 @@ def _update_method_config(view: type["ViewBase"], method: HTTPMethod) -> HTTPMet
425427

426428
return new_method_config
427429

430+
@classmethod
428431
def _update_method_config_and_get_dependency_params(
429-
self,
432+
cls,
430433
view: type["ViewBase"],
431434
method: HTTPMethod,
432435
) -> list[Parameter]:
433-
method_config = self._update_method_config(view, method)
436+
method_config = cls._update_method_config(view, method)
434437

435438
if method_config.dependencies is None:
436439
return []
437440

438-
return self._create_dependency_params_from_pydantic_model(method_config.dependencies)
441+
return cls._create_dependency_params_from_pydantic_model(method_config.dependencies)
439442

440443
def prepare_dependencies_handler_signature(
441444
self,
@@ -679,7 +682,7 @@ def _register_views(self, path: str):
679682
:param path:
680683
:return:
681684
"""
682-
methods_map: dict[Union[str, ViewMethods], Callable[[str], None]] = {
685+
methods_map: dict[str | ViewMethods, Callable[[str], None]] = {
683686
ViewMethods.GET_LIST: self._register_get_resource_list,
684687
ViewMethods.POST: self._register_post_resource_list,
685688
ViewMethods.DELETE_LIST: self._register_delete_resource_list,

0 commit comments

Comments
 (0)