diff --git a/geos-processing/src/geos/processing/generic_processing_tools/SplitMesh.py b/geos-processing/src/geos/processing/generic_processing_tools/SplitMesh.py
index 2695c8f8..9d99aa86 100644
--- a/geos-processing/src/geos/processing/generic_processing_tools/SplitMesh.py
+++ b/geos-processing/src/geos/processing/generic_processing_tools/SplitMesh.py
@@ -83,6 +83,13 @@ def __init__( self, inputMesh: vtkUnstructuredGrid, speHandler: bool = False ) -
self.logger = logging.getLogger( loggerTitle )
self.logger.setLevel( logging.INFO )
self.logger.propagate = False
+ handlers: list[ logging.Handler ] = self.logger.handlers
+ # Get the handler to specify if the logger already exist and have it
+ for handler in handlers:
+ # The CountWarningHandler can't be the handler to specify
+ if type( handler ) is not type( CountWarningHandler() ):
+ self.handler = handler
+ break
counter: CountWarningHandler = CountWarningHandler()
self.counter: CountWarningHandler
diff --git a/geos-processing/src/geos/processing/pre_processing/MeshQualityEnhanced.py b/geos-processing/src/geos/processing/pre_processing/MeshQualityEnhanced.py
index 0e75daff..076079ce 100644
--- a/geos-processing/src/geos/processing/pre_processing/MeshQualityEnhanced.py
+++ b/geos-processing/src/geos/processing/pre_processing/MeshQualityEnhanced.py
@@ -132,6 +132,7 @@ def __init__(
self._allCellTypesExtended: tuple[ int, ...] = getAllCellTypesExtended()
self._allCellTypes: tuple[ int, ...] = getAllCellTypes()
self.speHandler: bool = speHandler
+ self.handler: logging.Handler
# Logger
self.logger: Logger
@@ -141,6 +142,13 @@ def __init__(
self.logger = logging.getLogger( loggerTitle )
self.logger.setLevel( logging.INFO )
self.logger.propagate = False
+ handlers: list[ logging.Handler ] = self.logger.handlers
+ # Get the handler to specify if the logger already exist and have it
+ for handler in handlers:
+ # The CountWarningHandler can't be the handler to specify
+ if type( handler ) is not type( CountWarningHandler() ):
+ self.handler = handler
+ break
counter: CountWarningHandler = CountWarningHandler()
self.counter: CountWarningHandler
diff --git a/geos-pv/src/geos/pv/plugins/generic_processing/PVAttributeMapping.py b/geos-pv/src/geos/pv/plugins/generic_processing/PVAttributeMapping.py
index d6b07cab..20c29a0b 100644
--- a/geos-pv/src/geos/pv/plugins/generic_processing/PVAttributeMapping.py
+++ b/geos-pv/src/geos/pv/plugins/generic_processing/PVAttributeMapping.py
@@ -54,6 +54,8 @@
"""
+HANDLER: logging.Handler = VTKHandler()
+
@smproxy.filter( name="PVAttributeMapping", label="Attribute Mapping" )
@smhint.xml( f'' )
@@ -76,7 +78,6 @@ def __init__( self: Self ) -> None:
self.piece: Piece = Piece.CELLS
self.clearAttributeNames = True
self.attributeNames: list[ str ] = []
- self.handler: logging.Handler = VTKHandler()
@smproperty.intvector(
name="AttributePiece",
@@ -190,8 +191,8 @@ def RequestData(
attributeMappingFilter: AttributeMapping = AttributeMapping( meshFrom, outData, set( self.attributeNames ),
self.piece, True )
- if not isHandlerInLogger( self.handler, attributeMappingFilter.logger ):
- attributeMappingFilter.setLoggerHandler( self.handler )
+ if not isHandlerInLogger( HANDLER, attributeMappingFilter.logger ):
+ attributeMappingFilter.setLoggerHandler( HANDLER )
try:
attributeMappingFilter.applyFilter()
diff --git a/geos-pv/src/geos/pv/plugins/generic_processing/PVClipToMainFrame.py b/geos-pv/src/geos/pv/plugins/generic_processing/PVClipToMainFrame.py
index 4c04589a..3461b134 100644
--- a/geos-pv/src/geos/pv/plugins/generic_processing/PVClipToMainFrame.py
+++ b/geos-pv/src/geos/pv/plugins/generic_processing/PVClipToMainFrame.py
@@ -36,6 +36,8 @@
"""
+HANDLER: logging.Handler = VTKHandler()
+
@SISOFilter( category=FilterCategory.GENERIC_PROCESSING,
decoratedLabel="Clip to the main frame",
@@ -45,10 +47,9 @@ class PVClipToMainFrame( VTKPythonAlgorithmBase ):
def __init__( self ) -> None:
"""Init motherclass, filter and logger."""
self._realFilter = ClipToMainFrame( speHandler=True )
- self.handler: logging.Handler = VTKHandler()
- if not isHandlerInLogger( self.handler, self._realFilter.logger ):
- self._realFilter.SetLoggerHandler( self.handler )
+ if not isHandlerInLogger( HANDLER, self._realFilter.logger ):
+ self._realFilter.SetLoggerHandler( HANDLER )
def ApplyFilter( self, inputMesh: vtkMultiBlockDataSet, outputMesh: vtkMultiBlockDataSet ) -> None:
"""Is applying clipToMainFrame filter.
diff --git a/geos-pv/src/geos/pv/plugins/generic_processing/PVCreateConstantAttributePerRegion.py b/geos-pv/src/geos/pv/plugins/generic_processing/PVCreateConstantAttributePerRegion.py
index 372ea2c3..bb8973aa 100644
--- a/geos-pv/src/geos/pv/plugins/generic_processing/PVCreateConstantAttributePerRegion.py
+++ b/geos-pv/src/geos/pv/plugins/generic_processing/PVCreateConstantAttributePerRegion.py
@@ -50,6 +50,8 @@
"""
+HANDLER: logging.Handler = VTKHandler()
+
@SISOFilter( category=FilterCategory.GENERIC_PROCESSING,
decoratedLabel="Create Constant Attribute Per Region",
@@ -72,7 +74,6 @@ def __init__( self: Self ) -> None:
# Use the handler of paraview for the log.
self.speHandler: bool = True
- self.handler: logging.Handler = VTKHandler()
# Settings of the attribute with the region indexes:
@smproperty.stringvector(
@@ -292,8 +293,8 @@ def ApplyFilter( self, inputMesh: vtkDataSet, outputMesh: vtkDataSet ) -> None:
self.speHandler,
)
- if not isHandlerInLogger( self.handler, createConstantAttributePerRegionFilter.logger ):
- createConstantAttributePerRegionFilter.setLoggerHandler( self.handler )
+ if not isHandlerInLogger( HANDLER, createConstantAttributePerRegionFilter.logger ):
+ createConstantAttributePerRegionFilter.setLoggerHandler( HANDLER )
try:
createConstantAttributePerRegionFilter.applyFilter()
diff --git a/geos-pv/src/geos/pv/plugins/generic_processing/PVFillPartialArrays.py b/geos-pv/src/geos/pv/plugins/generic_processing/PVFillPartialArrays.py
index 547945aa..4a6e27d2 100644
--- a/geos-pv/src/geos/pv/plugins/generic_processing/PVFillPartialArrays.py
+++ b/geos-pv/src/geos/pv/plugins/generic_processing/PVFillPartialArrays.py
@@ -41,6 +41,8 @@
"""
+HANDLER: logging.Handler = VTKHandler()
+
@SISOFilter( category=FilterCategory.GENERIC_PROCESSING,
decoratedLabel="Fill Partial Arrays",
@@ -51,7 +53,6 @@ def __init__( self: Self, ) -> None:
"""Fill a partial attribute with constant value per component."""
self.clearDictAttributesValues: bool = True
self.dictAttributesValues: dict[ str, Union[ list[ Any ], None ] ] = {}
- self.handler: logging.Handler = VTKHandler()
@smproperty.xml( """
' )
@@ -68,7 +70,6 @@ def __init__( self: Self ) -> None:
inputType="vtkMultiBlockDataSet",
outputType="vtkUnstructuredGrid",
)
- self.handler: logging.Handler = VTKHandler()
def RequestDataObject(
self: Self,
@@ -118,8 +119,8 @@ def RequestData(
mergeBlockEnhancedFilter: MergeBlockEnhanced = MergeBlockEnhanced( inputMesh, True )
- if not isHandlerInLogger( self.handler, mergeBlockEnhancedFilter.logger ):
- mergeBlockEnhancedFilter.setLoggerHandler( self.handler )
+ if not isHandlerInLogger( HANDLER, mergeBlockEnhancedFilter.logger ):
+ mergeBlockEnhancedFilter.setLoggerHandler( HANDLER )
try:
mergeBlockEnhancedFilter.applyFilter()
diff --git a/geos-pv/src/geos/pv/plugins/generic_processing/PVSplitMesh.py b/geos-pv/src/geos/pv/plugins/generic_processing/PVSplitMesh.py
index 81da5b81..7a3b15d5 100644
--- a/geos-pv/src/geos/pv/plugins/generic_processing/PVSplitMesh.py
+++ b/geos-pv/src/geos/pv/plugins/generic_processing/PVSplitMesh.py
@@ -39,13 +39,14 @@
"""
+HANDLER: logging.Handler = VTKHandler()
+
@SISOFilter( category=FilterCategory.GENERIC_PROCESSING, decoratedLabel="Split Mesh", decoratedType="vtkPointSet" )
class PVSplitMesh( VTKPythonAlgorithmBase ):
def __init__( self: Self ) -> None:
"""Split mesh cells."""
- self.handler: logging.Handler = VTKHandler()
def ApplyFilter( self: Self, inputMesh: vtkPointSet, outputMesh: vtkPointSet ) -> None:
"""Apply vtk filter.
@@ -55,8 +56,8 @@ def ApplyFilter( self: Self, inputMesh: vtkPointSet, outputMesh: vtkPointSet ) -
outputMesh: Output mesh.
"""
splitMeshFilter: SplitMesh = SplitMesh( inputMesh, True )
- if not isHandlerInLogger( self.handler, splitMeshFilter.logger ):
- splitMeshFilter.setLoggerHandler( self.handler )
+ if not isHandlerInLogger( HANDLER, splitMeshFilter.logger ):
+ splitMeshFilter.setLoggerHandler( HANDLER )
try:
splitMeshFilter.applyFilter()
diff --git a/geos-pv/src/geos/pv/plugins/post_processing/PVGeomechanicsCalculator.py b/geos-pv/src/geos/pv/plugins/post_processing/PVGeomechanicsCalculator.py
index 693a5f5f..0f707256 100644
--- a/geos-pv/src/geos/pv/plugins/post_processing/PVGeomechanicsCalculator.py
+++ b/geos-pv/src/geos/pv/plugins/post_processing/PVGeomechanicsCalculator.py
@@ -73,6 +73,8 @@
"""
+HANDLER: logging.Handler = VTKHandler()
+
loggerTitle: str = "Geomechanics Calculator"
@@ -93,10 +95,9 @@ def __init__( self: Self ) -> None:
self.rockCohesion: float = DEFAULT_ROCK_COHESION
self.frictionAngle: float = DEFAULT_FRICTION_ANGLE_DEG
- self.handler: logging.Handler = VTKHandler()
self.logger = logging.getLogger( loggerTitle )
self.logger.setLevel( logging.INFO )
- self.logger.addHandler( self.handler )
+ self.logger.addHandler( HANDLER )
self.logger.propagate = False
counter: CountWarningHandler = CountWarningHandler()
@@ -265,8 +266,8 @@ def ApplyFilter(
speHandler=True,
)
- if not isHandlerInLogger( self.handler, geomechanicsCalculatorFilter.logger ):
- geomechanicsCalculatorFilter.setLoggerHandler( self.handler )
+ if not isHandlerInLogger( HANDLER, geomechanicsCalculatorFilter.logger ):
+ geomechanicsCalculatorFilter.setLoggerHandler( HANDLER )
geomechanicsCalculatorFilter.physicalConstants.grainBulkModulus = self.grainBulkModulus
geomechanicsCalculatorFilter.physicalConstants.specificDensity = self.specificDensity
@@ -303,8 +304,8 @@ def ApplyFilter(
True,
)
- if not isHandlerInLogger( self.handler, geomechanicsCalculatorFilter.logger ):
- geomechanicsCalculatorFilter.setLoggerHandler( self.handler )
+ if not isHandlerInLogger( HANDLER, geomechanicsCalculatorFilter.logger ):
+ geomechanicsCalculatorFilter.setLoggerHandler( HANDLER )
geomechanicsCalculatorFilter.physicalConstants.grainBulkModulus = self.grainBulkModulus
geomechanicsCalculatorFilter.physicalConstants.specificDensity = self.specificDensity
diff --git a/geos-pv/src/geos/pv/plugins/post_processing/PVGeomechanicsWorkflow.py b/geos-pv/src/geos/pv/plugins/post_processing/PVGeomechanicsWorkflow.py
index 0b446062..efb1c089 100644
--- a/geos-pv/src/geos/pv/plugins/post_processing/PVGeomechanicsWorkflow.py
+++ b/geos-pv/src/geos/pv/plugins/post_processing/PVGeomechanicsWorkflow.py
@@ -85,6 +85,7 @@
"""
+HANDLER: logging.Handler = VTKHandler()
loggerTitle: str = "GEOS Geomechanics Workflow"
@@ -139,10 +140,9 @@ def __init__( self: Self ) -> None:
self.rockCohesion: float = DEFAULT_ROCK_COHESION
self.frictionAngle: float = DEFAULT_FRICTION_ANGLE_DEG
- self.handler: logging.Handler = VTKHandler()
self.logger = logging.getLogger( loggerTitle )
self.logger.setLevel( logging.INFO )
- self.logger.addHandler( self.handler )
+ self.logger.addHandler( HANDLER )
self.logger.propagate = False
counter: CountWarningHandler = CountWarningHandler()
diff --git a/geos-pv/src/geos/pv/plugins/post_processing/PVGeosBlockExtractAndMerge.py b/geos-pv/src/geos/pv/plugins/post_processing/PVGeosBlockExtractAndMerge.py
index dff27de7..62e415a8 100644
--- a/geos-pv/src/geos/pv/plugins/post_processing/PVGeosBlockExtractAndMerge.py
+++ b/geos-pv/src/geos/pv/plugins/post_processing/PVGeosBlockExtractAndMerge.py
@@ -82,6 +82,7 @@
"""
+HANDLER: logging.Handler = VTKHandler()
loggerTitle: str = "Extract & Merge GEOS Block"
@@ -129,10 +130,9 @@ def __init__( self: Self ) -> None:
self.outputCellsT0: vtkMultiBlockDataSet = vtkMultiBlockDataSet()
- self.handler: logging.Handler = VTKHandler()
self.logger = logging.getLogger( loggerTitle )
self.logger.setLevel( logging.INFO )
- self.logger.addHandler( self.handler )
+ self.logger.addHandler( HANDLER )
self.logger.propagate = False
counter: CountWarningHandler = CountWarningHandler()
diff --git a/geos-pv/src/geos/pv/plugins/post_processing/PVGeosLogReader.py b/geos-pv/src/geos/pv/plugins/post_processing/PVGeosLogReader.py
index 4b8aea9f..b46fd463 100644
--- a/geos-pv/src/geos/pv/plugins/post_processing/PVGeosLogReader.py
+++ b/geos-pv/src/geos/pv/plugins/post_processing/PVGeosLogReader.py
@@ -60,6 +60,7 @@
"""
+HANDLER: logging.Handler = VTKHandler()
loggerTitle: str = "Geos Log Reader"
@@ -150,10 +151,9 @@ def __init__( self: Self ) -> None:
for prop in propsSolvers:
self.m_convergence.AddArray( prop )
- self.handler: logging.Handler = VTKHandler()
self.logger = logging.getLogger( loggerTitle )
self.logger.setLevel( logging.INFO )
- self.logger.addHandler( self.handler )
+ self.logger.addHandler( HANDLER )
self.logger.propagate = False
counter: CountWarningHandler = CountWarningHandler()
diff --git a/geos-pv/src/geos/pv/plugins/post_processing/PVMohrCirclePlot.py b/geos-pv/src/geos/pv/plugins/post_processing/PVMohrCirclePlot.py
index e3ff2585..625ac5c3 100644
--- a/geos-pv/src/geos/pv/plugins/post_processing/PVMohrCirclePlot.py
+++ b/geos-pv/src/geos/pv/plugins/post_processing/PVMohrCirclePlot.py
@@ -91,6 +91,7 @@
* The attribute 'CellId' has to be used for the 'Selection Labels'.
"""
+HANDLER: logging.Handler = VTKHandler()
loggerTitle: str = "Mohr Circle"
@@ -181,10 +182,9 @@ def __init__( self: Self ) -> None:
# Request data processing step - incremented each time RequestUpdateExtent is called
self.requestDataStep: int = -1
- self.handler: logging.Handler = VTKHandler()
self.logger = logging.getLogger( loggerTitle )
self.logger.setLevel( logging.INFO )
- self.logger.addHandler( self.handler )
+ self.logger.addHandler( HANDLER )
self.logger.propagate = False
counter: CountWarningHandler = CountWarningHandler()
diff --git a/geos-pv/src/geos/pv/plugins/post_processing/PVSurfaceGeomechanics.py b/geos-pv/src/geos/pv/plugins/post_processing/PVSurfaceGeomechanics.py
index 2cbc5ba2..f63c2b82 100644
--- a/geos-pv/src/geos/pv/plugins/post_processing/PVSurfaceGeomechanics.py
+++ b/geos-pv/src/geos/pv/plugins/post_processing/PVSurfaceGeomechanics.py
@@ -52,6 +52,7 @@
"""
+HANDLER: logging.Handler = VTKHandler()
loggerTitle: str = "Surface Geomechanics"
@@ -70,10 +71,9 @@ def __init__( self: Self ) -> None:
# friction angle (°)
self.frictionAngle: float = DEFAULT_FRICTION_ANGLE_DEG
- self.handler: logging.Handler = VTKHandler()
self.logger = logging.getLogger( loggerTitle )
self.logger.setLevel( logging.INFO )
- self.logger.addHandler( self.handler )
+ self.logger.addHandler( HANDLER )
self.logger.propagate = False
counter: CountWarningHandler = CountWarningHandler()
@@ -148,8 +148,8 @@ def ApplyFilter( self: Self, inputMesh: vtkMultiBlockDataSet, outputMesh: vtkMul
loggerName: str = f"Surface geomechanics for the blockIndex { blockIndex }"
sgFilter: SurfaceGeomechanics = SurfaceGeomechanics( surfaceBlock, loggerName, True )
- if not isHandlerInLogger( self.handler, sgFilter.logger ):
- sgFilter.SetLoggerHandler( self.handler )
+ if not isHandlerInLogger( HANDLER, sgFilter.logger ):
+ sgFilter.SetLoggerHandler( HANDLER )
sgFilter.SetRockCohesion( self._getRockCohesion() )
sgFilter.SetFrictionAngle( self._getFrictionAngle() )
diff --git a/geos-pv/src/geos/pv/plugins/qc/PVCellTypeCounterEnhanced.py b/geos-pv/src/geos/pv/plugins/qc/PVCellTypeCounterEnhanced.py
index 44e99ced..c46c429a 100644
--- a/geos-pv/src/geos/pv/plugins/qc/PVCellTypeCounterEnhanced.py
+++ b/geos-pv/src/geos/pv/plugins/qc/PVCellTypeCounterEnhanced.py
@@ -41,6 +41,8 @@
"""
+HANDLER: logging.Handler = VTKHandler()
+
@smproxy.filter( name="PVCellTypeCounterEnhanced", label="Cell Type Counter Enhanced" )
@smhint.xml( f'' )
@@ -60,8 +62,6 @@ def __init__( self: Self ) -> None:
# used to concatenate results if vtkMultiBlockDataSet
self._countsAll: CellTypeCounts = CellTypeCounts()
- self.handler: logging.Handler = VTKHandler()
-
@smproperty.intvector(
name="SetSaveToFile",
label="Save to file",
@@ -141,8 +141,8 @@ def RequestData(
assert outputTable is not None, "Output pipeline is null."
cellTypeCounterEnhancedFilter: CellTypeCounterEnhanced = CellTypeCounterEnhanced( inputMesh, True )
- if not isHandlerInLogger( self.handler, cellTypeCounterEnhancedFilter.logger ):
- cellTypeCounterEnhancedFilter.setLoggerHandler( self.handler )
+ if not isHandlerInLogger( HANDLER, cellTypeCounterEnhancedFilter.logger ):
+ cellTypeCounterEnhancedFilter.setLoggerHandler( HANDLER )
try:
cellTypeCounterEnhancedFilter.applyFilter()
diff --git a/geos-pv/src/geos/pv/plugins/qc/PVMeshQualityEnhanced.py b/geos-pv/src/geos/pv/plugins/qc/PVMeshQualityEnhanced.py
index d959b1e8..2c00aadc 100644
--- a/geos-pv/src/geos/pv/plugins/qc/PVMeshQualityEnhanced.py
+++ b/geos-pv/src/geos/pv/plugins/qc/PVMeshQualityEnhanced.py
@@ -58,6 +58,8 @@
Please refer to the `Verdict Manual `_ for metrics and range definitions.
"""
+HANDLER: logging.Handler = VTKHandler()
+
@SISOFilter( category=FilterCategory.QC, decoratedLabel="Mesh Quality Enhanced", decoratedType="vtkUnstructuredGrid" )
class PVMeshQualityEnhanced( VTKPythonAlgorithmBase ):
@@ -68,8 +70,6 @@ def __init__( self: Self ) -> None:
self._saveToFile: bool = True
self._blockIndex: int = 0
- self.handler: logging.Handler = VTKHandler()
-
# Used to concatenate results if vtkMultiBlockDataSet
self._metricsAll: list[ float ] = []
@@ -232,8 +232,8 @@ def ApplyFilter( self, inputMesh: vtkUnstructuredGrid, outputMesh: vtkUnstructur
otherMetrics: set[ int ] = self._getQualityMetricsToUse( self._commonMeshQualityMetric )
meshQualityEnhancedFilter: MeshQualityEnhanced = MeshQualityEnhanced( inputMesh, True )
- if not isHandlerInLogger( self.handler, meshQualityEnhancedFilter.logger ):
- meshQualityEnhancedFilter.setLoggerHandler( self.handler )
+ if not isHandlerInLogger( HANDLER, meshQualityEnhancedFilter.logger ):
+ meshQualityEnhancedFilter.setLoggerHandler( HANDLER )
meshQualityEnhancedFilter.SetCellQualityMetrics( triangleMetrics=triangleMetrics,
quadMetrics=quadMetrics,
diff --git a/geos-pv/src/geos/pv/utils/workflowFunctions.py b/geos-pv/src/geos/pv/utils/workflowFunctions.py
index 1a66f1a7..88b6f6f8 100644
--- a/geos-pv/src/geos/pv/utils/workflowFunctions.py
+++ b/geos-pv/src/geos/pv/utils/workflowFunctions.py
@@ -9,8 +9,9 @@
from vtkmodules.vtkCommonDataModel import vtkMultiBlockDataSet
-from paraview.detail.loghandler import ( VTKHandler ) # type: ignore[import-not-found]
+from paraview.detail.loghandler import VTKHandler # type: ignore[import-not-found]
+HANDLER: logging.Handler = VTKHandler()
def doExtractAndMerge(
mesh: vtkMultiBlockDataSet,
@@ -37,9 +38,8 @@ def doExtractAndMerge(
extractFault=extractFault,
extractWell=extractWell,
speHandler=True )
- handler: logging.Handler = VTKHandler()
- if not isHandlerInLogger( handler, blockExtractor.logger ):
- blockExtractor.setLoggerHandler( handler )
+ if not isHandlerInLogger( HANDLER, blockExtractor.logger ):
+ blockExtractor.setLoggerHandler( HANDLER )
blockExtractor.applyFilter()
# Add to the warning counter the number of warning logged with the call of GeosBlockExtractor filter
@@ -84,9 +84,8 @@ def mergeBlocksFilter(
"""
loggerName = f"GEOS Block Merge for the domain { domainToMerge }"
mergeBlockFilter: GeosBlockMerge = GeosBlockMerge( mesh, convertSurfaces, True, loggerName )
- handler: logging.Handler = VTKHandler()
- if not isHandlerInLogger( handler, mergeBlockFilter.logger ):
- mergeBlockFilter.setLoggerHandler( handler )
+ if not isHandlerInLogger( HANDLER, mergeBlockFilter.logger ):
+ mergeBlockFilter.setLoggerHandler( HANDLER )
mergeBlockFilter.applyFilter()
# Add to the warning counter the number of warning logged with the call of GeosBlockMerge filter