Source code for pyutils.function_utils

#!/usr/bin/env python3

# © Copyright 2021-2023, Scott Gasch

"""Helper methods dealing with functions."""

from typing import Callable


[docs]def function_identifier(f: Callable) -> str: """ Given a named `Callable`, return a string that identifies it. Usually that string is just "__module__:__name__" but there's a corner case: when __module__ is __main__ (i.e. the callable is defined in the same module as __main__). In this case, f.__module__ returns "__main__" instead of the file that it is defined in. Work around this using `pathlib.Path`. Args: f: a Callable Returns: A unique identifier for that callable in the format module:function that avoids the pseudo-module '__main__' >>> function_identifier(function_identifier) 'function_utils:function_identifier' """ if f.__module__ == "__main__": from pathlib import Path import __main__ module = __main__.__file__ module = Path(module).stem return f"{module}:{f.__name__}" else: return f"{f.__module__}:{f.__name__}"
if __name__ == "__main__": import doctest doctest.testmod()