@classmethod
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
