Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/yarl/_quoters.py: 72%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

29 statements  

1"""Quoting and unquoting utilities for URL parts.""" 

2 

3from urllib.parse import quote 

4 

5from ._quoting import _Quoter, _Unquoter 

6 

7QUOTER = _Quoter(requote=False) 

8REQUOTER = _Quoter() 

9PATH_QUOTER = _Quoter(safe="@:", protected="/+", requote=False) 

10PATH_REQUOTER = _Quoter(safe="@:", protected=":/@!$&'()*+,;=") 

11QUERY_QUOTER = _Quoter(safe="?/:@", protected="=+&;", qs=True, requote=False) 

12QUERY_REQUOTER = _Quoter(safe="?/:@", protected="=+&;", qs=True) 

13QUERY_PART_QUOTER = _Quoter(safe="?/:@", qs=True, requote=False) 

14FRAGMENT_QUOTER = _Quoter(safe="?/:@", requote=False) 

15FRAGMENT_REQUOTER = _Quoter(safe="?/:@") 

16# WHATWG mode keeps a "%" that does not start a "%XX" escape in parsed URLs 

17WHATWG_PATH_REQUOTER = _Quoter( 

18 safe="@:", protected=":/@!$&'()*+,;=", keep_invalid_pct=True 

19) 

20WHATWG_QUERY_REQUOTER = _Quoter( 

21 safe="?/:@", protected="=+&;", qs=True, keep_invalid_pct=True 

22) 

23WHATWG_FRAGMENT_REQUOTER = _Quoter(safe="?/:@", keep_invalid_pct=True) 

24 

25UNQUOTER = _Unquoter() 

26PATH_SAFE_UNQUOTER = _Unquoter(ignore="/%") 

27# Keeps "%" and the delimiters of an authority encoded in a zone identifier. 

28ZONE_ID_UNQUOTER = _Unquoter(ignore="%/:?#[]@") 

29QS_UNQUOTER = _Unquoter(qs=True) 

30# to match urllib.parse.unquote_plus 

31UNQUOTER_PLUS = _Unquoter(plus=True, replace_invalid=True) 

32 

33 

34def human_quote(s: str | None, unsafe: str) -> str | None: 

35 if not s: 

36 return s 

37 for c in "%" + unsafe: 

38 if c in s: 

39 s = s.replace(c, f"%{ord(c):02X}") 

40 if s.isprintable(): 

41 return s 

42 return "".join(c if c.isprintable() else quote(c) for c in s)