@@ -121,7 +121,8 @@ def __init__(self,
121121
122122 def add_preflight_handler (
123123 self ,
124- routing_entity : Union [web .Resource , web .ResourceRoute ],
124+ routing_entity : Union [web .Resource , web .StaticResource ,
125+ web .ResourceRoute ],
125126 handler ):
126127 """Add OPTIONS handler for all routes defined by `routing_entity`.
127128
@@ -142,6 +143,19 @@ def add_preflight_handler(
142143 self ._preflight_routes .add (preflight_route )
143144 self ._resources_with_preflight_handlers .add (resource )
144145
146+ elif isinstance (routing_entity , web .StaticResource ):
147+ resource = routing_entity
148+
149+ # Add preflight handler for Resource, if not yet added.
150+
151+ if resource in self ._resources_with_preflight_handlers :
152+ # Preflight handler already added for this resource.
153+ return
154+
155+ preflight_route = resource .set_options_route (handler )
156+ self ._preflight_routes .add (preflight_route )
157+ self ._resources_with_preflight_handlers .add (resource )
158+
145159 elif isinstance (routing_entity , web .ResourceRoute ):
146160 route = routing_entity
147161
@@ -182,11 +196,12 @@ def is_cors_enabled_on_request(self, request: web.Request) -> bool:
182196
183197 def set_config_for_routing_entity (
184198 self ,
185- routing_entity : Union [web .Resource , web .ResourceRoute ],
199+ routing_entity : Union [web .Resource , web .StaticResource ,
200+ web .ResourceRoute ],
186201 config ):
187202 """Record configuration for resource or it's route."""
188203
189- if isinstance (routing_entity , web .Resource ):
204+ if isinstance (routing_entity , ( web .Resource , web . StaticResource ) ):
190205 resource = routing_entity
191206
192207 # Add resource configuration or fail if it's already added.
@@ -393,11 +408,10 @@ def get_preflight_request_config(
393408 requested_method : str ):
394409 assert self .is_preflight_request (preflight_request )
395410
396- # TODO: Test difference between request.raw_path and request.path.
397- path = preflight_request .path
411+ request = preflight_request .clone (method = requested_method )
398412 for route , config in self ._route_config .items ():
399413 match_info , allowed_methods = yield from route .resource .resolve (
400- requested_method , path )
414+ request )
401415 if match_info is not None :
402416 return collections .ChainMap (config , self ._default_config )
403417 else :
0 commit comments