Handle Chrome preconnect (Fixes #8)

This commit is contained in:
Ricardo Mendonça Ferreira
2020-06-15 16:54:43 -03:00
committed by Miguel Grinberg
parent c5e1873523
commit 125af4b4a9
3 changed files with 91 additions and 82 deletions

View File

@@ -17,6 +17,8 @@ class Request(BaseRequest):
async def create(stream, client_addr):
# request line
line = (await stream.readline()).strip().decode()
if not line: # pragma: no cover
return None
method, url, http_version = line.split()
http_version = http_version.split('/', 1)[1]
@@ -103,6 +105,7 @@ class Microdot(BaseMicrodot):
async def dispatch_request(self, reader, writer):
req = await Request.create(reader, writer.get_extra_info('peername'))
if req:
f = self.find_route(req)
try:
res = None
@@ -112,15 +115,18 @@ class Microdot(BaseMicrodot):
if res:
break
if res is None:
res = await self._invoke_handler(f, req, **req.url_args)
res = await self._invoke_handler(
f, req, **req.url_args)
if isinstance(res, tuple):
res = Response(*res)
elif not isinstance(res, Response):
res = Response(res)
for handler in self.after_request_handlers:
res = await self._invoke_handler(handler, req, res) or res
res = await self._invoke_handler(
handler, req, res) or res
elif 404 in self.error_handlers:
res = await self._invoke_handler(self.error_handlers[404], req)
res = await self._invoke_handler(
self.error_handlers[404], req)
else:
res = 'Not found', 404
except Exception as exc:
@@ -134,8 +140,8 @@ class Microdot(BaseMicrodot):
print_exception(exc2)
if res is None:
if 500 in self.error_handlers:
res = await self._invoke_handler(self.error_handlers[500],
req)
res = await self._invoke_handler(
self.error_handlers[500], req)
else:
res = 'Internal server error', 500
if isinstance(res, tuple):
@@ -144,7 +150,7 @@ class Microdot(BaseMicrodot):
res = Response(res)
await res.write(writer)
await writer.aclose()
if self.debug: # pragma: no cover
if self.debug and req: # pragma: no cover
print('{method} {path} {status_code}'.format(
method=req.method, path=req.path,
status_code=res.status_code))

View File

@@ -45,7 +45,7 @@ try:
except ImportError:
try:
import socket
except ImportError:
except ImportError: # pragma: no cover
socket = None
@@ -102,6 +102,8 @@ class Request():
def create(client_stream, client_addr):
# request line
line = client_stream.readline().strip().decode()
if not line: # pragma: no cover
return None
method, url, http_version = line.split()
http_version = http_version.split('/', 1)[1]
@@ -362,6 +364,7 @@ class Microdot():
stream = sock
req = Request.create(stream, addr)
if req:
f = self.find_route(req)
try:
res = None
@@ -403,7 +406,7 @@ class Microdot():
stream.close()
if stream != sock: # pragma: no cover
sock.close()
if self.debug: # pragma: no cover
if self.debug and req: # pragma: no cover
print('{method} {path} {status_code}'.format(
method=req.method, path=req.path,
status_code=res.status_code))

View File

@@ -1,5 +1,5 @@
[tox]
envlist=flake8,py35,py36,py37,py38upy
envlist=flake8,py36,py37,py38,py39,upy
skipsdist=True
skip_missing_interpreters=True
@@ -12,12 +12,12 @@ commands=
coverage erase
deps=coverage
basepython=
flake8: python3.7
py35: python3.5
flake8: python3.8
py36: python3.6
py37: python3.7
py38: python3.8
upy: python3.7
py39: python3.9
upy: python3.8
[testenv:flake8]
deps=