11# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22
3- from typing import List , Generic , TypeVar , Optional
3+ from typing import Any , List , Type , Generic , Mapping , TypeVar , Optional , cast
44from typing_extensions import override
55
6+ from httpx import Response
7+
8+ from ._utils import is_mapping
9+ from ._models import BaseModel
610from ._base_client import BasePage , PageInfo , BaseSyncPage , BaseAsyncPage
711
8- __all__ = ["SyncMyOffsetPage" , "AsyncMyOffsetPage" ]
12+ __all__ = [
13+ "SyncMyOffsetPageTopLevelArray" ,
14+ "AsyncMyOffsetPageTopLevelArray" ,
15+ "SyncOffsetPageEntries" ,
16+ "AsyncOffsetPageEntries" ,
17+ ]
18+
19+ _BaseModelT = TypeVar ("_BaseModelT" , bound = BaseModel )
920
1021_T = TypeVar ("_T" )
1122
1223
13- class SyncMyOffsetPage (BaseSyncPage [_T ], BasePage [_T ], Generic [_T ]):
24+ class SyncMyOffsetPageTopLevelArray (BaseSyncPage [_T ], BasePage [_T ], Generic [_T ]):
1425 items : List [_T ]
1526
1627 @override
@@ -31,8 +42,17 @@ def next_page_info(self) -> Optional[PageInfo]:
3142
3243 return PageInfo (params = {"offset" : current_count })
3344
45+ @classmethod
46+ def build (cls : Type [_BaseModelT ], * , response : Response , data : object ) -> _BaseModelT : # noqa: ARG003
47+ return cls .construct (
48+ None ,
49+ ** {
50+ ** (cast (Mapping [str , Any ], data ) if is_mapping (data ) else {"items" : data }),
51+ },
52+ )
53+
3454
35- class AsyncMyOffsetPage (BaseAsyncPage [_T ], BasePage [_T ], Generic [_T ]):
55+ class AsyncMyOffsetPageTopLevelArray (BaseAsyncPage [_T ], BasePage [_T ], Generic [_T ]):
3656 items : List [_T ]
3757
3858 @override
@@ -52,3 +72,90 @@ def next_page_info(self) -> Optional[PageInfo]:
5272 current_count = offset + length
5373
5474 return PageInfo (params = {"offset" : current_count })
75+
76+ @classmethod
77+ def build (cls : Type [_BaseModelT ], * , response : Response , data : object ) -> _BaseModelT : # noqa: ARG003
78+ return cls .construct (
79+ None ,
80+ ** {
81+ ** (cast (Mapping [str , Any ], data ) if is_mapping (data ) else {"items" : data }),
82+ },
83+ )
84+
85+
86+ class SyncOffsetPageEntries (BaseSyncPage [_T ], BasePage [_T ], Generic [_T ]):
87+ entries : List [_T ]
88+ total_count : Optional [int ] = None
89+
90+ @override
91+ def _get_page_items (self ) -> List [_T ]:
92+ entries = self .entries
93+ if not entries :
94+ return []
95+ return entries
96+
97+ @override
98+ def next_page_info (self ) -> Optional [PageInfo ]:
99+ offset = self ._options .params .get ("offset" ) or 0
100+ if not isinstance (offset , int ):
101+ raise ValueError (f'Expected "offset" param to be an integer but got { offset } ' )
102+
103+ length = len (self ._get_page_items ())
104+ current_count = offset + length
105+
106+ total_count = self .total_count
107+ if total_count is None :
108+ return None
109+
110+ if current_count < total_count :
111+ return PageInfo (params = {"offset" : current_count })
112+
113+ return None
114+
115+ @classmethod
116+ def build (cls : Type [_BaseModelT ], * , response : Response , data : object ) -> _BaseModelT : # noqa: ARG003
117+ return cls .construct (
118+ None ,
119+ ** {
120+ ** (cast (Mapping [str , Any ], data ) if is_mapping (data ) else {"entries" : data }),
121+ },
122+ )
123+
124+
125+ class AsyncOffsetPageEntries (BaseAsyncPage [_T ], BasePage [_T ], Generic [_T ]):
126+ entries : List [_T ]
127+ total_count : Optional [int ] = None
128+
129+ @override
130+ def _get_page_items (self ) -> List [_T ]:
131+ entries = self .entries
132+ if not entries :
133+ return []
134+ return entries
135+
136+ @override
137+ def next_page_info (self ) -> Optional [PageInfo ]:
138+ offset = self ._options .params .get ("offset" ) or 0
139+ if not isinstance (offset , int ):
140+ raise ValueError (f'Expected "offset" param to be an integer but got { offset } ' )
141+
142+ length = len (self ._get_page_items ())
143+ current_count = offset + length
144+
145+ total_count = self .total_count
146+ if total_count is None :
147+ return None
148+
149+ if current_count < total_count :
150+ return PageInfo (params = {"offset" : current_count })
151+
152+ return None
153+
154+ @classmethod
155+ def build (cls : Type [_BaseModelT ], * , response : Response , data : object ) -> _BaseModelT : # noqa: ARG003
156+ return cls .construct (
157+ None ,
158+ ** {
159+ ** (cast (Mapping [str , Any ], data ) if is_mapping (data ) else {"entries" : data }),
160+ },
161+ )
0 commit comments