dropin

alternative frontend for dropout.tv
git clone https://git.ce9e.org/dropin.git

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   219 
  220    -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)