Skip to content

Commit 0539665

Browse files
authored
[Azure AMQP] Typing (#33299)
* init conn typing * fix async * fix mypy * pylint fixes for conn * type encode/decode * type auth * link typing * remove bracket * minor fixes * typing for cbs auth * minor fixes * minor fixes * add in defaults * pylint fixes * fix cyclic dependency * clean up auth type ignores * clean up leftover py2 comments * fix type checking * fix initial comments * add type to dict * additional feedback fixes * remove some casts * remove unused import * rebased changes * fix tests * fix tests + fix typing * pylint * async auth separate class * fix connection tests * remove casts * address comments * bring in changes to EH vendored version * fix import * remove cast from cbs * add scheme to fake url * fix bug * bring in changes in to SB * restore eh clients * fix pylint * EH async tests * address PR comments * reset frame typing back * remove nametuple typing * additional typing for known amqp types * last couple of typing changes
1 parent 3438330 commit 0539665

38 files changed

+1528
-1148
lines changed

sdk/eventhub/azure-eventhub/azure/eventhub/_pyamqp/_connection.py

Lines changed: 114 additions & 96 deletions
Large diffs are not rendered by default.

sdk/eventhub/azure-eventhub/azure/eventhub/_pyamqp/_decode.py

Lines changed: 48 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,19 @@
88
import struct
99
import uuid
1010
import logging
11-
from typing import List, Optional, Tuple, Dict, Callable, Any, cast, Union, TYPE_CHECKING # pylint: disable=unused-import
11+
from typing import (
12+
Callable,
13+
List,
14+
Optional,
15+
Tuple,
16+
Dict,
17+
Any,
18+
Union,
19+
cast,
20+
TYPE_CHECKING,
21+
)
22+
23+
from typing_extensions import Literal
1224

1325

1426
from .message import Message, Header, Properties
@@ -39,130 +51,105 @@
3951
c_double = struct.Struct('>d')
4052

4153

42-
def _decode_null(buffer):
43-
# type: (memoryview) -> Tuple[memoryview, None]
54+
def _decode_null(buffer: memoryview) -> Tuple[memoryview, None]:
4455
return buffer, None
4556

4657

47-
def _decode_true(buffer):
48-
# type: (memoryview) -> Tuple[memoryview, bool]
58+
def _decode_true(buffer: memoryview) -> Tuple[memoryview, Literal[True]]:
4959
return buffer, True
5060

5161

52-
def _decode_false(buffer):
53-
# type: (memoryview) -> Tuple[memoryview, bool]
62+
def _decode_false(buffer: memoryview) -> Tuple[memoryview, Literal[False]]:
5463
return buffer, False
5564

5665

57-
def _decode_zero(buffer):
58-
# type: (memoryview) -> Tuple[memoryview, int]
66+
def _decode_zero(buffer: memoryview) -> Tuple[memoryview, Literal[0]]:
5967
return buffer, 0
6068

6169

62-
def _decode_empty(buffer):
63-
# type: (memoryview) -> Tuple[memoryview, List[None]]
70+
def _decode_empty(buffer: memoryview) -> Tuple[memoryview, List[Any]]:
6471
return buffer, []
6572

6673

67-
def _decode_boolean(buffer):
68-
# type: (memoryview) -> Tuple[memoryview, bool]
74+
def _decode_boolean(buffer: memoryview) -> Tuple[memoryview, bool]:
6975
return buffer[1:], buffer[:1] == b'\x01'
7076

7177

72-
def _decode_ubyte(buffer):
73-
# type: (memoryview) -> Tuple[memoryview, int]
78+
def _decode_ubyte(buffer: memoryview) -> Tuple[memoryview, int]:
7479
return buffer[1:], buffer[0]
7580

7681

77-
def _decode_ushort(buffer):
78-
# type: (memoryview) -> Tuple[memoryview, int]
82+
def _decode_ushort(buffer: memoryview) -> Tuple[memoryview, int]:
7983
return buffer[2:], c_unsigned_short.unpack(buffer[:2])[0]
8084

8185

82-
def _decode_uint_small(buffer):
83-
# type: (memoryview) -> Tuple[memoryview, int]
86+
def _decode_uint_small(buffer: memoryview) -> Tuple[memoryview, int]:
8487
return buffer[1:], buffer[0]
8588

8689

87-
def _decode_uint_large(buffer):
88-
# type: (memoryview) -> Tuple[memoryview, int]
90+
def _decode_uint_large(buffer: memoryview) -> Tuple[memoryview, int]:
8991
return buffer[4:], c_unsigned_int.unpack(buffer[:4])[0]
9092

9193

92-
def _decode_ulong_small(buffer):
93-
# type: (memoryview) -> Tuple[memoryview, int]
94+
def _decode_ulong_small(buffer: memoryview)-> Tuple[memoryview, int]:
9495
return buffer[1:], buffer[0]
9596

9697

97-
def _decode_ulong_large(buffer):
98-
# type: (memoryview) -> Tuple[memoryview, int]
98+
def _decode_ulong_large(buffer: memoryview)-> Tuple[memoryview, int]:
9999
return buffer[8:], c_unsigned_long_long.unpack(buffer[:8])[0]
100100

101101

102-
def _decode_byte(buffer):
103-
# type: (memoryview) -> Tuple[memoryview, int]
102+
def _decode_byte(buffer: memoryview)-> Tuple[memoryview, int]:
104103
return buffer[1:], c_signed_char.unpack(buffer[:1])[0]
105104

106105

107-
def _decode_short(buffer):
108-
# type: (memoryview) -> Tuple[memoryview, int]
106+
def _decode_short(buffer: memoryview)-> Tuple[memoryview, int]:
109107
return buffer[2:], c_signed_short.unpack(buffer[:2])[0]
110108

111109

112-
def _decode_int_small(buffer):
113-
# type: (memoryview) -> Tuple[memoryview, int]
110+
def _decode_int_small(buffer: memoryview)-> Tuple[memoryview, int]:
114111
return buffer[1:], c_signed_char.unpack(buffer[:1])[0]
115112

116113

117-
def _decode_int_large(buffer):
118-
# type: (memoryview) -> Tuple[memoryview, int]
114+
def _decode_int_large(buffer: memoryview)-> Tuple[memoryview, int]:
119115
return buffer[4:], c_signed_int.unpack(buffer[:4])[0]
120116

121117

122-
def _decode_long_small(buffer):
123-
# type: (memoryview) -> Tuple[memoryview, int]
118+
def _decode_long_small(buffer: memoryview)-> Tuple[memoryview, int]:
124119
return buffer[1:], c_signed_char.unpack(buffer[:1])[0]
125120

126121

127-
def _decode_long_large(buffer):
128-
# type: (memoryview) -> Tuple[memoryview, int]
122+
def _decode_long_large(buffer: memoryview)-> Tuple[memoryview, int]:
129123
return buffer[8:], c_signed_long_long.unpack(buffer[:8])[0]
130124

131125

132-
def _decode_float(buffer):
133-
# type: (memoryview) -> Tuple[memoryview, float]
126+
def _decode_float(buffer: memoryview) -> Tuple[memoryview, float]:
134127
return buffer[4:], c_float.unpack(buffer[:4])[0]
135128

136129

137-
def _decode_double(buffer):
138-
# type: (memoryview) -> Tuple[memoryview, float]
130+
def _decode_double(buffer: memoryview) -> Tuple[memoryview, float]:
139131
return buffer[8:], c_double.unpack(buffer[:8])[0]
140132

141133

142-
def _decode_timestamp(buffer):
143-
# type: (memoryview) -> Tuple[memoryview, int]
134+
def _decode_timestamp(buffer: memoryview) -> Tuple[memoryview, int]:
144135
return buffer[8:], c_signed_long_long.unpack(buffer[:8])[0]
145136

146137

147-
def _decode_uuid(buffer):
148-
# type: (memoryview) -> Tuple[memoryview, uuid.UUID]
138+
def _decode_uuid(buffer: memoryview) -> Tuple[memoryview, uuid.UUID]:
149139
return buffer[16:], uuid.UUID(bytes=buffer[:16].tobytes())
150140

151141

152-
def _decode_binary_small(buffer):
153-
# type: (memoryview) -> Tuple[memoryview, bytes]
142+
def _decode_binary_small(buffer: memoryview) -> Tuple[memoryview, bytes]:
154143
length_index = buffer[0] + 1
155144
return buffer[length_index:], buffer[1:length_index].tobytes()
156145

157146

158-
def _decode_binary_large(buffer):
159-
# type: (memoryview) -> Tuple[memoryview, bytes]
147+
def _decode_binary_large(buffer: memoryview) -> Tuple[memoryview, bytes]:
160148
length_index = c_unsigned_long.unpack(buffer[:4])[0] + 4
161149
return buffer[length_index:], buffer[4:length_index].tobytes()
162150

163151

164-
def _decode_list_small(buffer):
165-
# type: (memoryview) -> Tuple[memoryview, List[Any]]
152+
def _decode_list_small(buffer: memoryview)-> Tuple[memoryview, List[Any]]:
166153
count = buffer[1]
167154
buffer = buffer[2:]
168155
values = [None] * count
@@ -171,8 +158,7 @@ def _decode_list_small(buffer):
171158
return buffer, values
172159

173160

174-
def _decode_list_large(buffer):
175-
# type: (memoryview) -> Tuple[memoryview, List[Any]]
161+
def _decode_list_large(buffer: memoryview)-> Tuple[memoryview, List[Any]]:
176162
count = c_unsigned_long.unpack(buffer[4:8])[0]
177163
buffer = buffer[8:]
178164
values = [None] * count
@@ -181,8 +167,7 @@ def _decode_list_large(buffer):
181167
return buffer, values
182168

183169

184-
def _decode_map_small(buffer):
185-
# type: (memoryview) -> Tuple[memoryview, Dict[Any, Any]]
170+
def _decode_map_small(buffer: memoryview) -> Tuple[memoryview, Dict[Any, Any]]:
186171
count = int(buffer[1]/2)
187172
buffer = buffer[2:]
188173
values = {}
@@ -193,8 +178,7 @@ def _decode_map_small(buffer):
193178
return buffer, values
194179

195180

196-
def _decode_map_large(buffer):
197-
# type: (memoryview) -> Tuple[memoryview, Dict[Any, Any]]
181+
def _decode_map_large(buffer: memoryview) -> Tuple[memoryview, Dict[Any, Any]]:
198182
count = int(c_unsigned_long.unpack(buffer[4:8])[0]/2)
199183
buffer = buffer[8:]
200184
values = {}
@@ -205,8 +189,7 @@ def _decode_map_large(buffer):
205189
return buffer, values
206190

207191

208-
def _decode_array_small(buffer):
209-
# type: (memoryview) -> Tuple[memoryview, List[Any]]
192+
def _decode_array_small(buffer: memoryview) -> Tuple[memoryview, List[Any]]:
210193
count = buffer[1] # Ignore first byte (size) and just rely on count
211194
if count:
212195
subconstructor = buffer[2]
@@ -218,8 +201,7 @@ def _decode_array_small(buffer):
218201
return buffer[2:], []
219202

220203

221-
def _decode_array_large(buffer):
222-
# type: (memoryview) -> Tuple[memoryview, List[Any]]
204+
def _decode_array_large(buffer: memoryview) -> Tuple[memoryview, List[Any]]:
223205
count = c_unsigned_long.unpack(buffer[4:8])[0]
224206
if count:
225207
subconstructor = buffer[8]
@@ -231,8 +213,7 @@ def _decode_array_large(buffer):
231213
return buffer[8:], []
232214

233215

234-
def _decode_described(buffer):
235-
# type: (memoryview) -> Tuple[memoryview, Any]
216+
def _decode_described(buffer: memoryview) -> Tuple[memoryview, object]:
236217
# TODO: to move the cursor of the buffer to the described value based on size of the
237218
# descriptor without decoding descriptor value
238219
composite_type = buffer[0]
@@ -245,8 +226,7 @@ def _decode_described(buffer):
245226
return buffer, value
246227

247228

248-
def decode_payload(buffer):
249-
# type: (memoryview) -> Message
229+
def decode_payload(buffer: memoryview) -> Message:
250230
message: Dict[str, Union[Properties, Header, Dict, bytes, List]] = {}
251231
while buffer:
252232
# Ignore the first two bytes, they will always be the constructors for
@@ -279,12 +259,12 @@ def decode_payload(buffer):
279259
message["footer"] = value
280260
# TODO: we can possibly swap out the Message construct with a TypedDict
281261
# for both input and output so we get the best of both.
262+
# casting to TypedDict with named fields to allow for unpacking with **
282263
message_properties = cast("MessageDict", message)
283264
return Message(**message_properties)
284265

285266

286-
def decode_frame(data):
287-
# type: (memoryview) -> Tuple[int, List[Any]]
267+
def decode_frame(data: memoryview) -> Tuple[int, List[Any]]:
288268
# Ignore the first two bytes, they will always be the constructors for
289269
# described type then ulong.
290270
frame_type = data[2]
@@ -305,8 +285,7 @@ def decode_frame(data):
305285
return frame_type, fields
306286

307287

308-
def decode_empty_frame(header):
309-
# type: (memoryview) -> Tuple[int, bytes]
288+
def decode_empty_frame(header: memoryview) -> Tuple[int, bytes]:
310289
if header[0:4] == _HEADER_PREFIX:
311290
return 0, header.tobytes()
312291
if header[5] == 0:

0 commit comments

Comments
 (0)