Skip to content

Commit 532c901

Browse files
committed
Declare Router even when werkzeug isn't installed.
Fix #1639 (again). This is the same change in the sync implementation as 356dc70 in the asyncio implementation.
1 parent 5c809b0 commit 532c901

File tree

1 file changed

+55
-56
lines changed

1 file changed

+55
-56
lines changed

src/websockets/sync/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-
def handler(self, connection: ServerConnection) -> None:
93-
"""Handle a connection."""
94-
return connection.handler(connection, **connection.handler_kwargs)
95-
9640
def route(
9741
url_map: Map,
9842
*args: Any,
@@ -212,3 +156,58 @@ def unix_route(
212156
213157
"""
214158
return route(url_map, unix=True, path=path, **kwargs)
159+
160+
161+
class Router:
162+
"""WebSocket router supporting :func:`route`."""
163+
164+
def __init__(
165+
self,
166+
url_map: Map,
167+
server_name: str | None = None,
168+
url_scheme: str = "ws",
169+
) -> None:
170+
self.url_map = url_map
171+
self.server_name = server_name
172+
self.url_scheme = url_scheme
173+
for rule in self.url_map.iter_rules():
174+
rule.websocket = True
175+
176+
def get_server_name(self, connection: ServerConnection, request: Request) -> str:
177+
if self.server_name is None:
178+
return request.headers["Host"]
179+
else:
180+
return self.server_name
181+
182+
def redirect(self, connection: ServerConnection, url: str) -> Response:
183+
response = connection.respond(http.HTTPStatus.FOUND, f"Found at {url}")
184+
response.headers["Location"] = url
185+
return response
186+
187+
def not_found(self, connection: ServerConnection) -> Response:
188+
return connection.respond(http.HTTPStatus.NOT_FOUND, "Not Found")
189+
190+
def route_request(
191+
self, connection: ServerConnection, request: Request
192+
) -> Response | None:
193+
"""Route incoming request."""
194+
url_map_adapter = self.url_map.bind(
195+
server_name=self.get_server_name(connection, request),
196+
url_scheme=self.url_scheme,
197+
)
198+
try:
199+
parsed = urllib.parse.urlparse(request.path)
200+
handler, kwargs = url_map_adapter.match(
201+
path_info=parsed.path,
202+
query_args=parsed.query,
203+
)
204+
except RequestRedirect as redirect:
205+
return self.redirect(connection, redirect.new_url)
206+
except NotFound:
207+
return self.not_found(connection)
208+
connection.handler, connection.handler_kwargs = handler, kwargs
209+
return None
210+
211+
def handler(self, connection: ServerConnection) -> None:
212+
"""Handle a connection."""
213+
return connection.handler(connection, **connection.handler_kwargs)

0 commit comments

Comments
 (0)