Skip to content

Commit 33237ba

Browse files
authored
⬆️ ♻️ Upgrade pagination customisation in api-server (#6545)
1 parent fbb64fd commit 33237ba

File tree

3 files changed

+23
-48
lines changed

3 files changed

+23
-48
lines changed

services/api-server/requirements/_base.txt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,9 @@ fastapi==0.99.1
156156
# -c requirements/../../../requirements/constraints.txt
157157
# -r requirements/../../../packages/service-library/requirements/_fastapi.in
158158
# -r requirements/_base.in
159-
# fastapi-pagination
160159
# prometheus-fastapi-instrumentator
161-
fastapi-pagination==0.12.17
162-
# via
163-
# -c requirements/./constraints.txt
164-
# -r requirements/_base.in
160+
fastapi-pagination==0.12.31
161+
# via -r requirements/_base.in
165162
faststream==0.5.10
166163
# via
167164
# -r requirements/../../../packages/service-library/requirements/_base.in

services/api-server/requirements/constraints.txt

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -40,31 +40,3 @@ aws-sam-translator<1.56.0
4040
# # aws-sam-translator<1.55.0 (from -c ./constraints.txt (line 32))
4141
# # aws-sam-translator>=1.57.0 (from cfn-lint==0.72.10->-c ./constraints.txt (line 33))
4242
cfn-lint<0.72.1
43-
44-
45-
46-
#
47-
# .venv/lib/python3.10/site-packages/fastapi_pagination/api.py:352: in _update_route
48-
# get_parameterless_sub_dependant(
49-
# .venv/lib/python3.10/site-packages/fastapi/dependencies/utils.py:136: in get_parameterless_sub_dependant
50-
# return get_sub_dependant(depends=depends, dependency=depends.dependency, path=path)
51-
# .venv/lib/python3.10/site-packages/fastapi/dependencies/utils.py:159: in get_sub_dependant
52-
# sub_dependant = get_dependant(
53-
# .venv/lib/python3.10/site-packages/fastapi/dependencies/utils.py:310: in get_dependant
54-
# sub_dependant = get_param_sub_dependant(
55-
# .venv/lib/python3.10/site-packages/fastapi/dependencies/utils.py:123: in get_param_sub_dependant
56-
# return get_sub_dependant(
57-
# .venv/lib/python3.10/site-packages/fastapi/dependencies/utils.py:159: in get_sub_dependant
58-
# sub_dependant = get_dependant(
59-
# .venv/lib/python3.10/site-packages/fastapi/dependencies/utils.py:331: in get_dependant
60-
# add_param_to_fields(field=param_field, dependant=dependant)
61-
# _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
62-
63-
# def add_param_to_fields(*, field: ModelField, dependant: Dependant) -> None:
64-
# field_info = cast(params.Param, field.field_info)
65-
# > if field_info.in_ == params.ParamTypes.path:
66-
# E AttributeError: 'FieldInfo' object has no attribute 'in_'
67-
68-
# .venv/lib/python3.10/site-packages/fastapi/dependencies/utils.py:500: AttributeError
69-
70-
fastapi-pagination<=0.12.17

services/api-server/src/simcore_service_api_server/models/pagination.py

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,36 @@
99
from collections.abc import Sequence
1010
from typing import Any, ClassVar, Generic, TypeAlias, TypeVar
1111

12-
from fastapi_pagination.limit_offset import LimitOffsetParams
13-
from fastapi_pagination.links.limit_offset import (
14-
LimitOffsetPage as _FastApiLimitOffsetPage,
15-
)
12+
from fastapi import Query
13+
from fastapi_pagination.customization import CustomizedPage, UseName, UseParamsFields
14+
from fastapi_pagination.limit_offset import LimitOffsetParams as _LimitOffsetParams
15+
from fastapi_pagination.links import LimitOffsetPage as _LimitOffsetPage
1616
from models_library.rest_pagination import (
1717
DEFAULT_NUMBER_OF_ITEMS_PER_PAGE,
1818
MAXIMUM_NUMBER_OF_ITEMS_PER_PAGE,
1919
)
2020
from models_library.utils.pydantic_tools_extension import FieldNotRequired
21-
from pydantic import Field, NonNegativeInt, validator
21+
from pydantic import NonNegativeInt, validator
2222
from pydantic.generics import GenericModel
2323

2424
T = TypeVar("T")
2525

26-
# NOTE: same pagination limits and defaults as web-server
27-
Page = _FastApiLimitOffsetPage.with_custom_options(
28-
limit=Field(
29-
DEFAULT_NUMBER_OF_ITEMS_PER_PAGE, ge=1, le=MAXIMUM_NUMBER_OF_ITEMS_PER_PAGE
30-
)
31-
)
32-
# NOTE: Renamed to make shorter clients name models
33-
Page.__name__ = "Page"
34-
35-
PaginationParams: TypeAlias = LimitOffsetParams
26+
Page = CustomizedPage[
27+
_LimitOffsetPage[T],
28+
# Customizes the default and maximum to fit those of the web-server. It simplifies interconnection
29+
UseParamsFields(
30+
limit=Query(
31+
DEFAULT_NUMBER_OF_ITEMS_PER_PAGE,
32+
ge=1,
33+
le=MAXIMUM_NUMBER_OF_ITEMS_PER_PAGE,
34+
description="Page size limit",
35+
)
36+
),
37+
# Renames class for the openapi.json to make the python-client's name models shorter
38+
UseName(name="Page"),
39+
]
40+
41+
PaginationParams: TypeAlias = _LimitOffsetParams
3642

3743

3844
class OnePage(GenericModel, Generic[T]):

0 commit comments

Comments
 (0)