aboutsummaryrefslogtreecommitdiff
path: root/src/argaze/DataFeatures.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/argaze/DataFeatures.py')
-rw-r--r--src/argaze/DataFeatures.py32
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