code: def func_span(func, tags=None, require_active_trace=False):
      
      current_span = get_current_span()
  
      if current_span is None and require_active_trace:
          @contextlib2.contextmanager
          def empty_ctx_mgr():
              yield None
  
          return empty_ctx_mgr()
  
      # TODO convert func to a proper name: module:class.func
      operation_name = str(func)
      return utils.start_child_span(
          operation_name=operation_name, parent=current_span, tags=tags)
docs: Creates a new local span for execution of the given `func`.
      The returned span is best used as a context manager, e.g.
  
      .. code-block:: python
  
          with func_span('my_function'):
              return my_function(...)
  
      At this time the func should be a string name. In the future this code
      can be enhanced to accept a real function and derive its qualified name.
  
      :param func: name of the function or method
      :param tags: optional tags to add to the child span
      :param require_active_trace: controls what to do when there is no active
          trace. If require_active_trace=True, then no span is created.
          If require_active_trace=False, a new trace is started.
      :return: new child span, or a dummy context manager if there is no
          active/current parent span