1- from __future__ import annotations
1+ from __future__ import annotations
22
33import typing
4- from urllib .parse import parse_qs , unquote , urlencode
54
65from ._urlparse import urlparse
6+ from ._urlencode import unquote , urldecode , urlencode
77
8- __all__ = ["URL " , "QueryParams " ]
8+ __all__ = ["QueryParams " , "URL " ]
99
1010
1111class URL :
@@ -70,7 +70,7 @@ class URL:
7070 themselves.
7171 """
7272
73- def __init__ (self , url : URL | str = "" , ** kwargs : typing .Any ) -> None :
73+ def __init__ (self , url : " URL" | str = "" , ** kwargs : typing .Any ) -> None :
7474 if kwargs :
7575 allowed = {
7676 "scheme" : str ,
@@ -233,7 +233,7 @@ def query(self) -> bytes:
233233 return query .encode ("ascii" )
234234
235235 @property
236- def params (self ) -> QueryParams :
236+ def params (self ) -> " QueryParams" :
237237 """
238238 The URL query parameters, neatly parsed and packaged into an immutable
239239 multidict representation.
@@ -358,7 +358,7 @@ def __init__(
358358 if params is None :
359359 d = {}
360360 elif isinstance (params , str ):
361- d = parse_qs (params , keep_blank_values = True )
361+ d = urldecode (params )
362362 elif isinstance (params , QueryParams ):
363363 d = params .multi_dict ()
364364 elif isinstance (params , dict ):
@@ -454,7 +454,7 @@ def get_list(self, key: str) -> list[str]:
454454 """
455455 return list (self ._dict .get (key , []))
456456
457- def set (self , key : str , value : str ) -> "QueryParams" :
457+ def copy_set (self , key : str , value : str ) -> "QueryParams" :
458458 """
459459 Return a new QueryParams instance, setting the value of a key.
460460
@@ -469,7 +469,7 @@ def set(self, key: str, value: str) -> "QueryParams":
469469 q ._dict [key ] = [value ]
470470 return q
471471
472- def append (self , key : str , value : str ) -> "QueryParams" :
472+ def copy_append (self , key : str , value : str ) -> "QueryParams" :
473473 """
474474 Return a new QueryParams instance, setting or appending the value of a key.
475475
@@ -484,7 +484,7 @@ def append(self, key: str, value: str) -> "QueryParams":
484484 q ._dict [key ] = q .get_list (key ) + [value ]
485485 return q
486486
487- def remove (self , key : str ) -> QueryParams :
487+ def copy_remove (self , key : str ) -> QueryParams :
488488 """
489489 Return a new QueryParams instance, removing the value of a key.
490490
@@ -499,7 +499,7 @@ def remove(self, key: str) -> QueryParams:
499499 q ._dict .pop (str (key ), None )
500500 return q
501501
502- def copy_with (
502+ def copy_update (
503503 self ,
504504 params : (
505505 "QueryParams" | dict [str , str | list [str ]] | list [tuple [str , str ]] | None
@@ -511,11 +511,11 @@ def copy_with(
511511 Usage:
512512
513513 q = httpx.QueryParams("a=123")
514- q = q.copy_with ({"b": "456"})
514+ q = q.copy_update ({"b": "456"})
515515 assert q == httpx.QueryParams("a=123&b=456")
516516
517517 q = httpx.QueryParams("a=123")
518- q = q.copy_with ({"a": "456", "b": "789"})
518+ q = q.copy_update ({"a": "456", "b": "789"})
519519 assert q == httpx.QueryParams("a=456&b=789")
520520 """
521521 q = QueryParams (params )
@@ -546,7 +546,7 @@ def __eq__(self, other: typing.Any) -> bool:
546546 return sorted (self .multi_items ()) == sorted (other .multi_items ())
547547
548548 def __str__ (self ) -> str :
549- return urlencode (self .multi_items ())
549+ return urlencode (self .multi_dict ())
550550
551551 def __repr__ (self ) -> str :
552552 return f"<QueryParams { str (self )!r} >"
0 commit comments