MCPcopy
hub / github.com/benoitc/gunicorn / _parse_vars

Method _parse_vars

gunicorn/uwsgi/message.py:120–157  ·  view source on GitHub ↗

Parse uWSGI vars block into key-value pairs. Format: key_size (2 bytes LE) + key + val_size (2 bytes LE) + value

(self, data)

Source from the content-addressed store, hash-verified

118 return unreader.read(size)
119
120 def _parse_vars(self, data):
121 """Parse uWSGI vars block into key-value pairs.
122
123 Format: key_size (2 bytes LE) + key + val_size (2 bytes LE) + value
124 """
125 pos = 0
126 var_count = 0
127
128 while pos < len(data):
129 if var_count >= MAX_UWSGI_VARS:
130 raise InvalidUWSGIHeader("too many variables")
131
132 # Key size (2 bytes, little-endian)
133 if pos + 2 > len(data):
134 raise InvalidUWSGIHeader("truncated key size")
135 key_size = int.from_bytes(data[pos:pos + 2], 'little')
136 pos += 2
137
138 # Key
139 if pos + key_size > len(data):
140 raise InvalidUWSGIHeader("truncated key")
141 key = data[pos:pos + key_size].decode('latin-1')
142 pos += key_size
143
144 # Value size (2 bytes, little-endian)
145 if pos + 2 > len(data):
146 raise InvalidUWSGIHeader("truncated value size")
147 val_size = int.from_bytes(data[pos:pos + 2], 'little')
148 pos += 2
149
150 # Value
151 if pos + val_size > len(data):
152 raise InvalidUWSGIHeader("truncated value")
153 value = data[pos:pos + val_size].decode('latin-1')
154 pos += val_size
155
156 self.uwsgi_vars[key] = value
157 var_count += 1
158
159 def _extract_request_info(self):
160 """Extract HTTP request info from uWSGI vars.

Callers 2

parseMethod · 0.95
_async_parseMethod · 0.80

Calls 2

InvalidUWSGIHeaderClass · 0.90
decodeMethod · 0.80

Tested by

no test coverage detected