Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pycares/utils.py: 28%
43 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:52 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:52 +0000
2try:
3 import idna as idna2008
4except ImportError:
5 idna2008 = None
8def ascii_bytes(data):
9 if isinstance(data, str):
10 return data.encode('ascii')
11 if isinstance(data, bytes):
12 return data
13 raise TypeError('only str (ascii encoding) and bytes are supported')
16def maybe_str(data):
17 if isinstance(data, str):
18 return data
19 if isinstance(data, bytes):
20 try:
21 return data.decode('ascii')
22 except UnicodeDecodeError:
23 return data
24 raise TypeError('only str (ascii encoding) and bytes are supported')
27def is_all_ascii(text):
28 for c in text:
29 if ord(c) > 0x7f:
30 return False
31 return True
33def parse_name_idna2008(name):
34 parts = name.split('.')
35 r = []
36 for part in parts:
37 if is_all_ascii(part):
38 r.append(part.encode('ascii'))
39 else:
40 r.append(idna2008.encode(part))
41 return b'.'.join(r)
43def parse_name(name):
44 if isinstance(name, str):
45 if is_all_ascii(name):
46 return name.encode('ascii')
47 if idna2008 is not None:
48 return parse_name_idna2008(name)
49 return name.encode('idna')
50 if isinstance(name, bytes):
51 return name
52 raise TypeError('only str and bytes are supported')
55__all__ = ['ascii_bytes', 'maybe_str', 'parse_name']