def get_params(self, request_params, path_prefix='', default_value=NO_DEFAULT_VALUE, use_text=True, is_required=True): """ Gets all requested parameters from a message. Will raise ParsingException if any is missing. """ params = {} if not isinstance(self.payload, basestring): for param in request_params: try: param_name, value = convert_param( self.cid, self.payload, param, self.data_format, is_required, default_value, path_prefix, use_text, self.channel_params, self.has_simple_io_config, self.bool_parameter_prefixes, self.int_parameters, self.int_parameter_suffixes) params[param_name] = value except Exception, e: msg = 'Caught an exception, param:[{}], self.has_simple_io_config:[{}], e:[{}]'.format( param, self.has_simple_io_config, format_exc(e)) self.logger.error(msg) raise Exception(msg)
def get_params(self, params_to_visit, use_channel_params_only, path_prefix='', default_value=NO_DEFAULT_VALUE, use_text=True, is_required=True): """ Gets all requested parameters from a message. Will raise ParsingException if any is missing. """ params = {} for param in params_to_visit: try: param_name, value = convert_param( self.cid, '' if use_channel_params_only else self.payload, param, self.data_format, is_required, default_value, path_prefix, use_text, self.channel_params, self.has_simple_io_config, self.bool_parameter_prefixes, self.int_parameters, self.int_parameter_suffixes, self.params_priority) params[param_name] = value except Exception, e: msg = 'Caught an exception, param:`{}`, params_to_visit:`{}`, has_simple_io_config:`{}`, e:`{}`'.format( param, params_to_visit, self.has_simple_io_config, format_exc(e)) self.logger.error(msg) raise Exception(msg)
def test_convert_check_priority(self): func_to_type = { rand_bool: Boolean, rand_float: Float, rand_int: Integer, rand_string: str, } for func, type_ in func_to_type.items(): for params_priority in PARAMS_PRIORITY: param_name = rand_string() payload_value = func() channel_value = func() args = self.get_args( param=type_(param_name), channel_params={param_name: channel_value}, payload={param_name: payload_value}, params_priority=params_priority) given_param_name, given_value = convert_param(**args) expected_value = channel_value if params_priority == PARAMS_PRIORITY.CHANNEL_PARAMS_OVER_MSG else payload_value self.assertEquals(param_name, given_param_name) self.assertEquals(expected_value, given_value)
def test_convert_sio_types(self): def _rand_date_utc(): return rand_date_utc(True) func_to_type = { rand_bool: Boolean, rand_csv: CSV, _rand_date_utc: UTC, rand_dict: Dict, rand_float: Float, rand_int: Integer, rand_list: List, rand_list_of_dicts: ListOfDicts, rand_nested: Nested, rand_opaque: Opaque, rand_string: str, rand_unicode: Unicode } for func, type_ in func_to_type.items(): for use_payload in (True, False): param_name = rand_string() payload_value = func() channel_value = func() if use_payload: channel_params = {} payload = {param_name: payload_value} expected_value = payload_value else: channel_params = {param_name: channel_value} payload = {} expected_value = channel_value if type_ is CSV: expected_value = [ elem.strip() for elem in expected_value.split(',') ] test_func = self.assertIs if type_ in ( Opaque, Nested) else self.assertEquals args = self.get_args(param=type_(param_name), channel_params=channel_params, payload=payload) given_param_name, given_value = convert_param(**args) self.assertEquals(param_name, given_param_name) test_func( expected_value, given_value, '{!r} != {!r} {} {} {}'.format(expected_value, given_value, func, type_, test_func)) del expected_value, payload_value, channel_value
def test_convert_sio_types(self): def _rand_date_utc(): return rand_date_utc(True) func_to_type = { rand_bool: Boolean, rand_csv: CSV, _rand_date_utc: UTC, rand_dict: Dict, rand_float: Float, rand_int: Integer, rand_list: List, rand_list_of_dicts: ListOfDicts, rand_nested: Nested, rand_opaque: Opaque, rand_string: str, rand_unicode: Unicode } for func, type_ in func_to_type.items(): for use_payload in (True, False): param_name = rand_string() payload_value = func() channel_value = func() if use_payload: channel_params = {} payload = {param_name:payload_value} expected_value = payload_value else: channel_params = {param_name:channel_value} payload = {} expected_value = channel_value if type_ is CSV: expected_value = [elem.strip() for elem in expected_value.split(',')] test_func = self.assertIs if type_ in (Opaque, Nested) else self.assertEquals args = self.get_args(param=type_(param_name), channel_params=channel_params, payload=payload) given_param_name, given_value = convert_param(**args) self.assertEquals(param_name, given_param_name) test_func(expected_value, given_value, '{!r} != {!r} {} {} {}'.format( expected_value, given_value, func, type_, test_func)) del expected_value, payload_value, channel_value
def test_convert_int_url_params_from_int(self): # Equivalent to # # GET /foo?item=1 # # Where 'item' is a required element (as int in channel_params). param_name = rand_string() value = rand_int() args = self.get_args(param=Integer(param_name), channel_params={param_name:value}, payload='') given_param_name, given_value = convert_param(**args) self.assertEquals(param_name, given_param_name) self.assertEquals(value, given_value)
def get_params(self, request_params, path_prefix='', default_value=NO_DEFAULT_VALUE, use_text=True, is_required=True): """ Gets all requested parameters from a message. Will raise ParsingException if any is missing. """ params = {} for param in request_params: try: param_name, value = convert_param(self.cid, self.payload, param, self.data_format, is_required, default_value, path_prefix, use_text, self.channel_params, self.has_simple_io_config, self.bool_parameter_prefixes, self.int_parameters, self.int_parameter_suffixes) params[param_name] = value except Exception, e: msg = 'Caught an exception, param:[{}], self.has_simple_io_config:[{}], e:[{}]'.format( param, self.has_simple_io_config, format_exc(e)) self.logger.error(msg) raise Exception(msg)
def test_convert_int_payload_json_req_from_int(self): # Equivalent to # # POST /foo # {'item':1} # # Where 'item' is a required element. param_name = rand_string() value = rand_int() args = self.get_args(param=Integer(param_name), payload={param_name:value}) given_param_name, given_value = convert_param(**args) self.assertEquals(param_name, given_param_name) self.assertEquals(value, given_value)
def test_convert_check_priority(self): func_to_type = { rand_bool: Boolean, rand_float: Float, rand_int: Integer, rand_string: str, } for func, type_ in func_to_type.items(): for params_priority in PARAMS_PRIORITY: param_name = rand_string() payload_value = func() channel_value = func() args = self.get_args(param=type_(param_name), channel_params={param_name:channel_value}, payload={param_name:payload_value}, params_priority=params_priority) given_param_name, given_value = convert_param(**args) expected_value = channel_value if params_priority == PARAMS_PRIORITY.CHANNEL_PARAMS_OVER_MSG else payload_value self.assertEquals(param_name, given_param_name) self.assertEquals(expected_value, given_value)