7
7
# - a writer
8
8
# - or, for body writers, a dict of framin-dependent writer factories
9
9
10
- import sys
11
-
12
10
from ._events import Data , EndOfMessage
13
11
from ._state import CLIENT , IDLE , SEND_BODY , SEND_RESPONSE , SERVER
14
12
from ._util import LocalProtocolError
15
13
16
14
__all__ = ["WRITERS" ]
17
15
18
- # Equivalent of bstr % values, that works on python 3.x for x < 5
19
- if (3 , 0 ) <= sys .version_info < (3 , 5 ):
20
-
21
- def bytesmod (bstr , values ):
22
- decoded_values = []
23
- for value in values :
24
- if isinstance (value , bytes ):
25
- decoded_values .append (value .decode ("ascii" ))
26
- else :
27
- decoded_values .append (value )
28
- return (bstr .decode ("ascii" ) % tuple (decoded_values )).encode ("ascii" )
29
-
30
-
31
- else :
32
-
33
- def bytesmod (bstr , values ):
34
- return bstr % values
35
-
36
16
37
17
def write_headers (headers , write ):
38
18
# "Since the Host field-value is critical information for handling a
@@ -41,17 +21,17 @@ def write_headers(headers, write):
41
21
raw_items = headers ._full_items
42
22
for raw_name , name , value in raw_items :
43
23
if name == b"host" :
44
- write (bytesmod ( b"%s: %s\r \n " , (raw_name , value ) ))
24
+ write (b"%s: %s\r \n " % (raw_name , value ))
45
25
for raw_name , name , value in raw_items :
46
26
if name != b"host" :
47
- write (bytesmod ( b"%s: %s\r \n " , (raw_name , value ) ))
27
+ write (b"%s: %s\r \n " % (raw_name , value ))
48
28
write (b"\r \n " )
49
29
50
30
51
31
def write_request (request , write ):
52
32
if request .http_version != b"1.1" :
53
33
raise LocalProtocolError ("I only send HTTP/1.1" )
54
- write (bytesmod ( b"%s %s HTTP/1.1\r \n " , (request .method , request .target ) ))
34
+ write (b"%s %s HTTP/1.1\r \n " % (request .method , request .target ))
55
35
write_headers (request .headers , write )
56
36
57
37
@@ -68,11 +48,11 @@ def write_any_response(response, write):
68
48
# from stdlib's http.HTTPStatus table. Or maybe just steal their enums
69
49
# (either by import or copy/paste). We already accept them as status codes
70
50
# since they're of type IntEnum < int.
71
- write (bytesmod ( b"HTTP/1.1 %s %s\r \n " , (status_bytes , response .reason ) ))
51
+ write (b"HTTP/1.1 %s %s\r \n " % (status_bytes , response .reason ))
72
52
write_headers (response .headers , write )
73
53
74
54
75
- class BodyWriter ( object ) :
55
+ class BodyWriter :
76
56
def __call__ (self , event , write ):
77
57
if type (event ) is Data :
78
58
self .send_data (event .data , write )
@@ -111,7 +91,7 @@ def send_data(self, data, write):
111
91
# end-of-message.
112
92
if not data :
113
93
return
114
- write (bytesmod ( b"%x\r \n " , ( len (data ),) ))
94
+ write (b"%x\r \n " % len (data ))
115
95
write (data )
116
96
write (b"\r \n " )
117
97
0 commit comments