code: 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):
          
          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
docs: 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