@@ -419,8 +419,7 @@ def __init__(self, event_dict: Dict[str, Any],
419419 if query_params is None else MultiDict (query_params )
420420 self .headers : CaseInsensitiveMapping = \
421421 CaseInsensitiveMapping (event_dict ['headers' ])
422- self .uri_params : Optional [Dict [str , str ]] \
423- = event_dict ['pathParameters' ]
422+ self .uri_params : Dict [str , str ] = event_dict ['pathParameters' ]
424423 self .method : str = event_dict ['requestContext' ]['httpMethod' ]
425424 self ._is_base64_encoded = event_dict .get ('isBase64Encoded' , False )
426425 self ._body : Any = event_dict ['body' ]
@@ -1857,12 +1856,17 @@ def wrapped_event(request: Request) -> Response:
18571856 return response .to_dict (self .api .binary_types )
18581857
18591858 def _main_rest_api_handler (self , event : Any , context : Any ) -> Response :
1860- resource_path = event .get ('requestContext' , {}).get ('resourcePath' )
1861- if resource_path is None :
1862- return error_response (error_code = 'InternalServerError' ,
1863- message = 'Unknown request.' ,
1864- http_status_code = 500 )
1865- http_method = event ['requestContext' ]['httpMethod' ]
1859+ current_request : Optional [Request ] = self .current_request
1860+ if current_request :
1861+ resource_path = current_request .path
1862+ http_method = current_request .method
1863+ else :
1864+ resource_path = event .get ('requestContext' , {}).get ('resourcePath' )
1865+ if resource_path is None :
1866+ return error_response (error_code = 'InternalServerError' ,
1867+ message = 'Unknown request.' ,
1868+ http_status_code = 500 )
1869+ http_method = event ['requestContext' ]['httpMethod' ]
18661870 if http_method not in self .routes [resource_path ]:
18671871 allowed_methods = ', ' .join (self .routes [resource_path ].keys ())
18681872 return error_response (
@@ -1872,8 +1876,12 @@ def _main_rest_api_handler(self, event: Any, context: Any) -> Response:
18721876 headers = {'Allow' : allowed_methods })
18731877 route_entry = self .routes [resource_path ][http_method ]
18741878 view_function = route_entry .view_function
1875- function_args = {name : event ['pathParameters' ][name ]
1876- for name in route_entry .view_args }
1879+ if current_request :
1880+ function_args = {name : current_request .uri_params [name ]
1881+ for name in route_entry .view_args }
1882+ else :
1883+ function_args = {name : event ['pathParameters' ][name ]
1884+ for name in route_entry .view_args }
18771885 self .lambda_context = context
18781886 # We're getting the CORS headers before validation to be able to
18791887 # output desired headers with
@@ -1883,8 +1891,8 @@ def _main_rest_api_handler(self, event: Any, context: Any) -> Response:
18831891 # We're doing the header validation after creating the request
18841892 # so can leverage the case insensitive dict that the Request class
18851893 # uses for headers.
1886- if self . current_request and route_entry .content_types :
1887- content_type = self . current_request .headers .get (
1894+ if current_request and route_entry .content_types :
1895+ content_type = current_request .headers .get (
18881896 'content-type' , 'application/json' )
18891897 if not _matches_content_type (content_type ,
18901898 route_entry .content_types ):
@@ -1900,8 +1908,8 @@ def _main_rest_api_handler(self, event: Any, context: Any) -> Response:
19001908 self ._add_cors_headers (response , cors_headers )
19011909
19021910 response_headers = CaseInsensitiveMapping (response .headers )
1903- if self . current_request and not self ._validate_binary_response (
1904- self . current_request .headers , response_headers ):
1911+ if current_request and not self ._validate_binary_response (
1912+ current_request .headers , response_headers ):
19051913 content_type = response_headers .get ('content-type' , '' )
19061914 return error_response (
19071915 error_code = 'BadRequest' ,
0 commit comments