Skip to content

Commit ae9903a

Browse files
committed
Make linter happy
1 parent 773e942 commit ae9903a

File tree

4 files changed

+64
-57
lines changed

4 files changed

+64
-57
lines changed

uvicorn/logging.py

+60-53
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,15 @@ def formatMessage(self, record):
114114

115115

116116
class GunicornSafeAtoms(abc.Mapping):
117-
"""Implement atoms necessary for gunicorn log."""
117+
"""Implement atoms necessary for gunicorn log.
118+
119+
This class does a few things:
120+
- provide all atoms necessary for gunicorn log formatter
121+
- collect response body size for reporting from ASGI messages
122+
- provide mapping interface that returns '-' for missing atoms
123+
- escapes double quotes found in atom strings
124+
"""
125+
118126
def __init__(self, scope):
119127
self.scope = scope
120128
self.status_code = None
@@ -127,25 +135,23 @@ def __init__(self, scope):
127135
def request_headers(self):
128136
if self._request_headers is None:
129137
self._request_headers = {
130-
k.decode('ascii'): v.decode('ascii')
131-
for k, v in self.scope['headers']
138+
k.decode("ascii"): v.decode("ascii") for k, v in self.scope["headers"]
132139
}
133140
return self._request_headers
134141

135142
@property
136143
def duration(self):
137-
d = self.scope['response_end_time'] - self.scope['request_start_time']
144+
d = self.scope["response_end_time"] - self.scope["request_start_time"]
138145
return d
139146

140147
def on_asgi_message(self, message):
141-
if message['type'] == 'http.response.start':
142-
self.status_code = message['status']
148+
if message["type"] == "http.response.start":
149+
self.status_code = message["status"]
143150
self.response_headers = {
144-
k.decode('ascii'): v.decode('ascii')
145-
for k, v in message['headers']
151+
k.decode("ascii"): v.decode("ascii") for k, v in message["headers"]
146152
}
147-
elif message['type'] == 'http.response.body':
148-
self.response_length += len(message.get('body', ''))
153+
elif message["type"] == "http.response.body":
154+
self.response_length += len(message.get("body", ""))
149155

150156
def _request_header(self, key):
151157
return self.request_headers.get(key.lower())
@@ -161,20 +167,20 @@ def _wsgi_environ_variable(self, key):
161167
def __getitem__(self, key):
162168
if key in self.HANDLERS:
163169
retval = self.HANDLERS[key](self)
164-
elif key.startswith('{'):
165-
if key.endswith('}i'):
170+
elif key.startswith("{"):
171+
if key.endswith("}i"):
166172
retval = self._request_header(key[1:-2])
167-
elif key.endswith('}o'):
173+
elif key.endswith("}o"):
168174
retval = self._response_header(key[1:-2])
169-
elif key.endswith('}e'):
175+
elif key.endswith("}e"):
170176
retval = self._wsgi_environ_variable(key[1:-2])
171177
else:
172178
retval = None
173179
else:
174180
retval = None
175181

176182
if retval is None:
177-
return '-'
183+
return "-"
178184
if isinstance(retval, str):
179185
return retval.replace('"', '\\"')
180186
return retval
@@ -185,103 +191,104 @@ def _register_handler(key, handlers=HANDLERS):
185191
def decorator(fn):
186192
handlers[key] = fn
187193
return fn
194+
188195
return decorator
189196

190-
@_register_handler('h')
197+
@_register_handler("h")
191198
def _remote_address(self, *args, **kwargs):
192-
return self.scope['client'][0]
199+
return self.scope["client"][0]
193200

194-
@_register_handler('l')
201+
@_register_handler("l")
195202
def _dash(self, *args, **kwargs):
196-
return '-'
203+
return "-"
197204

198-
@_register_handler('u')
205+
@_register_handler("u")
199206
def _user_name(self, *args, **kwargs):
200207
pass
201208

202-
@_register_handler('t')
209+
@_register_handler("t")
203210
def date_of_the_request(self, *args, **kwargs):
204211
"""Date and time in Apache Common Log Format"""
205-
return time.strftime('[%d/%b/%Y:%H:%M:%S %z]')
212+
return time.strftime("[%d/%b/%Y:%H:%M:%S %z]")
206213

