Skip to content

Commit 1b0f4df

Browse files
feat: Add the verbosity handler to TetQualityAnalysis filter (#240)
1 parent 784fa25 commit 1b0f4df

2 files changed

Lines changed: 36 additions & 12 deletions

File tree

geos-processing/src/geos/processing/pre_processing/TetQualityAnalysis.py

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
import numpy as np
66
import numpy.typing as npt
77
from typing_extensions import Self, Any
8-
from geos.utils.Logger import ( Logger, getLogger )
98

109
from vtkmodules.vtkCommonDataModel import vtkDataSet
1110
import matplotlib.pyplot as plt
1211
import matplotlib.gridspec as gridspec
1312
from matplotlib.patches import Rectangle
1413

14+
from geos.utils.Logger import ( getLogger, Logger, CountVerbosityHandler, isHandlerInLogger, getLoggerHandlerType )
1515
from geos.mesh.stats.tetrahedraAnalysisHelpers import ( getCoordinatesDoublePrecision, extractTetConnectivity,
1616
analyzeAllTets, computeQualityScore )
1717

@@ -50,7 +50,7 @@
5050
tetQualityAnalysisFilter.logger.error( f"The filter { tetQualityAnalysisFilter.logger.name } failed due to: { e }" )
5151
"""
5252

53-
loggerName: str = "Tetrahedra Quality Analysis"
53+
loggerTitle: str = "Tetrahedra Quality Analysis"
5454

5555

5656
class TetQualityAnalysis:
@@ -73,15 +73,27 @@ def __init__( self: Self, meshes: dict[ str, vtkDataSet ], speHandler: bool = Fa
7373
self.tets: dict[ int, int ] = {}
7474
self.filename = 'mesh_comparison.png'
7575

76-
# Logger.
76+
# Logger
7777
self.logger: Logger
7878
if not speHandler:
79-
self.logger = getLogger( loggerName, True )
79+
self.logger = getLogger( loggerTitle, True )
8080
else:
81-
self.logger = logging.getLogger( loggerName )
81+
self.logger = logging.getLogger( loggerTitle )
8282
self.logger.setLevel( logging.INFO )
8383
self.logger.propagate = False
8484

85+
counter: CountVerbosityHandler = CountVerbosityHandler()
86+
self.counter: CountVerbosityHandler
87+
self.nbWarnings: int = 0
88+
try:
89+
self.counter = getLoggerHandlerType( type( counter ), self.logger )
90+
self.counter.resetWarningCount()
91+
except ValueError:
92+
self.counter = counter
93+
self.counter.setLevel( logging.INFO )
94+
95+
self.logger.addHandler( self.counter )
96+
8597
def setLoggerHandler( self: Self, handler: logging.Handler ) -> None:
8698
"""Set a specific handler for the filter logger.
8799
@@ -91,12 +103,10 @@ def setLoggerHandler( self: Self, handler: logging.Handler ) -> None:
91103
Args:
92104
handler (logging.Handler): The handler to add.
93105
"""
94-
self.handler = handler
95-
if len( self.logger.handlers ) == 0:
106+
if not isHandlerInLogger( handler, self.logger ):
96107
self.logger.addHandler( handler )
97108
else:
98-
self.logger.warning( "The logger already has an handler, to use yours set the argument 'speHandler'"
99-
" to True during the filter initialization." )
109+
self.logger.warning( "The logger already has this handler, it has not been added." )
100110

101111
def applyFilter( self: Self ) -> None:
102112
"""Apply Tetrahedra Analysis."""
@@ -228,7 +238,17 @@ def applyFilter( self: Self ) -> None:
228238
self.computeDeltasFromBest()
229239
self.createComparisonDashboard()
230240

231-
self.logger.info( f"The filter { self.logger.name } succeeded." )
241+
result: str = f"The filter { self.logger.name } succeeded"
242+
if self.counter.warningCount > 0:
243+
self.logger.warning( f"{ result } but { self.counter.warningCount } warnings have been logged." )
244+
else:
245+
self.logger.info( f"{ result }." )
246+
247+
# Keep number of warnings logged during the filter application and reset the warnings count in case the filter is applied again.
248+
self.nbWarnings = self.counter.warningCount
249+
self.counter.resetWarningCount()
250+
251+
return
232252

233253
def printDistributionStatistics( self: Self ) -> None:
234254
"""Print the distribution statistics for various metrics."""

geos-pv/src/geos/pv/plugins/qc/PVTetQualityAnalysis.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# SPDX-FileContributor: Paloma Martinez
44
# ruff: noqa: E402 # disable Module level import not at top of file
55
import sys
6+
import logging
67
from pathlib import Path
78
from typing_extensions import Self, Optional
89

@@ -24,6 +25,7 @@
2425

2526
from geos.processing.pre_processing.TetQualityAnalysis import TetQualityAnalysis
2627
from geos.pv.utils.details import FilterCategory
28+
from geos.utils.Logger import isHandlerInLogger
2729

2830
__doc__ = f"""
2931
Tetrahedra QC is a ParaView plugin filter that analyze and compare the tetrahedras of two given vtkUnstructured grid datasets.
@@ -40,6 +42,8 @@
4042
* Apply
4143
"""
4244

45+
HANDLER: logging.Handler = VTKHandler()
46+
4347

4448
@smproxy.filter( name="PVTetQualityAnalysis", label="Tetrahedra QC" )
4549
@smhint.xml( f'<ShowInMenu category="{ FilterCategory.QC.value }"/>' )
@@ -103,8 +107,8 @@ def RequestData(
103107

104108
tetQualityAnalysisFilter: TetQualityAnalysis = TetQualityAnalysis( self._meshes, True )
105109

106-
if len( tetQualityAnalysisFilter.logger.handlers ) == 0:
107-
tetQualityAnalysisFilter.setLoggerHandler( VTKHandler() )
110+
if not isHandlerInLogger( HANDLER, tetQualityAnalysisFilter.logger ):
111+
tetQualityAnalysisFilter.setLoggerHandler( HANDLER )
108112

109113
try:
110114
tetQualityAnalysisFilter.setFilename( self._filename )

0 commit comments

Comments
 (0)