Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.10/site-packages/pycares/utils.py: 13%
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
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
2from typing import Union
4try:
5 import idna as idna2008
6except ImportError:
7 idna2008 = None
10def ascii_bytes(data):
11 if isinstance(data, str):
12 return data.encode('ascii')
13 if isinstance(data, bytes):
14 return data
15 raise TypeError('only str (ascii encoding) and bytes are supported')
18def maybe_str(data):
19 if isinstance(data, str):
20 return data
21 if isinstance(data, bytes):
22 try:
23 return data.decode('ascii')
24 except UnicodeDecodeError:
25 return data
26 raise TypeError('only str (ascii encoding) and bytes are supported')
29def parse_name_idna2008(name: str) -> str:
30 parts = name.split('.')
31 r = []
32 for part in parts:
33 if part.isascii():
34 r.append(part.encode('ascii'))
35 else:
36 r.append(idna2008.encode(part))
37 return b'.'.join(r)
40def parse_name(name: Union[str, bytes]) -> bytes:
41 if isinstance(name, str):
42 if name.isascii():
43 return name.encode('ascii')
44 if idna2008 is not None:
45 return parse_name_idna2008(name)
46 return name.encode('idna')
47 if isinstance(name, bytes):
48 return name
49 raise TypeError('only str and bytes are supported')
52__all__ = ['ascii_bytes', 'maybe_str', 'parse_name']