Source code for polymerist.genutils.attrs

'''For dynamically inspecting and modifying attributes of Python objects'''

__author__ = 'Timotej Bernat'
__email__ = 'timotej.bernat@colorado.edu'

from typing import Any, Optional, Union
import re


[docs] def compile_argfree_getable_attrs(obj : Any, getter_re : Union[str, re.Pattern]='.*', repl_str : Optional[str]=None) -> dict[str, Any]: '''Compile the values of all methods of an object which require no arguments other than perhaps the object itself (this EXCLUDES properties) Returns a dict whose keys are the names of the methods called and whose values are the return values of those object methods Can optionally filter the names of returned method using a regular expression, passed to "getter_re" Can also optionally replace the chosen regex with an arbitrary string (including the empty string), passed to "repl_str" Parameters ---------- obj : Any Any object instance getter_re : str or re.Pattern (optional), default ".*" Optional regular expression to use for filtering down returned methods Only methods whose names match the target regex are returns repl_str : str (optional) If provided, will replace the for example, repl_str="" can be used to delete the regex from returned method names Returns ------- getable_dict : dict[str, Any] dict whose keys are the selected method names and whose values are the corresponding method returns ''' getable_dict = {} for attr_name in dir(obj): if re.search(getter_re, attr_name): try: attr_key = attr_name if (repl_str is None) else re.sub(getter_re, repl_str, attr_name) getable_dict[attr_key] = getattr(obj, attr_name)() except (TypeError, Exception): # TODO : find way to selectively intercept the Boost C++ wrapper ArgumentError pass return getable_dict