summaryrefslogtreecommitdiff
path: root/function_utils.py
diff options
context:
space:
mode:
authorScott <[email protected]>2022-01-17 20:30:08 -0800
committerScott <[email protected]>2022-01-17 20:30:08 -0800
commit142ec2f33945b549fbc9c2decd179cc0581cb55c (patch)
tree88eb2eaf38fc137ccb3e43b9647211eae3c0443a /function_utils.py
parentff0c10dff77a141bfebcce592eef34d6b065bfa9 (diff)
Creates a function_utils and pull a function_identifer method into
it.
Diffstat (limited to 'function_utils.py')
-rw-r--r--function_utils.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/function_utils.py b/function_utils.py
new file mode 100644
index 0000000..5b70981
--- /dev/null
+++ b/function_utils.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python3
+
+from typing import Callable
+
+
+def function_identifier(f: Callable) -> str:
+ """
+ Given a callable function, 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 (see below).
+
+ >>> 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__}'