Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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
Beispiel #5
0
    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
Beispiel #6
0
    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)
Beispiel #7
0
    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)
Beispiel #8
0
    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)
Beispiel #9
0
    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)