Skip to content

Commit f6ab93d

Browse files
committed
Add query pages object representation
1 parent a7f0072 commit f6ab93d

File tree

1 file changed

+35
-12
lines changed

1 file changed

+35
-12
lines changed

src/phub/objects/query.py

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,39 @@
1818

1919
QueryItem = Video | FeedItem | User
2020

21+
class Pages:
22+
'''
23+
An iterator for query pages.
24+
'''
25+
26+
def __init__(self, query: Query) -> None:
27+
'''
28+
Initialise a new Pages object.
29+
'''
30+
31+
self.query = query
32+
33+
def __repr__(self) -> str:
34+
35+
return f'phub.Pages(query={self.query})'
36+
37+
def __getitem__(self, index: int | slice) -> Iterator[QueryItem] | Iterator[Iterator[QueryItem]]:
38+
'''
39+
Get a single, or slice of pages.
40+
'''
41+
42+
if isinstance(index, int):
43+
items = self.query._get_page(index)
44+
return self.query._iter_page(items)
45+
46+
def wrap():
47+
for i in range(index.start or 0,
48+
index.stop or 0,
49+
index.step or 1):
50+
51+
yield self[i]
52+
53+
return wrap()
2154

2255
class Query:
2356
'''
@@ -74,22 +107,12 @@ def __len__(self) -> int:
74107
return int(counter)
75108

76109
@cached_property
77-
def pages(self) -> Iterator[Iterator[QueryItem]]:
110+
def pages(self) -> Pages:
78111
'''
79112
Iterate through the query pages.
80113
'''
81114

82-
i = 0
83-
while 1:
84-
85-
try:
86-
page = self._get_page(i)
87-
i += 1
88-
89-
yield self._iter_page(page)
90-
91-
except errors.NoResult:
92-
return
115+
return Pages(self)
93116

94117
def __iter__(self) -> Iterator[QueryItem]:
95118
'''

0 commit comments

Comments
 (0)