Skip to content

Commit 4e7da54

Browse files
committed
Make linter happy
1 parent dd43554 commit 4e7da54

File tree

4 files changed

+65
-60
lines changed

4 files changed

+65
-60
lines changed

uvicorn/logging.py

+60-53
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,15 @@ def formatMessage(self, record: logging.LogRecord) -> str:
121121

122122

123123
class GunicornSafeAtoms(abc.Mapping):
124-
"""Implement atoms necessary for gunicorn log."""
124+
"""Implement atoms necessary for gunicorn log.
125+
126+
This class does a few things:
127+
- provide all atoms necessary for gunicorn log formatter
128+
- collect response body size for reporting from ASGI messages
129+
- provide mapping interface that returns '-' for missing atoms
130+
- escapes double quotes found in atom strings
131+
"""
132+
125133
def __init__(self, scope):
126134
self.scope = scope
127135
self.status_code = None
@@ -134,25 +142,23 @@ def __init__(self, scope):
134142
def request_headers(self):
135143
if self._request_headers is None:
136144
self._request_headers = {
137-
k.decode('ascii'): v.decode('ascii')
138-
for k, v in self.scope['headers']
145+
k.decode("ascii"): v.decode("ascii") for k, v in self.scope["headers"]
139146
}
140147
return self._request_headers
141148

142149
@property
143150
def duration(self):
144-
d = self.scope['response_end_time'] - self.scope['request_start_time']
151+
d = self.scope["response_end_time"] - self.scope["request_start_time"]
145152
return d
146153

147154
def on_asgi_message(self, message):
148-
if message['type'] == 'http.response.start':
149-
self.status_code = message['status']
155+
if message["type"] == "http.response.start":
156+
self.status_code = message["status"]
150157
self.response_headers = {
151-
k.decode('ascii'): v.decode('ascii')
152-
for k, v in message['headers']
158+
k.decode("ascii"): v.decode("ascii") for k, v in message["headers"]
153159
}
154-
elif message['type'] == 'http.response.body':
155-
self.response_length += len(message.get('body', ''))
160+
elif message["type"] == "http.response.body":
161+
self.response_length += len(message.get("body", ""))
156162

157163
def _request_header(self, key):
158164
return self.request_headers.get(key.lower())
@@ -168,20 +174,20 @@ def _wsgi_environ_variable(self, key):
168174
def __getitem__(self, key):
169175
if key in self.HANDLERS:
170176
retval = self.HANDLERS[key](self)
171-
elif key.startswith('{'):
172-
if key.endswith('}i'):
177+
elif key.startswith("{"):
178+
if key.endswith("}i"):
173179
retval = self._request_header(key[1:-2])
174-
elif key.endswith('}o'):
180+
elif key.endswith("}o"):
175181
retval = self._response_header(key[1:-2])
176-
elif key.endswith('}e'):
182+
elif key.endswith("}e"):
177183
retval = self._wsgi_environ_variable(key[1:-2])
178184
else:
179185
retval = None
180186
else:
181187
retval = None
182188

183189
if retval is None:
184-
return '-'
190+
return "-"
185191
if isinstance(retval, str):
186192
return retval.replace('"', '\\"')
187193
return retval
@@ -192,103 +198,104 @@ def _register_handler(key, handlers=HANDLERS):
192198
def decorator(fn):
193199
handlers[key] = fn
194200
return fn
201+
195202
return decorator
196203

197-
@_register_handler('h')
204+
@_register_handler("h")
198205
def _remote_address(self, *args, **kwargs):
199-
return self.scope['client'][0]
206+
return self.scope["client"][0]
200207

201-
@_register_handler('l')
208+
@_register_handler("l")
202209
def _dash(self, *args, **kwargs):
203-
return '-'
210+
return "-"
204211

205-
@_register_handler('u')
212+
@_register_handler("u")
206213
def _user_name(self, *args, **kwargs):
207214
pass
208215

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

