Skip to content

Commit 356dc70

Browse files
committed
Declare Router even when werkzeug isn't installed.
Fix #1639.
1 parent 194c49a commit 356dc70

File tree

1 file changed

+55
-56
lines changed

1 file changed

+55
-56
lines changed

src/websockets/asyncio/router.py

Lines changed: 55 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -37,62 +37,6 @@ def unix_route(
3737

3838
else:
3939

40-
class Router:
41-
"""WebSocket router supporting :func:`route`."""
42-
43-
def __init__(
44-
self,
45-
url_map: Map,
46-
server_name: str | None = None,
47-
url_scheme: str = "ws",
48-
) -> None:
49-
self.url_map = url_map
50-
self.server_name = server_name
51-
self.url_scheme = url_scheme
52-
for rule in self.url_map.iter_rules():
53-
rule.websocket = True
54-
55-
def get_server_name(
56-
self, connection: ServerConnection, request: Request
57-
) -> str:
58-
if self.server_name is None:
59-
return request.headers["Host"]
60-
else:
61-
return self.server_name
62-
63-
def redirect(self, connection: ServerConnection, url: str) -> Response:
64-
response = connection.respond(http.HTTPStatus.FOUND, f"Found at {url}")
65-
response.headers["Location"] = url
66-
return response
67-
68-
def not_found(self, connection: ServerConnection) -> Response:
69-
return connection.respond(http.HTTPStatus.NOT_FOUND, "Not Found")
70-
71-
def route_request(
72-
self, connection: ServerConnection, request: Request
73-
) -> Response | None:
74-
"""Route incoming request."""
75-
url_map_adapter = self.url_map.bind(
76-
server_name=self.get_server_name(connection, request),
77-
url_scheme=self.url_scheme,
78-
)
79-
try:
80-
parsed = urllib.parse.urlparse(request.path)
81-
handler, kwargs = url_map_adapter.match(
82-
path_info=parsed.path,
83-
query_args=parsed.query,
84-
)
85-
except RequestRedirect as redirect:
86-
return self.redirect(connection, redirect.new_url)
87-
except NotFound:
88-
return self.not_found(connection)
89-
connection.handler, connection.handler_kwargs = handler, kwargs
90-
return None
91-
92-
async def handler(self, connection: ServerConnection) -> None:
93-
"""Handle a connection."""
94-
return await connection.handler(connection, **connection.handler_kwargs)
95-
9640
def route(
9741
url_map: Map,
9842
*args: Any,
@@ -218,3 +162,58 @@ def unix_route(
218162
219163
"""
220164
return route(url_map, unix=True, path=path, **kwargs)
165+
166+
167+
class Router:
168+
"""WebSocket router supporting :func:`route`."""
169+
170+
def __init__(
171+
self,
172+
url_map: Map,
173+
server_name: str | None = None,
174+
url_scheme: str = "ws",
175+
) -> None:
176+
self.url_map = url_map
177+
self.server_name = server_name
178+
self.url_scheme = url_scheme
179+
for rule in self.url_map.iter_rules():
180+
rule.websocket = True
181+
182+
def get_server_name(self, connection: ServerConnection, request: Request) -> str:
183+
if self.server_name is None:
184+
return request.headers["Host"]
185+
else:
186+
return self.server_name
187+
188+
def redirect(self, connection: ServerConnection, url: str) -> Response:
189+
response = connection.respond(http.HTTPStatus.FOUND, f"Found at {url}")
190+
response.headers["Location"] = url
191+
return response
192+
193+
def not_found(self, connection: ServerConnection) -> Response:
194+
return connection.respond(http.HTTPStatus.NOT_FOUND, "Not Found")
195+
196+
def route_request(
197+
self, connection: ServerConnection, request: Request
198+
) -> Response | None:
199+
"""Route incoming request."""
200+
url_map_adapter = self.url_map.bind(
201+
server_name=self.get_server_name(connection, request),
202+
url_scheme=self.url_scheme,
203+
)
204+
try:
205+
parsed = urllib.parse.urlparse(request.path)
206+
handler, kwargs = url_map_adapter.match(
207+
path_info=parsed.path,
208+
query_args=parsed.query,
209+
)
210+
except RequestRedirect as redirect:
211+
return self.redirect(connection, redirect.new_url)
212+
except NotFound:
213+
return self.not_found(connection)
214+
connection.handler, connection.handler_kwargs = handler, kwargs
215+
return None
216+
217+
async def handler(self, connection: ServerConnection) -> None:
218+
"""Handle a connection."""
219+
return await connection.handler(connection, **connection.handler_kwargs)

0 commit comments

Comments
 (0)