d = {} # Preserves order from Python 3.7 (guaranteed) or CPython 3.6 (implementation detail)
keys = {} # casefolded key -> d key
@@ -64,7 +79,7 @@ class Item:
'''
HTTP GET or POST a URL
url: str or yarl.URL
url: str or yarl.URL; if this is not a complete URL, it is evaluated relative to self.baseUrl
responseHandler: None or a callable that determines how the response is handled; if None, self.defaultResponseHandler is used. See qwarc.utils.handle_response_default for details.
method: str, must be 'GET' or 'POST'
data: dict or list/tuple of lists/tuples of length two or bytes or file-like or None, the data to be sent in the request body
@@ -80,6 +95,10 @@ class Item:
#TODO: Rewrite using 'async with self.session.get'
url = yarl.URL(url) # Explicitly convert for normalisation, percent-encoding, etc.
if not url.scheme or not url.host:
if not self.baseUrl:
raise ValueError('Incomplete URL and no baseUrl to join it with')
url = self.baseUrl.join(url)
if responseHandler is None:
responseHandler = self.defaultResponseHandler
assert method in ('GET', 'POST'), 'method must be GET or POST'