golden hour
/usr/lib/python3.8/encodings
⬆️ Go Up
Upload
File/Folder
Size
Actions
__init__.py
5.46 KB
Del
OK
__pycache__
-
Del
OK
aliases.py
15.33 KB
Del
OK
ascii.py
1.22 KB
Del
OK
base64_codec.py
1.5 KB
Del
OK
big5.py
1019 B
Del
OK
big5hkscs.py
1.01 KB
Del
OK
bz2_codec.py
2.2 KB
Del
OK
charmap.py
2.04 KB
Del
OK
cp037.py
12.81 KB
Del
OK
cp1006.py
13.25 KB
Del
OK
cp1026.py
12.81 KB
Del
OK
cp1125.py
33.79 KB
Del
OK
cp1140.py
12.8 KB
Del
OK
cp1250.py
13.37 KB
Del
OK
cp1251.py
13.05 KB
Del
OK
cp1252.py
13.19 KB
Del
OK
cp1253.py
12.79 KB
Del
OK
cp1254.py
13.19 KB
Del
OK
cp1255.py
12.17 KB
Del
OK
cp1256.py
12.51 KB
Del
OK
cp1257.py
13.06 KB
Del
OK
cp1258.py
13.05 KB
Del
OK
cp273.py
13.8 KB
Del
OK
cp424.py
11.77 KB
Del
OK
cp437.py
33.75 KB
Del
OK
cp500.py
12.81 KB
Del
OK
cp720.py
13.37 KB
Del
OK
cp737.py
33.87 KB
Del
OK
cp775.py
33.67 KB
Del
OK
cp850.py
33.31 KB
Del
OK
cp852.py
34.18 KB
Del
OK
cp855.py
33.06 KB
Del
OK
cp856.py
12.13 KB
Del
OK
cp857.py
33.11 KB
Del
OK
cp858.py
33.22 KB
Del
OK
cp860.py
33.87 KB
Del
OK
cp861.py
33.82 KB
Del
OK
cp862.py
32.59 KB
Del
OK
cp863.py
33.45 KB
Del
OK
cp864.py
32.87 KB
Del
OK
cp865.py
33.81 KB
Del
OK
cp866.py
33.59 KB
Del
OK
cp869.py
32.19 KB
Del
OK
cp874.py
12.3 KB
Del
OK
cp875.py
12.55 KB
Del
OK
cp932.py
1023 B
Del
OK
cp949.py
1023 B
Del
OK
cp950.py
1023 B
Del
OK
euc_jis_2004.py
1.03 KB
Del
OK
euc_jisx0213.py
1.03 KB
Del
OK
euc_jp.py
1 KB
Del
OK
euc_kr.py
1 KB
Del
OK
gb18030.py
1.01 KB
Del
OK
gb2312.py
1 KB
Del
OK
gbk.py
1015 B
Del
OK
hex_codec.py
1.47 KB
Del
OK
hp_roman8.py
13.16 KB
Del
OK
hz.py
1011 B
Del
OK
idna.py
8.96 KB
Del
OK
iso2022_jp.py
1.03 KB
Del
OK
iso2022_jp_1.py
1.04 KB
Del
OK
iso2022_jp_2.py
1.04 KB
Del
OK
iso2022_jp_2004.py
1.05 KB
Del
OK
iso2022_jp_3.py
1.04 KB
Del
OK
iso2022_jp_ext.py
1.04 KB
Del
OK
iso2022_kr.py
1.03 KB
Del
OK
iso8859_1.py
12.87 KB
Del
OK
iso8859_10.py
13.27 KB
Del
OK
iso8859_11.py
12.05 KB
Del
OK
iso8859_13.py
12.96 KB
Del
OK
iso8859_14.py
13.33 KB
Del
OK
iso8859_15.py
12.9 KB
Del
OK
iso8859_16.py
13.24 KB
Del
OK
iso8859_2.py
13.09 KB
Del
OK
iso8859_3.py
12.78 KB
Del
OK
iso8859_4.py
13.06 KB
Del
OK
iso8859_5.py
12.71 KB
Del
OK
iso8859_6.py
10.58 KB
Del
OK
iso8859_7.py
12.54 KB
Del
OK
iso8859_8.py
10.78 KB
Del
OK
iso8859_9.py
12.85 KB
Del
OK
johab.py
1023 B
Del
OK
koi8_r.py
13.46 KB
Del
OK
koi8_t.py
12.88 KB
Del
OK
koi8_u.py
13.44 KB
Del
OK
kz1048.py
13.4 KB
Del
OK
latin_1.py
1.23 KB
Del
OK
mac_arabic.py
35.61 KB
Del
OK
mac_centeuro.py
13.77 KB
Del
OK
mac_croatian.py
13.31 KB
Del
OK
mac_cyrillic.py
13.14 KB
Del
OK
mac_farsi.py
14.81 KB
Del
OK
mac_greek.py
13.4 KB
Del
OK
mac_iceland.py
13.18 KB
Del
OK
mac_latin2.py
13.79 KB
Del
OK
mac_roman.py
13.16 KB
Del
OK
mac_romanian.py
13.34 KB
Del
OK
mac_turkish.py
13.2 KB
Del
OK
mbcs.py
1.18 KB
Del
OK
oem.py
1019 B
Del
OK
palmos.py
13.2 KB
Del
OK
ptcp154.py
13.69 KB
Del
OK
punycode.py
6.72 KB
Del
OK
quopri_codec.py
1.49 KB
Del
OK
raw_unicode_escape.py
1.18 KB
Del
OK
rot_13.py
2.39 KB
Del
OK
shift_jis.py
1.01 KB
Del
OK
shift_jis_2004.py
1.03 KB
Del
OK
shift_jisx0213.py
1.03 KB
Del
OK
tis_620.py
12.01 KB
Del
OK
undefined.py
1.27 KB
Del
OK
unicode_escape.py
1.16 KB
Del
OK
utf_16.py
5.11 KB
Del
OK
utf_16_be.py
1.01 KB
Del
OK
utf_16_le.py
1.01 KB
Del
OK
utf_32.py
5.01 KB
Del
OK
utf_32_be.py
930 B
Del
OK
utf_32_le.py
930 B
Del
OK
utf_7.py
946 B
Del
OK
utf_8.py
1005 B
Del
OK
utf_8_sig.py
4.04 KB
Del
OK
uu_codec.py
2.78 KB
Del
OK
zlib_codec.py
2.15 KB
Del
OK
Edit: idna.py
# This module implements the RFCs 3490 (IDNA) and 3491 (Nameprep) import stringprep, re, codecs from unicodedata import ucd_3_2_0 as unicodedata # IDNA section 3.1 dots = re.compile("[\u002E\u3002\uFF0E\uFF61]") # IDNA section 5 ace_prefix = b"xn--" sace_prefix = "xn--" # This assumes query strings, so AllowUnassigned is true def nameprep(label): # Map newlabel = [] for c in label: if stringprep.in_table_b1(c): # Map to nothing continue newlabel.append(stringprep.map_table_b2(c)) label = "".join(newlabel) # Normalize label = unicodedata.normalize("NFKC", label) # Prohibit for c in label: if stringprep.in_table_c12(c) or \ stringprep.in_table_c22(c) or \ stringprep.in_table_c3(c) or \ stringprep.in_table_c4(c) or \ stringprep.in_table_c5(c) or \ stringprep.in_table_c6(c) or \ stringprep.in_table_c7(c) or \ stringprep.in_table_c8(c) or \ stringprep.in_table_c9(c): raise UnicodeError("Invalid character %r" % c) # Check bidi RandAL = [stringprep.in_table_d1(x) for x in label] for c in RandAL: if c: # There is a RandAL char in the string. Must perform further # tests: # 1) The characters in section 5.8 MUST be prohibited. # This is table C.8, which was already checked # 2) If a string contains any RandALCat character, the string # MUST NOT contain any LCat character. if any(stringprep.in_table_d2(x) for x in label): raise UnicodeError("Violation of BIDI requirement 2") # 3) If a string contains any RandALCat character, a # RandALCat character MUST be the first character of the # string, and a RandALCat character MUST be the last # character of the string. if not RandAL[0] or not RandAL[-1]: raise UnicodeError("Violation of BIDI requirement 3") return label def ToASCII(label): try: # Step 1: try ASCII label = label.encode("ascii") except UnicodeError: pass else: # Skip to step 3: UseSTD3ASCIIRules is false, so # Skip to step 8. if 0 < len(label) < 64: return label raise UnicodeError("label empty or too long") # Step 2: nameprep label = nameprep(label) # Step 3: UseSTD3ASCIIRules is false # Step 4: try ASCII try: label = label.encode("ascii") except UnicodeError: pass else: # Skip to step 8. if 0 < len(label) < 64: return label raise UnicodeError("label empty or too long") # Step 5: Check ACE prefix if label.startswith(sace_prefix): raise UnicodeError("Label starts with ACE prefix") # Step 6: Encode with PUNYCODE label = label.encode("punycode") # Step 7: Prepend ACE prefix label = ace_prefix + label # Step 8: Check size if 0 < len(label) < 64: return label raise UnicodeError("label empty or too long") def ToUnicode(label): # Step 1: Check for ASCII if isinstance(label, bytes): pure_ascii = True else: try: label = label.encode("ascii") pure_ascii = True except UnicodeError: pure_ascii = False if not pure_ascii: # Step 2: Perform nameprep label = nameprep(label) # It doesn't say this, but apparently, it should be ASCII now try: label = label.encode("ascii") except UnicodeError: raise UnicodeError("Invalid character in IDN label") # Step 3: Check for ACE prefix if not label.startswith(ace_prefix): return str(label, "ascii") # Step 4: Remove ACE prefix label1 = label[len(ace_prefix):] # Step 5: Decode using PUNYCODE result = label1.decode("punycode") # Step 6: Apply ToASCII label2 = ToASCII(result) # Step 7: Compare the result of step 6 with the one of step 3 # label2 will already be in lower case. if str(label, "ascii").lower() != str(label2, "ascii"): raise UnicodeError("IDNA does not round-trip", label, label2) # Step 8: return the result of step 5 return result ### Codec APIs class Codec(codecs.Codec): def encode(self, input, errors='strict'): if errors != 'strict': # IDNA is quite clear that implementations must be strict raise UnicodeError("unsupported error handling "+errors) if not input: return b'', 0 try: result = input.encode('ascii') except UnicodeEncodeError: pass else: # ASCII name: fast path labels = result.split(b'.') for label in labels[:-1]: if not (0 < len(label) < 64): raise UnicodeError("label empty or too long") if len(labels[-1]) >= 64: raise UnicodeError("label too long") return result, len(input) result = bytearray() labels = dots.split(input) if labels and not labels[-1]: trailing_dot = b'.' del labels[-1] else: trailing_dot = b'' for label in labels: if result: # Join with U+002E result.extend(b'.') result.extend(ToASCII(label)) return bytes(result+trailing_dot), len(input) def decode(self, input, errors='strict'): if errors != 'strict': raise UnicodeError("Unsupported error handling "+errors) if not input: return "", 0 # IDNA allows decoding to operate on Unicode strings, too. if not isinstance(input, bytes): # XXX obviously wrong, see #3232 input = bytes(input) if ace_prefix not in input: # Fast path try: return input.decode('ascii'), len(input) except UnicodeDecodeError: pass labels = input.split(b".") if labels and len(labels[-1]) == 0: trailing_dot = '.' del labels[-1] else: trailing_dot = '' result = [] for label in labels: result.append(ToUnicode(label)) return ".".join(result)+trailing_dot, len(input) class IncrementalEncoder(codecs.BufferedIncrementalEncoder): def _buffer_encode(self, input, errors, final): if errors != 'strict': # IDNA is quite clear that implementations must be strict raise UnicodeError("unsupported error handling "+errors) if not input: return (b'', 0) labels = dots.split(input) trailing_dot = b'' if labels: if not labels[-1]: trailing_dot = b'.' del labels[-1] elif not final: # Keep potentially unfinished label until the next call del labels[-1] if labels: trailing_dot = b'.' result = bytearray() size = 0 for label in labels: if size: # Join with U+002E result.extend(b'.') size += 1 result.extend(ToASCII(label)) size += len(label) result += trailing_dot size += len(trailing_dot) return (bytes(result), size) class IncrementalDecoder(codecs.BufferedIncrementalDecoder): def _buffer_decode(self, input, errors, final): if errors != 'strict': raise UnicodeError("Unsupported error handling "+errors) if not input: return ("", 0) # IDNA allows decoding to operate on Unicode strings, too. if isinstance(input, str): labels = dots.split(input) else: # Must be ASCII string input = str(input, "ascii") labels = input.split(".") trailing_dot = '' if labels: if not labels[-1]: trailing_dot = '.' del labels[-1] elif not final: # Keep potentially unfinished label until the next call del labels[-1] if labels: trailing_dot = '.' result = [] size = 0 for label in labels: result.append(ToUnicode(label)) if size: size += 1 size += len(label) result = ".".join(result) + trailing_dot size += len(trailing_dot) return (result, size) class StreamWriter(Codec,codecs.StreamWriter): pass class StreamReader(Codec,codecs.StreamReader): pass ### encodings module API def getregentry(): return codecs.CodecInfo( name='idna', encode=Codec().encode, decode=Codec().decode, incrementalencoder=IncrementalEncoder, incrementaldecoder=IncrementalDecoder, streamwriter=StreamWriter, streamreader=StreamReader, )
Save