def _get_str_query(self, *args, **kwargs):
if kwargs:
if len(args) > 0:
raise ValueError("Either kwargs or single query parameter "
"must be present")
query = kwargs
elif len(args) == 1:
query = args[0]
else:
raise ValueError("Either kwargs or single query parameter "
"must be present")
if query is None:
query = ''
elif isinstance(query, Mapping):
quoter = partial(_quote, qs=True)
lst = []
for k, v in query.items():
if isinstance(v, str):
pass
elif type(v) == int: # no subclasses like bool
v = str(v)
else:
raise TypeError("Invalid variable type: mapping value "
"should be str or int, got {!r}".format(v))
lst.append(
quoter(k, safe='/?:@') + '=' + quoter(v, safe='/?:@'))
query = '&'.join(lst)
elif isinstance(query, str):
query = _quote(query, safe='/?:@',
protected=PROTECT_CHARS,
qs=True)
elif isinstance(query, (bytes, bytearray, memoryview)):
raise TypeError("Invalid query type: bytes, bytearray and "
"memoryview are forbidden")
elif isinstance(query, Sequence):
quoter = partial(_quote, qs=True, safe='/?:@')
query = '&'.join(quoter(k) + '=' + quoter(v)
for k, v in query)
else:
raise TypeError("Invalid query type: only str, mapping or "
"sequence of (str, str) pairs is allowed")
return query
评论列表
文章目录