214-
@_register_handler('r')
221+
@_register_handler("r")
215222
def status_line(self, *args, **kwargs):
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(
223+
full_raw_path = self.scope["raw_path"] + self.scope["query_string"]
224+
full_path = full_raw_path.decode("ascii")
225+
return "{method} {full_path} HTTP/{http_version}".format(
219226
full_path=full_path, **self.scope
220227
)
221228

222-
@_register_handler('m')
229+
@_register_handler("m")
223230
def request_method(self, *args, **kwargs):
224-
return self.scope['method']
231+
return self.scope["method"]
225232

226-
@_register_handler('U')
233+
@_register_handler("U")
227234
def url_path(self, *args, **kwargs):
228-
return self.scope['raw_path'].decode('ascii')
235+
return self.scope["raw_path"].decode("ascii")
229236

230-
@_register_handler('q')
237+
@_register_handler("q")
231238
def query_string(self, *args, **kwargs):
232-
return self.scope['query_string'].decode('ascii')
239+
return self.scope["query_string"].decode("ascii")
233240

234-
@_register_handler('H')
241+
@_register_handler("H")
235242
def protocol(self, *args, **kwargs):
236-
return 'HTTP/%s' % self.scope['http_version']
243+
return "HTTP/%s" % self.scope["http_version"]
237244

238-
@_register_handler('s')
245+
@_register_handler("s")
239246
def status(self, *args, **kwargs):
240-
return self.status_code or '-'
247+
return self.status_code or "-"
241248

242-
@_register_handler('B')
249+
@_register_handler("B")
243250
def response_length(self, *args, **kwargs):
244251
return self.response_length
245252

246-
@_register_handler('b')
253+
@_register_handler("b")
247254
def response_length_or_dash(self, *args, **kwargs):
248-
return self.response_length or '-'
255+
return self.response_length or "-"
249256

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

257-
@_register_handler('a')
264+
@_register_handler("a")
258265
def user_agent(self, *args, **kwargs):
259-
val = self.request_headers.get(b'user-agent')
266+
val = self.request_headers.get(b"user-agent")
260267
if val is None:
261268
return None
262-
return val.decode('ascii')
269+
return val.decode("ascii")
263270

264-
@_register_handler('T')
271+
@_register_handler("T")
265272
def request_time_seconds(self, *args, **kwargs):
266273
return int(self.duration)
267274

268-
@_register_handler('D')
275+
@_register_handler("D")
269276
def request_time_microseconds(self, *args, **kwargs):
270277
return int(self.duration * 1_000_000)
271278

272-
@_register_handler('L')
279+
@_register_handler("L")
273280
def request_time_decimal_seconds(self, *args, **kwargs):
274281
return "%.6f" % self.duration
275282

276-
@_register_handler('p')
283+
@_register_handler("p")
277284
def process_id(self, *args, **kwargs):
278285
return "<%s>" % getpid()
279286

280287
def __iter__(self):
281288
# FIXME: add WSGI environ
282289
yield from self.HANDLERS
283-
for k, _ in self.scope['headers']:
284-
yield '{%s}i' % k.lower()
290+
for k, _ in self.scope["headers"]:
291+
yield "{%s}i" % k.lower()
285292
for k in self.response_headers:
286-
yield '{%s}o' % k.lower()
293+
yield "{%s}o" % k.lower()
287294

288295
def __len__(self):
289296
# FIXME: add WSGI environ
290297
return (
291298
len(self.HANDLERS)
292-
+ len(self.scope['headers'] or ())
299+
+ len(self.scope["headers"] or ())
293300
+ len(self.response_headers)
294301
)

uvicorn/protocols/http/h11_impl.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -490,8 +490,8 @@ async def send(self, message):
490490
event = h11.EndOfMessage()
491491
output = self.conn.send(event)
492492

493-
duration_extension = self.scope['extensions']['uvicorn_request_duration']
494-
duration_extension["response_end_time"] = time.monotonic()
493+
duration_scope = self.scope["extensions"]["uvicorn_request_duration"]
494+
duration_scope["response_end_time"] = time.monotonic()
495495
if self.gunicorn_log is not None:
496496
try:
497497
self.gunicorn_log.access_log.info(

uvicorn/protocols/http/httptools_impl.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import time
66
import traceback
77
import urllib
8-
from collections import abc
9-
from os import getpid
108
from typing import Callable
119

1210
import httptools
@@ -528,8 +526,8 @@ async def send(self, message):
528526
if self.expected_content_length != 0:
529527
raise RuntimeError("Response content shorter than Content-Length")
530528
self.response_complete = True
531-
duration_extension = self.scope['extensions']['uvicorn_request_duration']
532-
duration_extension['response_end_time'] = time.monotonic()
529+
duration_scope = self.scope["extensions"]["uvicorn_request_duration"]
530+
duration_scope["response_end_time"] = time.monotonic()
533531

534532
if self.gunicorn_log is not None:
535533
try:

uvicorn/workers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
3838
"callback_notify": self.callback_notify,
3939
"limit_max_requests": self.max_requests,
4040
"forwarded_allow_ips": self.cfg.forwarded_allow_ips,
41-
'gunicorn_log': self.log,
41+
"gunicorn_log": self.log,
4242
}
4343

4444
if self.cfg.is_ssl:

0 commit comments

Comments
 (0)