@@ -37,62 +37,6 @@ def unix_route(
37
37
38
38
else :
39
39
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
-
96
40
def route (
97
41
url_map : Map ,
98
42
* args : Any ,
@@ -218,3 +162,58 @@ def unix_route(
218
162
219
163
"""
220
164
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