bedrock.endpoints.decorators.query_params.common
1from urllib.parse import quote # pragma: unit 2from bedrock.exceptions import BadRequestException # pragma: unit 3 4 5def extract_query_parameter(event, param_name, param_type, param_kwarg, 6 allow_multi_value: bool = False): # pragma: unit 7 kwarg = param_kwarg if param_kwarg is not None else param_name 8 if allow_multi_value: 9 return _extract_multi_value_query_parameter(event, param_name, param_type, kwarg) 10 else: 11 return _extract_single_query_parameter(event, param_name, param_type, kwarg) 12 13 14def _extract_single_query_parameter(event, param_name, param_type, kwarg): # pragma: unit 15 arguments = {} 16 if "queryStringParameters" in event and event["queryStringParameters"] is not None: 17 if param_name in event["queryStringParameters"]: 18 arguments[kwarg] = _argument_converter(event["queryStringParameters"][param_name], param_type) 19 elif quote(param_name) in event["queryStringParameters"]: 20 arguments[kwarg] = _argument_converter(event["queryStringParameters"][quote(param_name)], param_type) 21 return arguments 22 23 24def _extract_multi_value_query_parameter(event, param_name, param_type, kwarg): # pragma: unit 25 arguments = {} 26 if "multiValueQueryStringParameters" in event and event["multiValueQueryStringParameters"] is not None: 27 if param_name in event["multiValueQueryStringParameters"]: 28 arguments[kwarg] = _construct_multi_value_query_list(event, param_name, param_type) 29 elif quote(param_name) in event["multiValueQueryStringParameters"]: 30 arguments[kwarg] = _construct_multi_value_query_list(event, quote(param_name), param_type) 31 return arguments 32 33 34def _construct_multi_value_query_list(event, param_name, param_type): # pragma: unit 35 if param_type == str: 36 return [_argument_converter(value, param_type) 37 for param in event["multiValueQueryStringParameters"][param_name] 38 for value in param.split(",")] 39 else: 40 return [_argument_converter(value, param_type) 41 for value in event["multiValueQueryStringParameters"][param_name]] 42 43 44def _argument_converter(value, value_type): # pragma: unit 45 if value == "null": 46 return None 47 try: 48 if value_type == str: 49 return f"{value}" 50 if value_type == int: 51 return int(f"{value}") 52 if value_type == float: 53 return float(f"{value}") 54 if value_type == bool: 55 return f"{value}".lower() == "true" 56 except ValueError: 57 raise BadRequestException(f"Unsupported type: {value_type}") 58 raise BadRequestException(f"Unsupported type: {value_type}")
def
extract_query_parameter( event, param_name, param_type, param_kwarg, allow_multi_value: bool = False):
6def extract_query_parameter(event, param_name, param_type, param_kwarg, 7 allow_multi_value: bool = False): # pragma: unit 8 kwarg = param_kwarg if param_kwarg is not None else param_name 9 if allow_multi_value: 10 return _extract_multi_value_query_parameter(event, param_name, param_type, kwarg) 11 else: 12 return _extract_single_query_parameter(event, param_name, param_type, kwarg)