- commit
- 99d80d4382df3e647a8ec2072ee4f95e94fd6f62
- parent
- 0e0ca536d0ee0c91e9d6c23675ccd995b1d4eb68
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2025-03-13 07:10
fetch paginated results in fetch_items
Diffstat
M | dropin.py | 18 | +++++++++++++----- |
1 files changed, 13 insertions, 5 deletions
diff --git a/dropin.py b/dropin.py
@@ -217,9 +217,16 @@ async def fetch(url, *, need_auth=False, **params): 217 217 return await response.json() 218 218 219 219220 -1 async def fetch_items(url, **params):221 -1 items = await fetch(url, **params)222 -1 return items['_embedded']['items']-1 220 async def fetch_items(url, limit=None, **params): -1 221 results = [] -1 222 for page in range(1, 100): -1 223 items = await fetch(url, page=page, **params) -1 224 results += items['_embedded']['items'] -1 225 if len(results) >= items['total'] or len(results) >= limit: -1 226 break -1 227 if limit: -1 228 results = results[:limit] -1 229 return results 223 230 224 231 225 232 def render_response(request, template, **data): @@ -257,10 +264,11 @@ async def home_view(request): 257 264 'https://api.vhx.tv/browse', 258 265 product='https://api.vhx.tv/products/28599', 259 266 site_id=SITE_ID,260 -1 per_page=10,-1 267 limit=20, 261 268 ) 262 269 section_items = await asyncio.gather(*[263 -1 fetch_items(sec['_links']['items']['href']) for sec in sections-1 270 fetch_items(sec['_links']['items']['href'], limit=20) -1 271 for sec in sections 264 272 ]) 265 273 data = [ 266 274 {**sec, 'items': items} for sec, items in zip(sections, section_items)