Toggle Light / Dark / Auto color theme
Toggle table of contents sidebar
Source code for parseur.client
import logging
from typing import Any , Dict , Generator , Optional
from urllib.parse import urljoin
import requests
import parseur
[docs] class Client :
@classmethod
@classmethod
[docs] def request ( cls , method : str , endpoint : str , ** kwargs ) -> Any :
url = urljoin ( parseur . api_base , endpoint )
logging . debug ( f "Request: { method } { url } " )
headers = cls . auth_headers ( json = "json" in kwargs )
response = requests . request ( method , url , headers = headers , ** kwargs )
response . raise_for_status ()
return response . json ()
@classmethod
[docs] def paginate (
cls , endpoint : str , params : Optional [ Dict [ str , Any ]] = None
) -> Generator [ Dict , None , None ]:
url = urljoin ( parseur . api_base , endpoint )
headers = cls . auth_headers ()
params = params . copy () if params else {}
page = 1
while True :
params [ "page" ] = page
logging . debug ( f "Paginate request: { url } (page { page } )" )
response = requests . get ( url , headers = headers , params = params )
response . raise_for_status ()
data = response . json ()
for item in data [ "results" ]:
yield item
if data [ "current" ] >= data [ "total" ]:
break
page += 1