diff --git a/src/radical/utils/debug.py b/src/radical/utils/debug.py index 78b426ee..01397baf 100644 --- a/src/radical/utils/debug.py +++ b/src/radical/utils/debug.py @@ -174,9 +174,13 @@ def get_exception_trace(msg=None): # ------------------------------------------------------------------------------ # -def print_exception_trace(msg=None): +def print_exception_trace(msg=None, exc=None): - print_stacktrace(msg=msg, _stack=get_exception_trace()) + if not exc: + print_stacktrace(msg=msg, _stack=get_exception_trace()) + else: + print_stacktrace(msg=msg, + _stack=traceback.extract_tb(exc.__traceback__)) # ------------------------------------------------------------------------------ diff --git a/src/radical/utils/flux.py b/src/radical/utils/flux.py index bec64006..1d177a22 100644 --- a/src/radical/utils/flux.py +++ b/src/radical/utils/flux.py @@ -2,6 +2,7 @@ # pylint: disable=cell-var-from-loop import os +import sys import time import json @@ -49,6 +50,16 @@ def __init__(self, uid : str, self._watcher = None try: + cmd = 'flux python -c "import flux; print(flux.__file__)"' + out, err, ret = sh_callout(cmd) + + if ret: + raise RuntimeError('flux not found: %s' % err) + + flux_path = os.path.dirname(out.strip()) + mod_path = os.path.dirname(flux_path) + sys.path.append(mod_path) + self._flux = import_module('flux') self._flux_job = import_module('flux.job') @@ -297,6 +308,16 @@ def __init__(self) -> None: self._executors = list() # TODO try: + cmd = 'flux python -c "import flux; print(flux.__file__)"' + out, err, ret = sh_callout(cmd) + + if ret: + raise RuntimeError('flux not found: %s' % err) + + flux_path = os.path.dirname(out.strip()) + mod_path = os.path.dirname(flux_path) + sys.path.append(mod_path) + self._flux = import_module('flux') self._flux_job = import_module('flux.job') diff --git a/src/radical/utils/logger.py b/src/radical/utils/logger.py index 9aef1968..f6b01902 100644 --- a/src/radical/utils/logger.py +++ b/src/radical/utils/logger.py @@ -32,6 +32,15 @@ """ +# ------------------------------------------------------------------------------ +# +# NOTE: ForkingPickler does not like lambdas nor local functions, thus use +# a module level function to disable loggers. +# +def _noop(*args, **kwargs): + pass + + # ------------------------------------------------------------------------------ # import os @@ -403,21 +412,21 @@ def _ensure_handler(self): # class has no constructor, we do it this way. # disable all loggers - self.critical = lambda *args, **kwargs: None - self.error = lambda *args, **kwargs: None - self.warn = lambda *args, **kwargs: None - self.warning = lambda *args, **kwargs: None - self.info = lambda *args, **kwargs: None - self.debug = lambda *args, **kwargs: None - self.debug_1 = lambda *args, **kwargs: None - self.debug_2 = lambda *args, **kwargs: None - self.debug_3 = lambda *args, **kwargs: None - self.debug_4 = lambda *args, **kwargs: None - self.debug_5 = lambda *args, **kwargs: None - self.debug_6 = lambda *args, **kwargs: None - self.debug_7 = lambda *args, **kwargs: None - self.debug_8 = lambda *args, **kwargs: None - self.debug_9 = lambda *args, **kwargs: None + self.critical = _noop + self.error = _noop + self.warn = _noop + self.warning = _noop + self.info = _noop + self.debug = _noop + self.debug_1 = _noop + self.debug_2 = _noop + self.debug_3 = _noop + self.debug_4 = _noop + self.debug_5 = _noop + self.debug_6 = _noop + self.debug_7 = _noop + self.debug_8 = _noop + self.debug_9 = _noop # enable the ones we are configured for: if self._num_level <= 50: self.critical = self._logger.critical