207-
@_register_handler('r')
214+
@_register_handler("r")
208215
def status_line(self, *args, **kwargs):
209-
full_raw_path = (self.scope['raw_path'] + self.scope['query_string'])
210-
full_path = full_raw_path.decode('ascii')
211-
return '{method} {full_path} HTTP/{http_version}'.format(
216+
full_raw_path = self.scope["raw_path"] + self.scope["query_string"]
217+
full_path = full_raw_path.decode("ascii")
218+
return "{method} {full_path} HTTP/{http_version}".format(
212219
full_path=full_path, **self.scope
213220
)
214221

215-
@_register_handler('m')
222+
@_register_handler("m")
216223
def request_method(self, *args, **kwargs):
217-
return self.scope['method']
224+
return self.scope["method"]
218225

219-
@_register_handler('U')
226+
@_register_handler("U")
220227
def url_path(self, *args, **kwargs):
221-
return self.scope['raw_path'].decode('ascii')
228+
return self.scope["raw_path"].decode("ascii")
222229

223-
@_register_handler('q')
230+
@_register_handler("q")
224231
def query_string(self, *args, **kwargs):
225-
return self.scope['query_string'].decode('ascii')
232+
return self.scope["query_string"].decode("ascii")
226233

227-
@_register_handler('H')
234+
@_register_handler("H")
228235
def protocol(self, *args, **kwargs):
229-
return 'HTTP/%s' % self.scope['http_version']
236+
return "HTTP/%s" % self.scope["http_version"]
230237

231-
@_register_handler('s')
238+
@_register_handler("s")
232239
def status(self, *args, **kwargs):
233-
return self.status_code or '-'
240+
return self.status_code or "-"
234241

235-
@_register_handler('B')
242+
@_register_handler("B")
236243
def response_length(self, *args, **kwargs):
237244
return self.response_length
238245

239-
@_register_handler('b')
246+
@_register_handler("b")
240247
def response_length_or_dash(self, *args, **kwargs):
241-
return self.response_length or '-'
248+
return self.response_length or "-"
242249

243-
@_register_handler('f')
250+
@_register_handler("f")
244251
def referer(self, *args, **kwargs):
245-
val = self.request_headers.get(b'referer')
252+
val = self.request_headers.get(b"referer")
246253
if val is None:
247254
return None
248-
return val.decode('ascii')
255+
return val.decode("ascii")
249256

250-
@_register_handler('a')
257+
@_register_handler("a")
251258
def user_agent(self, *args, **kwargs):
252-
val = self.request_headers.get(b'user-agent')
259+
val = self.request_headers.get(b"user-agent")
253260
if val is None:
254261
return None
255-
return val.decode('ascii')
262+
return val.decode("ascii")
256263

257-
@_register_handler('T')
264+
@_register_handler("T")
258265
def request_time_seconds(self, *args, **kwargs):
259266
return int(self.duration)
260267

261-
@_register_handler('D')
268+
@_register_handler("D")
262269
def request_time_microseconds(self, *args, **kwargs):
263270
return int(self.duration * 1_000_000)
264271

265-
@_register_handler('L')
272+
@_register_handler("L")
266273
def request_time_decimal_seconds(self, *args, **kwargs):
267274
return "%.6f" % self.duration
268275

269-
@_register_handler('p')
276+
@_register_handler("p")
270277
def process_id(self, *args, **kwargs):
271278
return "<%s>" % getpid()
272279

273280
def __iter__(self):
274281
# FIXME: add WSGI environ
275282
yield from self.HANDLERS
276-
for k, _ in self.scope['headers']:
277-
yield '{%s}i' % k.lower()
283+
for k, _ in self.scope["headers"]:
284+
yield "{%s}i" % k.lower()
278285
for k in self.response_headers:
279-
yield '{%s}o' % k.lower()
286+
yield "{%s}o" % k.lower()
280287

281288
def __len__(self):
282289
# FIXME: add WSGI environ
283290
return (
284291
len(self.HANDLERS)
285-
+ len(self.scope['headers'] or ())
292+
+ len(self.scope["headers"] or ())
286293
+ len(self.response_headers)
287294
)

uvicorn/protocols/http/h11_impl.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def handle_events(self):
210210
"raw_path": raw_path,
211211
"query_string": query_string,
212212
"headers": self.headers,
213-
"request_start_time": time.monotonic()
213+
"request_start_time": time.monotonic(),
214214
}
215215

216216
for name, value in self.headers:

uvicorn/protocols/http/httptools_impl.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ def on_url(self, url):
238238
"raw_path": raw_path,
239239
"query_string": parsed_url.query if parsed_url.query else b"",
240240
"headers": self.headers,
241-
'request_start_time': time.monotonic(),
241+
"request_start_time": time.monotonic(),
242242
}
243243

244244
def on_header(self, name: bytes, value: bytes):
@@ -551,7 +551,7 @@ async def send(self, message):
551551
if self.expected_content_length != 0:
552552
raise RuntimeError("Response content shorter than Content-Length")
553553
self.response_complete = True
554-
self.scope['response_end_time'] = time.monotonic()
554+
self.scope["response_end_time"] = time.monotonic()
555555

556556
if self.gunicorn_log is not None:
557557
try:

uvicorn/workers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def __init__(self, *args, **kwargs):
3737
"callback_notify": self.callback_notify,
3838
"limit_max_requests": self.max_requests,
3939
"forwarded_allow_ips": self.cfg.forwarded_allow_ips,
40-
'gunicorn_log': self.log,
40+
"gunicorn_log": self.log,
4141
}
4242

4343
if self.cfg.is_ssl:

0 commit comments

Comments
 (0)