import inspect


def get_caller_file_name(skip_frames=1):
    """
    Get the file name of the original caller of the calling function.

    :param skip_frames: The number of frames to skip to get the caller. If you
    want your filename, set to 0, if you want your caller's leave to default or
    set to 1, and any number above that to traverse your callers.

    >>> get_caller_file_name(0)
    '.../utils/paths.py'
    >>> def example_caller():
    ...     return get_caller_file_name()
    >>> example_caller()
    '.../utils/paths.py'
    """
    caller = inspect.stack()[1 + skip_frames]
    caller_frame, *_ = caller
    caller_globals = caller_frame.f_globals
    module_file_name = caller_globals.get('__file__', None)

    return module_file_name