code: def warning(
          cls,
          template,
          default_params={},
          cause=None,
          stack_depth=0,
          log_context=None,
          **more_params
      ):
          
          timestamp = datetime.utcnow()
          if not is_text(template):
              Log.error("Log.warning was expecting a unicode template")
  
          if isinstance(default_params, BaseException):
              cause = default_params
              default_params = {}
  
          if "values" in more_params.keys():
              Log.error("Can not handle a logging parameter by name `values`")
  
          params = Data(dict(default_params, **more_params))
          cause = unwraplist([Except.wrap(c) for c in listwrap(cause)])
          trace = exceptions.extract_stack(stack_depth + 1)
  
          e = Except(exceptions.WARNING, template=template, params=params, cause=cause, trace=trace)
          Log._annotate(
              e,
              timestamp,
              stack_depth+1
          )
docs: :param template: *string* human readable string with placeholders for parameters
          :param default_params: *dict* parameters to fill in template
          :param cause: *Exception* for chaining
          :param stack_depth:  *int* how many calls you want popped off the stack to report the *true* caller
          :param log_context: *dict* extra key:value pairs for your convenience
          :param more_params: *any more parameters (which will overwrite default_params)
          :return: