code: def get_caller(stack_index=2, root_dir=None):
    ''' Returns file.py:lineno of your caller. A stack_index of 2 will provide
        the caller of the function calling this function. Notice that stack_index
        of 2 or more will fail if called from global scope. '''
    caller = inspect.getframeinfo(inspect.stack()[stack_index][0])
  
    # Trim the filenames for readability.
    filename = caller.filename
    if root_dir is not None:
      filename = re.sub("^" + root_dir + "/", "", filename)
    return "%s:%d" % (filename, caller.linenof get_caller(stack_index=2, root_dir=None):
    ''' Returns file.py:lineno of your caller. A stack_index of 2 will provide
        the caller of the function calling this function. Notice that stack_index
        of 2 or more will fail if called from global scope. '''
    caller = inspect.getframeinfo(inspect.stack()[stack_index][0])
  
    # Trim the filenames for readability.
    filename = caller.filename
    if root_dir is not None:
      filename = re.sub("^" + root_dir + "/", "", filename)
    return "%s:%d" % (filename, caller.lineno)
docs: Returns file.py:lineno of your caller. A stack_index of 2 will provide
        the caller of the function calling this function. Notice that stack_index
        of 2 or more will fail if called from global scope.