1
1
from .core import encode , decode , alabel , ulabel , IDNAError
2
2
import codecs
3
3
import re
4
+ from typing import Tuple , Optional
4
5
5
6
_unicode_dots_re = re .compile ('[\u002e \u3002 \uff0e \uff61 ]' )
6
7
7
8
class Codec (codecs .Codec ):
8
9
9
10
def encode (self , data , errors = 'strict' ):
10
-
11
+ # type: (str, str) -> Tuple[bytes, int]
11
12
if errors != 'strict' :
12
13
raise IDNAError ('Unsupported error handling \" {}\" ' .format (errors ))
13
14
14
15
if not data :
15
- return "" , 0
16
+ return b "" , 0
16
17
17
18
return encode (data ), len (data )
18
19
19
20
def decode (self , data , errors = 'strict' ):
20
-
21
+ # type: (bytes, str) -> Tuple[str, int]
21
22
if errors != 'strict' :
22
23
raise IDNAError ('Unsupported error handling \" {}\" ' .format (errors ))
23
24
@@ -27,12 +28,13 @@ def decode(self, data, errors='strict'):
27
28
return decode (data ), len (data )
28
29
29
30
class IncrementalEncoder (codecs .BufferedIncrementalEncoder ):
30
- def _buffer_encode (self , data , errors , final ):
31
+ def _buffer_encode (self , data , errors , final ): # type: ignore
32
+ # type: (str, str, bool) -> Tuple[str, int]
31
33
if errors != 'strict' :
32
34
raise IDNAError ('Unsupported error handling \" {}\" ' .format (errors ))
33
35
34
36
if not data :
35
- return ( '' , 0 )
37
+ return "" , 0
36
38
37
39
labels = _unicode_dots_re .split (data )
38
40
trailing_dot = ''
@@ -55,12 +57,13 @@ def _buffer_encode(self, data, errors, final):
55
57
size += len (label )
56
58
57
59
# Join with U+002E
58
- result = '.' .join (result ) + trailing_dot
60
+ result_str = '.' .join (result ) + trailing_dot # type: ignore
59
61
size += len (trailing_dot )
60
- return ( result , size )
62
+ return result_str , size
61
63
62
64
class IncrementalDecoder (codecs .BufferedIncrementalDecoder ):
63
- def _buffer_decode (self , data , errors , final ):
65
+ def _buffer_decode (self , data , errors , final ): # type: ignore
66
+ # type: (str, str, bool) -> Tuple[str, int]
64
67
if errors != 'strict' :
65
68
raise IDNAError ('Unsupported error handling \" {}\" ' .format (errors ))
66
69
@@ -87,22 +90,26 @@ def _buffer_decode(self, data, errors, final):
87
90
size += 1
88
91
size += len (label )
89
92
90
- result = '.' .join (result ) + trailing_dot
93
+ result_str = '.' .join (result ) + trailing_dot
91
94
size += len (trailing_dot )
92
- return (result , size )
95
+ return (result_str , size )
93
96
94
97
95
98
class StreamWriter (Codec , codecs .StreamWriter ):
96
99
pass
97
100
101
+
98
102
class StreamReader (Codec , codecs .StreamReader ):
99
103
pass
100
104
105
+
101
106
def getregentry ():
107
+ # type: () -> codecs.CodecInfo
108
+ # Compatibility as a search_function for codecs.register()
102
109
return codecs .CodecInfo (
103
110
name = 'idna' ,
104
- encode = Codec ().encode ,
105
- decode = Codec ().decode ,
111
+ encode = Codec ().encode , # type: ignore
112
+ decode = Codec ().decode , # type: ignore
106
113
incrementalencoder = IncrementalEncoder ,
107
114
incrementaldecoder = IncrementalDecoder ,
108
115
streamwriter = StreamWriter ,
0 commit comments