1
1
"""
2
- helpers
3
- ~~~~~~~
4
-
5
- This module contains helpers for the h2 tests.
2
+ Helper module for the h2 tests.
6
3
"""
4
+ from __future__ import annotations
5
+
6
+ from hpack .hpack import Encoder
7
7
from hyperframe .frame import (
8
- HeadersFrame , DataFrame , SettingsFrame , WindowUpdateFrame , PingFrame ,
9
- GoAwayFrame , RstStreamFrame , PushPromiseFrame , PriorityFrame ,
10
- ContinuationFrame , AltSvcFrame
8
+ AltSvcFrame ,
9
+ ContinuationFrame ,
10
+ DataFrame ,
11
+ GoAwayFrame ,
12
+ HeadersFrame ,
13
+ PingFrame ,
14
+ PriorityFrame ,
15
+ PushPromiseFrame ,
16
+ RstStreamFrame ,
17
+ SettingsFrame ,
18
+ WindowUpdateFrame ,
11
19
)
12
- from hpack .hpack import Encoder
13
-
14
20
15
21
SAMPLE_SETTINGS = {
16
22
SettingsFrame .HEADER_TABLE_SIZE : 4096 ,
19
25
}
20
26
21
27
22
- class FrameFactory ( object ) :
28
+ class FrameFactory :
23
29
"""
24
30
A class containing lots of helper methods and state to build frames. This
25
31
allows test cases to easily build correct HTTP/2 frames to feed to
26
32
hyper-h2.
27
33
"""
28
- def __init__ (self ):
34
+
35
+ def __init__ (self ) -> None :
29
36
self .encoder = Encoder ()
30
37
31
- def refresh_encoder (self ):
38
+ def refresh_encoder (self ) -> None :
32
39
self .encoder = Encoder ()
33
40
34
- def preamble (self ):
35
- return b' PRI * HTTP/2.0\r \n \r \n SM\r \n \r \n '
41
+ def preamble (self ) -> bytes :
42
+ return b" PRI * HTTP/2.0\r \n \r \n SM\r \n \r \n "
36
43
37
44
def build_headers_frame (self ,
38
45
headers ,
39
- flags = [] ,
46
+ flags = None ,
40
47
stream_id = 1 ,
41
48
** priority_kwargs ):
42
49
"""
43
50
Builds a single valid headers frame out of the contained headers.
44
51
"""
52
+ if flags is None :
53
+ flags = []
45
54
f = HeadersFrame (stream_id )
46
55
f .data = self .encoder .encode (headers )
47
- f .flags .add (' END_HEADERS' )
56
+ f .flags .add (" END_HEADERS" )
48
57
for flag in flags :
49
58
f .flags .add (flag )
50
59
@@ -53,10 +62,12 @@ def build_headers_frame(self,
53
62
54
63
return f
55
64
56
- def build_continuation_frame (self , header_block , flags = [] , stream_id = 1 ):
65
+ def build_continuation_frame (self , header_block , flags = None , stream_id = 1 ):
57
66
"""
58
67
Builds a single continuation frame out of the binary header block.
59
68
"""
69
+ if flags is None :
70
+ flags = []
60
71
f = ContinuationFrame (stream_id )
61
72
f .data = header_block
62
73
f .flags = set (flags )
@@ -73,7 +84,7 @@ def build_data_frame(self, data, flags=None, stream_id=1, padding_len=0):
73
84
f .flags = flags
74
85
75
86
if padding_len :
76
- flags .add (' PADDED' )
87
+ flags .add (" PADDED" )
77
88
f .pad_length = padding_len
78
89
79
90
return f
@@ -84,7 +95,7 @@ def build_settings_frame(self, settings, ack=False):
84
95
"""
85
96
f = SettingsFrame (0 )
86
97
if ack :
87
- f .flags .add (' ACK' )
98
+ f .flags .add (" ACK" )
88
99
89
100
f .settings = settings
90
101
return f
@@ -111,7 +122,7 @@ def build_ping_frame(self, ping_data, flags=None):
111
122
def build_goaway_frame (self ,
112
123
last_stream_id ,
113
124
error_code = 0 ,
114
- additional_data = b'' ):
125
+ additional_data = b"" ):
115
126
"""
116
127
Builds a single GOAWAY frame.
117
128
"""
@@ -133,15 +144,17 @@ def build_push_promise_frame(self,
133
144
stream_id ,
134
145
promised_stream_id ,
135
146
headers ,
136
- flags = [] ):
147
+ flags = None ):
137
148
"""
138
149
Builds a single PUSH_PROMISE frame.
139
150
"""
151
+ if flags is None :
152
+ flags = []
140
153
f = PushPromiseFrame (stream_id )
141
154
f .promised_stream_id = promised_stream_id
142
155
f .data = self .encoder .encode (headers )
143
156
f .flags = set (flags )
144
- f .flags .add (' END_HEADERS' )
157
+ f .flags .add (" END_HEADERS" )
145
158
return f
146
159
147
160
def build_priority_frame (self ,
@@ -167,7 +180,7 @@ def build_alt_svc_frame(self, stream_id, origin, field):
167
180
f .field = field
168
181
return f
169
182
170
- def change_table_size (self , new_size ):
183
+ def change_table_size (self , new_size ) -> None :
171
184
"""
172
185
Causes the encoder to send a dynamic size update in the next header
173
186
block it sends.
0 commit comments