VTK 9 Python observer fired on ErrorEvent not muting VTK raw output
Bug description
When a vtk error occurs, it can be successfully catch and treated by python using a custom observer (exception handling, logging ...)
Since VTK 9, using an observer no longer mute the original raw error from VTK which can be confusing for a final user of a CLI application.
To reproduce
Here is a short simplified code snippet taken from PVGeo:
#!/usr/bin/env python3
import vtk
class ErrorObserver:
def __init__(self):
self.__error_occurred = False
self.__get_error_message = None
self.CallDataType = 'string0'
def __call__(self, obj, event, message):
self.__error_occurred = True
self.__get_error_message = message
print(">> ERROR PARSED BY OBSERVER ==> " + message)
def error_occurred(self):
occ = self.__error_occurred
self.__error_occurred = False
return occ
def get_error_message(self):
return self.__get_error_message
def main():
f = vtk.vtkImageReader()
e = ErrorObserver()
f.GetExecutive().AddObserver('ErrorEvent', e)
f.AddObserver('ErrorEvent', e)
f.Update()
if e.error_occurred:
print("An error occured ==> " + e.get_error_message())
if __name__ == "__main__":
main()
✅ Expected output (VTK 8.1.2)
>> ERROR PARSED BY OBSERVER ==> ERROR: In /Users/prabhu/src/git/VTKPythonPackage/standalone-build/VTK-source/IO/Image/vtkImageReader2.cxx, line 595
vtkImageReader (0x7ff7754a9f40): Initialize: Could not open file .0
An error occured ==> ERROR: In /Users/prabhu/src/git/VTKPythonPackage/standalone-build/VTK-source/IO/Image/vtkImageReader2.cxx, line 595
vtkImageReader (0x7ff7754a9f40): Initialize: Could not open file .0
This behavior has been successfully validated on VTK 8.1.2 / Python 3.7.4 on MacOS.
❌ VTK 9 output
2020-07-14 05:40:16.771 ( 1.535s) [ 32B0E0] vtkImageReader2.cxx:585 ERR| vtkImageReader (0x7fb0c2721b10): Initialize: Could not open file .0
>> ERROR PARSED BY OBSERVER ==> ERROR: In /Users/tjcorona/Development/vtk/source/IO/Image/vtkImageReader2.cxx, line 585
vtkImageReader (0x7fb0c2721b10): Initialize: Could not open file .0
An error occured ==> ERROR: In /Users/tjcorona/Development/vtk/source/IO/Image/vtkImageReader2.cxx, line 585
vtkImageReader (0x7fb0c2721b10): Initialize: Could not open file .0
The first line is the raw VTK error, outputted regardless of the presence or not of an observer.
(VTK 9.0.1 / Python 3.7.4 on MacOS)
I do not know if this new behavior was expected, but it wasn't specified in the VTK 9 announcement.
If this is the new behavior, what would be the way to remove those raw outputs but keeping the error handling with observers ?