Skip to content

Commit ba3b868

Browse files
pcrespovgiancarloromeo
authored andcommitted
⬆️ ♻️ Upgrade pagination customisation in api-server (ITISFoundation#6545)
1 parent 04cd728 commit ba3b868

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,14 +156,11 @@ fastapi==0.114.2
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
161160
fastapi-cli==0.0.5
162161
# via fastapi
163-
fastapi-pagination==0.12.17
164-
# via
165-
# -c requirements/./constraints.txt
166-
# -r requirements/_base.in
162+
fastapi-pagination==0.12.31
163+
# via -r requirements/_base.in
167164
faststream==0.5.10
168165
# via
169166
# -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,29 +9,35 @@
99
from collections.abc import Sequence
1010
from typing import 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 BaseModel, ConfigDict, Field, NonNegativeInt, field_validator
21+
from pydantic import BaseModel, ConfigDict, NonNegativeInt, field_validator
2222

2323
T = TypeVar("T")
2424

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

3642

3743
class OnePage(BaseModel, Generic[T]):

0 commit comments

Comments
 (0)