MCPcopy
hub / github.com/encode/httpx / QueryParams

Class QueryParams

httpx/_urls.py:420–641  ·  httpx/_urls.py::QueryParams

URL query parameters, as a multi-dict.

Source from the content-addressed store, hash-verified

418
419
420class QueryParams(typing.Mapping[str, str]):
421 class="st">"""
422 URL query parameters, as a multi-dict.
423 class="st">"""
424
425 def __init__(self, *args: QueryParamTypes | None, **kwargs: typing.Any) -> None:
426 assert len(args) < 2, class="st">"Too many arguments."
427 assert not (args and kwargs), class="st">"Cannot mix named and unnamed arguments."
428
429 value = args[0] if args else kwargs
430
431 if value is None or isinstance(value, (str, bytes)):
432 value = value.decode(class="st">"ascii") if isinstance(value, bytes) else value
433 self._dict = parse_qs(value, keep_blank_values=True)
434 elif isinstance(value, QueryParams):
435 self._dict = {k: list(v) for k, v in value._dict.items()}
436 else:
437 dict_value: dict[typing.Any, list[typing.Any]] = {}
438 if isinstance(value, (list, tuple)):
439 class="cm"># Convert list inputs like:
440 class="cm"># [(class="st">"a", class="st">"123"), (class="st">"a", class="st">"456"), (class="st">"b", class="st">"789")]
441 class="cm"># To a dict representation, like:
442 class="cm"># {class="st">"a": [class="st">"123", class="st">"456"], class="st">"b": [class="st">"789"]}
443 for item in value:
444 dict_value.setdefault(item[0], []).append(item[1])
445 else:
446 class="cm"># Convert dict inputs like:
447 class="cm"># {class="st">"a": class="st">"123", class="st">"b": [class="st">"456", class="st">"789"]}
448 class="cm"># To dict inputs where values are always lists, like:
449 class="cm"># {class="st">"a": [class="st">"123"], class="st">"b": [class="st">"456", class="st">"789"]}
450 dict_value = {
451 k: list(v) if isinstance(v, (list, tuple)) else [v]
452 for k, v in value.items()
453 }
454
455 class="cm"># Ensure that keys and values are neatly coerced to strings.
456 class="cm"># We coerce values `True` and `False` to JSON-like class="st">"true" and class="st">"false"
457 class="cm"># representations, and coerce `None` values to the empty string.
458 self._dict = {
459 str(k): [primitive_value_to_str(item) for item in v]
460 for k, v in dict_value.items()
461 }
462
463 def keys(self) -> typing.KeysView[str]:
464 class="st">"""
465 Return all the keys in the query params.
466
467 Usage:
468
469 q = httpx.QueryParams(class="st">"a=123&a=456&b=789")
470 assert list(q.keys()) == [class="st">"a", class="st">"b"]
471 class="st">"""
472 return self._dict.keys()
473
474 def values(self) -> typing.ValuesView[str]:
475 class="st">"""
476 Return all the values in the query params. If a key occurs more than once
477 only the first item for that key is returned.

Callers 9

__init__Method · 0.85
paramsMethod · 0.85
setMethod · 0.85
addMethod · 0.85
removeMethod · 0.85
mergeMethod · 0.85
__init__Method · 0.85
paramsMethod · 0.85
_merge_queryparamsMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected