11"""
2- helpers
3- ~~~~~~~
4-
5- This module contains helpers for the h2 tests.
2+ Helper module for the h2 tests.
63"""
4+ from __future__ import annotations
5+
6+ from hpack .hpack import Encoder
77from 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 ,
1119)
12- from hpack .hpack import Encoder
13-
1420
1521SAMPLE_SETTINGS = {
1622 SettingsFrame .HEADER_TABLE_SIZE : 4096 ,
1925}
2026
2127
22- class FrameFactory ( object ) :
28+ class FrameFactory :
2329 """
2430 A class containing lots of helper methods and state to build frames. This
2531 allows test cases to easily build correct HTTP/2 frames to feed to
2632 hyper-h2.
2733 """
28- def __init__ (self ):
34+
35+ def __init__ (self ) -> None :
2936 self .encoder = Encoder ()
3037
31- def refresh_encoder (self ):
38+ def refresh_encoder (self ) -> None :
3239 self .encoder = Encoder ()
3340
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 "
3643
3744 def build_headers_frame (self ,
3845 headers ,
39- flags = [] ,
46+ flags = None ,
4047 stream_id = 1 ,
4148 ** priority_kwargs ):
4249 """
4350 Builds a single valid headers frame out of the contained headers.
4451 """
52+ if flags is None :
53+ flags = []
4554 f = HeadersFrame (stream_id )
4655 f .data = self .encoder .encode (headers )
47- f .flags .add (' END_HEADERS' )
56+ f .flags .add (" END_HEADERS" )
4857 for flag in flags :
4958 f .flags .add (flag )
5059
@@ -53,10 +62,12 @@ def build_headers_frame(self,
5362
5463 return f
5564
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 ):
5766 """
5867 Builds a single continuation frame out of the binary header block.
5968 """
69+ if flags is None :
70+ flags = []
6071 f = ContinuationFrame (stream_id )
6172 f .data = header_block
6273 f .flags = set (flags )
@@ -73,7 +84,7 @@ def build_data_frame(self, data, flags=None, stream_id=1, padding_len=0):
7384 f .flags = flags
7485
7586 if padding_len :
76- flags .add (' PADDED' )
87+ flags .add (" PADDED" )
7788 f .pad_length = padding_len
7889
7990 return f
@@ -84,7 +95,7 @@ def build_settings_frame(self, settings, ack=False):
8495 """
8596 f = SettingsFrame (0 )
8697 if ack :
87- f .flags .add (' ACK' )
98+ f .flags .add (" ACK" )
8899
89100 f .settings = settings
90101 return f
@@ -111,7 +122,7 @@ def build_ping_frame(self, ping_data, flags=None):
111122 def build_goaway_frame (self ,
112123 last_stream_id ,
113124 error_code = 0 ,
114- additional_data = b'' ):
125+ additional_data = b"" ):
115126 """
116127 Builds a single GOAWAY frame.
117128 """
@@ -133,15 +144,17 @@ def build_push_promise_frame(self,
133144 stream_id ,
134145 promised_stream_id ,
135146 headers ,
136- flags = [] ):
147+ flags = None ):
137148 """
138149 Builds a single PUSH_PROMISE frame.
139150 """
151+ if flags is None :
152+ flags = []
140153 f = PushPromiseFrame (stream_id )
141154 f .promised_stream_id = promised_stream_id
142155 f .data = self .encoder .encode (headers )
143156 f .flags = set (flags )
144- f .flags .add (' END_HEADERS' )
157+ f .flags .add (" END_HEADERS" )
145158 return f
146159
147160 def build_priority_frame (self ,
@@ -167,7 +180,7 @@ def build_alt_svc_frame(self, stream_id, origin, field):
167180 f .field = field
168181 return f
169182
170- def change_table_size (self , new_size ):
183+ def change_table_size (self , new_size ) -> None :
171184 """
172185 Causes the encoder to send a dynamic size update in the next header
173186 block it sends.
0 commit comments