Skip to content

Commit 5a2c767

Browse files
committed
calculate id col name on each request
1 parent c02969b commit 5a2c767

File tree

4 files changed

+12
-6
lines changed

4 files changed

+12
-6
lines changed

fastapi_jsonapi/api/schemas.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
from typing import Iterable, Optional, Type, Union
22

3-
from pydantic import BaseModel
3+
from fastapi import APIRouter
4+
from pydantic import BaseModel, ConfigDict
45

56
from fastapi_jsonapi.data_typing import TypeModel, TypeSchema
67
from fastapi_jsonapi.views import Operation, ViewBase
78

89

910
class ResourceData(BaseModel):
11+
model_config = ConfigDict(
12+
arbitrary_types_allowed=True,
13+
)
14+
1015
path: Union[str, list[str]]
16+
router: Optional[APIRouter]
1117
tags: list[str]
1218
view: Type[ViewBase]
1319
model: Type[TypeModel]

fastapi_jsonapi/data_layers/base.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from fastapi_jsonapi.data_typing import TypeModel, TypeSchema
1515
from fastapi_jsonapi.querystring import QueryStringManager
1616
from fastapi_jsonapi.schema import BaseJSONAPIItemInSchema
17+
from fastapi_jsonapi.storages import models_storage
1718
from fastapi_jsonapi.views import RelationshipRequestInfo
1819

1920

@@ -51,6 +52,7 @@ def __init__(
5152
self.disable_collection_count: bool = disable_collection_count
5253
self.default_collection_count: int = default_collection_count
5354
self.is_atomic = False
55+
self.id_column_name = models_storage.get_model_id_field_name(resource_type)
5456

5557
async def atomic_start(self, previous_dl: Optional["BaseDataLayer"] = None):
5658
self.is_atomic = True

fastapi_jsonapi/data_layers/sqla/base_model.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
from fastapi_jsonapi.data_layers.sqla.query_building import RelationshipInfo
1212
from fastapi_jsonapi.data_typing import TypeModel
1313
from fastapi_jsonapi.exceptions import BadRequest, InternalServerError, ObjectNotFound
14-
from fastapi_jsonapi.storages.models_storage import models_storage
1514

1615
log = logging.getLogger(__name__)
1716

@@ -98,10 +97,9 @@ async def count(
9897
cls,
9998
session: AsyncSession,
10099
stmt: Select,
101-
resource_type: str,
100+
id_field_name: str = "id",
102101
) -> int:
103-
id_col = models_storage.get_model_id_field_name(resource_type)
104-
stmt = select(func.count(distinct(column(id_col)))).select_from(stmt.subquery())
102+
stmt = select(func.count(distinct(column(id_field_name)))).select_from(stmt.subquery())
105103
return (await session.execute(stmt)).scalar_one()
106104

107105
@classmethod

fastapi_jsonapi/data_layers/sqla/orm.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ async def get_collection(
428428
objects_count = await self._base_sql.count(
429429
session=self.session,
430430
stmt=query,
431-
resource_type=self.resource_type,
431+
id_field_name=self.id_column_name,
432432
)
433433

434434
collection = await self.after_get_collection(collection, qs, view_kwargs)

0 commit comments

Comments
 (0)