This checks the value for different type, max length, etc.  If all of the checks pass, then the value is placed
        in the params bucket
        :param name: The name of the parameter
        :param value: The value of param
        :param params: The dictionary where the param should go if all of the checks pass
        :param optional: True (default) if the value is optional
        :param max_length: The maximum length of the param
        :param type: The type of the param
        :param gte: Greater than or equal to this number
        :param lte: LEss than or equal to this number
        :param sub_max_length: The sub maximum length (for iterables)
        :param sub_type: The sub type (for iterables)
        :return: Nothing

def _check_param(cls, name=None, value=None, params=None, optional=True, max_length=None, type=None,
                     gte=None, lte=None, sub_max_length=None, sub_type=None):
        """
        This checks the value for different type, max length, etc.  If all of the checks pass, then the value is placed
        in the params bucket
        :param name: The name of the parameter
        :param value: The value of param
        :param params: The dictionary where the param should go if all of the checks pass
        :param optional: True (default) if the value is optional
        :param max_length: The maximum length of the param
        :param type: The type of the param
        :param gte: Greater than or equal to this number
        :param lte: LEss than or equal to this number
        :param sub_max_length: The sub maximum length (for iterables)
        :param sub_type: The sub type (for iterables)
        :return: Nothing
        """
        assert params is None or isinstance(params, dict)

        if value is None:
            if not optional:
                assert value is not None
        else:
            if type is not None:
                assert isinstance(value, type)
            if max_length is not None:
                assert len(value) <= max_length
            if isinstance(value, list):
                for sub_value in value:
                    if sub_type is not None:
                        assert isinstance(sub_value, sub_type)
                    if sub_max_length is not None:
                        assert len(sub_value) <= sub_max_length
            if isinstance(value, dict):
                for key in value:
                    sub_value = value[key]
                    if sub_type is not None:
                        assert isinstance(sub_value, sub_type)
                    if sub_max_length is not None:
                        assert len(sub_value) <= sub_max_length
            if isinstance(value, int):
                if gte is not None:
                    assert value >= gte
                if lte is not None:
                    assert value <= lte

            if name is not None and params is not None:
                params[name] = value