mirror of
https://github.com/django/daphne.git
synced 2024-11-21 15:36:33 +03:00
Add flake8 linting
This commit is contained in:
parent
08e7841718
commit
7f5fe7370f
|
@ -12,6 +12,7 @@ logger = logging.getLogger(__name__)
|
|||
DEFAULT_HOST = "127.0.0.1"
|
||||
DEFAULT_PORT = 8000
|
||||
|
||||
|
||||
class CommandLineInterface(object):
|
||||
"""
|
||||
Acts as the main CLI entry point for running the server.
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
|
||||
|
||||
def build_endpoint_description_strings(
|
||||
host=None,
|
||||
port=None,
|
||||
unix_socket=None,
|
||||
file_descriptor=None
|
||||
):
|
||||
):
|
||||
"""
|
||||
Build a list of twisted endpoint description strings that the server will listen on.
|
||||
This is to streamline the generation of twisted endpoint description strings from easier
|
||||
|
|
|
@ -1,20 +1,16 @@
|
|||
import logging
|
||||
import random
|
||||
import string
|
||||
import time
|
||||
import traceback
|
||||
|
||||
import six
|
||||
from twisted.internet.defer import ensureDeferred
|
||||
from twisted.internet.interfaces import IProtocolNegotiationFactory
|
||||
from twisted.protocols.policies import ProtocolWrapper
|
||||
from twisted.web import http
|
||||
from zope.interface import implementer
|
||||
|
||||
from six.moves.urllib_parse import unquote, unquote_plus
|
||||
from six.moves.urllib_parse import unquote
|
||||
|
||||
from .utils import parse_x_forwarded_for
|
||||
from .ws_protocol import WebSocketFactory, WebSocketProtocol
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -138,7 +134,7 @@ class WebRequest(http.Request):
|
|||
continue
|
||||
for value in values:
|
||||
if name.lower() == b"daphne-root-path":
|
||||
self.root_path = self.unquote(value)
|
||||
self.root_path = unquote(value.decode("ascii"))
|
||||
else:
|
||||
self.clean_headers.append((name.lower(), value))
|
||||
logger.debug("HTTP %s request for %s", self.method, self.client_addr)
|
||||
|
@ -149,7 +145,7 @@ class WebRequest(http.Request):
|
|||
# TODO: Correctly say if it's 1.1 or 1.0
|
||||
"http_version": self.clientproto.split(b"/")[-1].decode("ascii"),
|
||||
"method": self.method.decode("ascii"),
|
||||
"path": self.unquote(self.path),
|
||||
"path": unquote(self.path.decode("ascii")),
|
||||
"root_path": self.root_path,
|
||||
"scheme": "https" if self.isSecure() else "http",
|
||||
"query_string": self.query_string,
|
||||
|
@ -213,9 +209,9 @@ class WebRequest(http.Request):
|
|||
logger.debug("HTTP %s response started for %s", message["status"], self.client_addr)
|
||||
elif message["type"] == "http.response.content":
|
||||
if not self._response_started:
|
||||
raise ValueError("HTTP response has not yet been started but got %s" % message["type"])# Write out body
|
||||
raise ValueError("HTTP response has not yet been started but got %s" % message["type"])
|
||||
# Write out body
|
||||
http.Request.write(self, message.get("content", b""))
|
||||
|
||||
# End if there's no more content
|
||||
if not message.get("more_content", False):
|
||||
self.finish()
|
||||
|
@ -252,22 +248,6 @@ class WebRequest(http.Request):
|
|||
|
||||
### Utility functions
|
||||
|
||||
@classmethod
|
||||
def unquote(cls, value, plus_as_space=False):
|
||||
"""
|
||||
Python 2 and 3 compat layer for utf-8 unquoting
|
||||
"""
|
||||
if six.PY2:
|
||||
if plus_as_space:
|
||||
return unquote_plus(value).decode("utf8")
|
||||
else:
|
||||
return unquote(value).decode("utf8")
|
||||
else:
|
||||
if plus_as_space:
|
||||
return unquote_plus(value.decode("ascii"))
|
||||
else:
|
||||
return unquote(value.decode("ascii"))
|
||||
|
||||
def send_disconnect(self):
|
||||
"""
|
||||
Sends a http.disconnect message.
|
||||
|
|
|
@ -3,12 +3,8 @@ from twisted.internet import asyncioreactor # isort:skip
|
|||
asyncioreactor.install() # isort:skip
|
||||
|
||||
import asyncio
|
||||
import collections
|
||||
import logging
|
||||
import random
|
||||
import string
|
||||
import traceback
|
||||
import warnings
|
||||
|
||||
from twisted.internet import defer, reactor
|
||||
from twisted.internet.endpoints import serverFromString
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import importlib
|
||||
import sys
|
||||
|
||||
from twisted.web.http_headers import Headers
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ import six
|
|||
from autobahn.twisted.websocket import ConnectionDeny, WebSocketServerFactory, WebSocketServerProtocol
|
||||
from twisted.internet import defer
|
||||
|
||||
from six.moves.urllib_parse import unquote, urlencode
|
||||
from six.moves.urllib_parse import unquote
|
||||
|
||||
from .utils import parse_x_forwarded_for
|
||||
|
||||
|
@ -61,19 +61,23 @@ class WebSocketProtocol(WebSocketServerProtocol):
|
|||
subprotocols = []
|
||||
for header, value in self.clean_headers:
|
||||
if header == b"sec-websocket-protocol":
|
||||
subprotocols = [x.strip() for x in self.unquote(value).split(",")]
|
||||
subprotocols = [
|
||||
x.strip()
|
||||
for x in
|
||||
unquote(value.decode("ascii")).split(",")
|
||||
]
|
||||
# Make new application instance with scope
|
||||
self.path = request.path.encode("ascii")
|
||||
self.application_queue = self.server.create_application(self, {
|
||||
"type": "websocket",
|
||||
"path": self.unquote(self.path),
|
||||
"path": unquote(self.path.decode("ascii")),
|
||||
"headers": self.clean_headers,
|
||||
"query_string": self._raw_query_string, # Passed by HTTP protocol
|
||||
"client": self.client_addr,
|
||||
"server": self.server_addr,
|
||||
"subprotocols": subprotocols,
|
||||
})
|
||||
except:
|
||||
except Exception as e:
|
||||
# Exceptions here are not displayed right, just 500.
|
||||
# Turn them into an ERROR log.
|
||||
logger.error(traceback.format_exc())
|
||||
|
@ -152,7 +156,7 @@ class WebSocketProtocol(WebSocketServerProtocol):
|
|||
if message.get("bytes", None) and message.get("text", None):
|
||||
raise ValueError(
|
||||
"Got invalid WebSocket reply message on %s - contains both bytes and text keys" % (
|
||||
channel,
|
||||
message,
|
||||
)
|
||||
)
|
||||
if message.get("bytes", None):
|
||||
|
@ -214,16 +218,6 @@ class WebSocketProtocol(WebSocketServerProtocol):
|
|||
|
||||
### Utils
|
||||
|
||||
@classmethod
|
||||
def unquote(cls, value):
|
||||
"""
|
||||
Python 2 and 3 compat layer for utf-8 unquoting
|
||||
"""
|
||||
if six.PY2:
|
||||
return unquote(value).decode("utf8")
|
||||
else:
|
||||
return unquote(value.decode("ascii"))
|
||||
|
||||
def duration(self):
|
||||
"""
|
||||
Returns the time since the socket was opened
|
||||
|
|
|
@ -10,5 +10,5 @@ multi_line_output = 3
|
|||
|
||||
[flake8]
|
||||
exclude = venv/*,tox/*,docs/*,testproject/*,js_client/*
|
||||
ignore = E123,E128,E402,W503,E731,W601
|
||||
ignore = E123,E128,E266,E402,W503,E731,W601
|
||||
max-line-length = 120
|
||||
|
|
|
@ -15,14 +15,14 @@ class TestHTTPRequest(DaphneTestCase):
|
|||
"""
|
||||
|
||||
def assert_valid_http_scope(
|
||||
self,
|
||||
scope,
|
||||
method,
|
||||
path,
|
||||
params=None,
|
||||
headers=None,
|
||||
scheme=None,
|
||||
):
|
||||
self,
|
||||
scope,
|
||||
method,
|
||||
path,
|
||||
params=None,
|
||||
headers=None,
|
||||
scheme=None,
|
||||
):
|
||||
"""
|
||||
Checks that the passed scope is a valid ASGI HTTP scope regarding types
|
||||
and some urlencoding things.
|
||||
|
@ -76,11 +76,7 @@ class TestHTTPRequest(DaphneTestCase):
|
|||
if server is not None:
|
||||
self.assert_valid_address_and_port(server)
|
||||
|
||||
def assert_valid_http_request_message(
|
||||
self,
|
||||
message,
|
||||
body=None,
|
||||
):
|
||||
def assert_valid_http_request_message(self, message, body=None):
|
||||
"""
|
||||
Asserts that a message is a valid http.request message
|
||||
"""
|
||||
|
@ -167,13 +163,13 @@ class TestHTTPRequest(DaphneTestCase):
|
|||
)
|
||||
@settings(max_examples=5, deadline=2000)
|
||||
def test_kitchen_sink(
|
||||
self,
|
||||
request_method,
|
||||
request_path,
|
||||
request_params,
|
||||
request_headers,
|
||||
request_body,
|
||||
):
|
||||
self,
|
||||
request_method,
|
||||
request_path,
|
||||
request_params,
|
||||
request_headers,
|
||||
request_body,
|
||||
):
|
||||
"""
|
||||
Throw everything at Daphne that we dare. The idea is that if a combination
|
||||
of method/path/headers/body would break the spec, hypothesis will eventually find it.
|
||||
|
|
|
@ -15,14 +15,14 @@ class TestWebsocket(DaphneTestCase):
|
|||
"""
|
||||
|
||||
def assert_valid_websocket_scope(
|
||||
self,
|
||||
scope,
|
||||
path="/",
|
||||
params=None,
|
||||
headers=None,
|
||||
scheme=None,
|
||||
subprotocols=None,
|
||||
):
|
||||
self,
|
||||
scope,
|
||||
path="/",
|
||||
params=None,
|
||||
headers=None,
|
||||
scheme=None,
|
||||
subprotocols=None,
|
||||
):
|
||||
"""
|
||||
Checks that the passed scope is a valid ASGI HTTP scope regarding types
|
||||
and some urlencoding things.
|
||||
|
@ -145,11 +145,11 @@ class TestWebsocket(DaphneTestCase):
|
|||
)
|
||||
@settings(max_examples=5, deadline=2000)
|
||||
def test_http_bits(
|
||||
self,
|
||||
request_path,
|
||||
request_params,
|
||||
request_headers,
|
||||
):
|
||||
self,
|
||||
request_path,
|
||||
request_params,
|
||||
request_headers,
|
||||
):
|
||||
"""
|
||||
Tests that various HTTP-level bits (query string params, path, headers)
|
||||
carry over into the scope.
|
||||
|
|
Loading…
Reference in New Issue
Block a user