Skip to content

Commit 9c7c95a

Browse files
seedspiritclaude
andauthored
refactor(BA-5010): Extract shared PaginationInfo DTO class (#9869)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 8df0ebf commit 9c7c95a

20 files changed

Lines changed: 49 additions & 122 deletions

File tree

changes/9869.enhance.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Extract shared PaginationInfo DTO class and replace per-module duplicates with unified import.

src/ai/backend/common/dto/manager/agent/response.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from pydantic import BaseModel, Field
99

1010
from ai.backend.common.api_handlers import BaseResponseModel
11+
from ai.backend.common.dto.manager.pagination import PaginationInfo
1112

1213
__all__ = (
1314
"AgentDTO",
@@ -33,14 +34,6 @@ class AgentDTO(BaseModel):
3334
version: str = Field(description="Agent version string")
3435

3536

36-
class PaginationInfo(BaseModel):
37-
"""Pagination information."""
38-
39-
total: int = Field(description="Total number of items")
40-
offset: int = Field(description="Number of items skipped")
41-
limit: int | None = Field(default=None, description="Maximum items returned")
42-
43-
4437
class GetAgentDetailResponse(BaseResponseModel):
4538
"""Response for getting a single agent detail."""
4639

src/ai/backend/common/dto/manager/auto_scaling_rule/response.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from pydantic import BaseModel, Field
1313

1414
from ai.backend.common.api_handlers import BaseResponseModel
15+
from ai.backend.common.dto.manager.pagination import PaginationInfo
1516
from ai.backend.common.types import AutoScalingMetricSource
1617

1718
__all__ = (
@@ -54,14 +55,6 @@ class GetAutoScalingRuleResponse(BaseResponseModel):
5455
auto_scaling_rule: AutoScalingRuleDTO = Field(description="Auto-scaling rule data")
5556

5657

57-
class PaginationInfo(BaseModel):
58-
"""Pagination information."""
59-
60-
total: int = Field(description="Total number of items")
61-
offset: int = Field(description="Number of items skipped")
62-
limit: int | None = Field(default=None, description="Maximum items returned")
63-
64-
6558
class SearchAutoScalingRulesResponse(BaseResponseModel):
6659
"""Response for searching auto-scaling rules."""
6760

src/ai/backend/common/dto/manager/compute_session/response.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
from typing import Any
55
from uuid import UUID
66

7-
from pydantic import BaseModel, Field
7+
from pydantic import Field
88

99
from ai.backend.common.api_handlers import BaseResponseModel
10+
from ai.backend.common.dto.manager.pagination import PaginationInfo
1011

1112
__all__ = (
1213
"PaginationInfo",
@@ -17,14 +18,6 @@
1718
)
1819

1920

20-
class PaginationInfo(BaseModel):
21-
"""Pagination information."""
22-
23-
total: int = Field(description="Total number of items")
24-
offset: int = Field(description="Number of items skipped")
25-
limit: int | None = Field(default=None, description="Maximum items returned")
26-
27-
2821
class ContainerDTO(BaseResponseModel):
2922
"""Container (kernel) DTO."""
3023

src/ai/backend/common/dto/manager/deployment/response.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
RouteStatus,
1919
RouteTrafficStatus,
2020
)
21+
from ai.backend.common.dto.manager.pagination import PaginationInfo
2122
from ai.backend.common.types import ClusterMode, RuntimeVariant
2223

2324
__all__ = (
@@ -54,14 +55,6 @@
5455
)
5556

5657

57-
class PaginationInfo(BaseModel):
58-
"""Pagination information."""
59-
60-
total: int = Field(description="Total number of items")
61-
offset: int = Field(description="Number of items skipped")
62-
limit: int | None = Field(default=None, description="Maximum items returned")
63-
64-
6558
class NetworkConfigDTO(BaseModel):
6659
"""Network configuration for deployment."""
6760

src/ai/backend/common/dto/manager/domain/response.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from pydantic import BaseModel, Field
1212

1313
from ai.backend.common.api_handlers import BaseResponseModel
14+
from ai.backend.common.dto.manager.pagination import PaginationInfo
1415

1516
__all__ = (
1617
"CreateDomainResponse",
@@ -40,14 +41,6 @@ class DomainDTO(BaseModel):
4041
integration_id: str | None = Field(default=None, description="External integration ID")
4142

4243

43-
class PaginationInfo(BaseModel):
44-
"""Pagination information."""
45-
46-
total: int = Field(description="Total number of items")
47-
offset: int = Field(description="Number of items skipped")
48-
limit: int | None = Field(default=None, description="Maximum items returned")
49-
50-
5144
class CreateDomainResponse(BaseResponseModel):
5245
"""Response for creating a domain."""
5346

src/ai/backend/common/dto/manager/fair_share/response.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from pydantic import BaseModel, Field
1010

1111
from ai.backend.common.api_handlers import BaseResponseModel
12+
from ai.backend.common.dto.manager.pagination import PaginationInfo
1213

1314
__all__ = (
1415
# Common
@@ -51,14 +52,6 @@
5152
)
5253

5354

54-
class PaginationInfo(BaseModel):
55-
"""Pagination information."""
56-
57-
total: int = Field(description="Total number of items")
58-
offset: int = Field(description="Number of items skipped")
59-
limit: int | None = Field(default=None, description="Maximum items returned")
60-
61-
6255
class ResourceSlotEntryDTO(BaseModel):
6356
"""A single resource slot entry with resource type and quantity."""
6457

src/ai/backend/common/dto/manager/group/response.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from pydantic import BaseModel, Field
1313

1414
from ai.backend.common.api_handlers import BaseResponseModel
15-
from ai.backend.common.dto.manager.deployment.response import PaginationInfo
15+
from ai.backend.common.dto.manager.pagination import PaginationInfo
1616

1717
__all__ = (
1818
# DTOs

src/ai/backend/common/dto/manager/image/response.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from pydantic import BaseModel, Field
1313

1414
from ai.backend.common.api_handlers import BaseResponseModel
15+
from ai.backend.common.dto.manager.pagination import PaginationInfo
1516

1617
__all__ = (
1718
"AliasImageResponse",
@@ -71,14 +72,6 @@ class ImageDTO(BaseModel):
7172
created_at: datetime | None = Field(default=None, description="Creation timestamp")
7273

7374

74-
class PaginationInfo(BaseModel):
75-
"""Pagination information."""
76-
77-
total: int = Field(description="Total number of items")
78-
offset: int = Field(description="Number of items skipped")
79-
limit: int | None = Field(default=None, description="Maximum items returned")
80-
81-
8275
class SearchImagesResponse(BaseResponseModel):
8376
"""Response for searching images."""
8477

src/ai/backend/common/dto/manager/notification/response.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
SMTPAuth,
2020
SMTPConnection,
2121
)
22+
from ai.backend.common.dto.manager.pagination import PaginationInfo
2223

2324
__all__ = (
2425
"CreateNotificationChannelResponse",
@@ -109,14 +110,6 @@ class GetNotificationChannelResponse(BaseResponseModel):
109110
channel: NotificationChannelDTO = Field(description="Channel data")
110111

111112

112-
class PaginationInfo(BaseModel):
113-
"""Pagination information."""
114-
115-
total: int = Field(description="Total number of items")
116-
offset: int = Field(description="Number of items skipped")
117-
limit: int | None = Field(default=None, description="Maximum items returned")
118-
119-
120113
class ListNotificationChannelsResponse(BaseResponseModel):
121114
"""Response for listing notification channels."""
122115

0 commit comments

Comments
 (0)