diff options
Diffstat (limited to 'src/argaze/DataFeatures.py')
-rw-r--r-- | src/argaze/DataFeatures.py | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/argaze/DataFeatures.py b/src/argaze/DataFeatures.py index 72f1d26..fa9b52e 100644 --- a/src/argaze/DataFeatures.py +++ b/src/argaze/DataFeatures.py @@ -658,6 +658,15 @@ class PipelineStepLoadingFailed(Exception): def __init__(self, message): super().__init__(message) + +class PipelineStepEnterFailed(Exception): + """ + Exception raised when pipeline step object context fails to enter. + """ + + def __init__(self, message): + super().__init__(message) + @timestamp class TimestampedImage(numpy.ndarray): """Wrap numpy.array to timestamp image.""" @@ -753,7 +762,16 @@ def PipelineStepEnter(method): PipelineStepObject.__enter__(self) - method(self) + try: + + method(self) + + self._starting_error = None + + except Exception as e: + + self._starting_error = e + logging.error('%s.__enter__: %s', get_class_path(self), e) return self @@ -976,11 +994,13 @@ class PipelineStepObject(): """ __initialized = False + _starting_error = None def __init__(self): """Initialize PipelineStepObject.""" if not self.__initialized: + logging.debug('%s.__init__', get_class_path(self)) # Init private attributes @@ -1013,6 +1033,8 @@ class PipelineStepObject(): for observer in self.observers: observer.__enter__() + # Context starting error is catched in @PipelineStepEnter decorator wrapper + return self def __exit__(self, exception_type, exception_value, exception_traceback): @@ -1033,8 +1055,7 @@ class PipelineStepObject(): if hasattr(self, key): - logging.debug('%s.update_attributes > update %s with %s value', get_class_path(self), key, - type(value).__name__) + logging.debug('%s.update_attributes > update %s with %s value', get_class_path(self), key, type(value).__name__) setattr(self, key, value) @@ -1043,6 +1064,11 @@ class PipelineStepObject(): raise (AttributeError(f'{get_class_path(self)} has not {key} attribute.')) @property + def starting_error(self) -> Exception: + """Get pipeline step object's context stating error.""" + return self._starting_error + + @property def name(self) -> str: """Get pipeline step object's name.""" return self.__name |