1717from rich .table import Table
1818
1919
20- class Dependency :
20+ class TableBuilder :
21+ """Builder to provide common table-building utilities for console classes."""
22+
23+ @staticmethod
24+ def _make_table (content : dict , columns : list [str ]) -> Table :
25+ table = Table (show_header = False , box = None )
26+ for col in columns :
27+ table .add_column (col , justify = "left" )
28+ for field , value in content .items ():
29+ table .add_row (field , value )
30+ return table
31+
32+ @staticmethod
33+ def _make_checks_table (checks : dict [str , str ]) -> Table :
34+ table = Table (show_header = False , box = None )
35+ table .add_column ("Status" , justify = "left" )
36+ table .add_column ("Check" , justify = "left" )
37+ for check_name , check_status in checks .items ():
38+ if check_status == "RUNNING" :
39+ table .add_row (Status ("[bold green]RUNNING[/]" ), check_name )
40+ return table
41+
42+ @staticmethod
43+ def _make_failed_checks_table (failed_checks : list ) -> Table :
44+ table = Table (show_header = False , box = None )
45+ table .add_column ("Status" , justify = "left" )
46+ table .add_column ("Check ID" , justify = "left" )
47+ table .add_column ("Description" , justify = "left" )
48+ for check in failed_checks :
49+ table .add_row ("[bold red]FAILED[/]" , check .check .check_id , check .check .check_description )
50+ return table
51+
52+ @staticmethod
53+ def _make_summary_table (checks_summary : dict , total_checks : int ) -> Table :
54+ table = Table (show_header = False , box = None )
55+ table .add_column ("Check Result Type" , justify = "left" )
56+ table .add_column ("Count" , justify = "left" )
57+ table .add_row ("Total Checks" , str (total_checks ), style = "white" )
58+ color_map = {
59+ "PASSED" : "green" ,
60+ "FAILED" : "red" ,
61+ "SKIPPED" : "yellow" ,
62+ "DISABLED" : "bright_blue" ,
63+ "UNKNOWN" : "white" ,
64+ }
65+ for check_result_type , checks in checks_summary .items ():
66+ if check_result_type in color_map :
67+ table .add_row (check_result_type , str (len (checks )), style = color_map [check_result_type ])
68+ return table
69+
70+
71+ class Dependency (TableBuilder ):
2172 """A class to manage the display of dependency analysis in the console."""
2273
2374 def __init__ (self ) -> None :
@@ -56,13 +107,7 @@ def add_description_table_content(self, key: str, value: str | Status) -> None:
56107 The value associated with the key.
57108 """
58109 self .description_table_content [key ] = value
59- description_table = Table (show_header = False , box = None )
60- description_table .add_column ("Details" , justify = "left" )
61- description_table .add_column ("Value" , justify = "left" )
62- for field , content in self .description_table_content .items ():
63- description_table .add_row (field , content )
64-
65- self .description_table = description_table
110+ self .description_table = self ._make_table (self .description_table_content , ["Details" , "Value" ])
66111
67112 def no_of_checks (self , value : int ) -> None :
68113 """
@@ -91,16 +136,7 @@ def update_checks(self, check_id: str, status: str = "RUNNING") -> None:
91136 The new status of the check, by default "RUNNING"
92137 """
93138 self .checks [check_id ] = status
94-
95- progress_table = Table (show_header = False , box = None )
96- progress_table .add_column ("Status" , justify = "left" )
97- progress_table .add_column ("Check" , justify = "left" )
98-
99- for check_name , check_status in self .checks .items ():
100- if check_status == "RUNNING" :
101- progress_table .add_row (Status ("[bold green]RUNNING[/]" ), check_name )
102- self .progress_table = progress_table
103-
139+ self .progress_table = self ._make_checks_table (self .checks )
104140 if self .task_id is not None and status != "RUNNING" :
105141 self .progress .update (self .task_id , advance = 1 )
106142
@@ -115,39 +151,8 @@ def update_checks_summary(self, checks_summary: dict, total_checks: int) -> None
115151 total_checks : int
116152 The total number of checks.
117153 """
118- failed_checks_table = Table (show_header = False , box = None )
119- failed_checks_table .add_column ("Status" , justify = "left" )
120- failed_checks_table .add_column ("Check ID" , justify = "left" )
121- failed_checks_table .add_column ("Description" , justify = "left" )
122-
123- failed_checks = checks_summary ["FAILED" ]
124- for check in failed_checks :
125- failed_checks_table .add_row (
126- "[bold red]FAILED[/]" ,
127- check .check .check_id ,
128- check .check .check_description ,
129- )
130-
131- self .failed_checks_table = failed_checks_table
132-
133- summary_table = Table (show_header = False , box = None )
134- summary_table .add_column ("Check Result Type" , justify = "left" )
135- summary_table .add_column ("Count" , justify = "left" )
136- summary_table .add_row ("Total Checks" , str (total_checks ), style = "white" )
137-
138- for check_result_type , checks in checks_summary .items ():
139- if check_result_type == "PASSED" :
140- summary_table .add_row ("PASSED" , str (len (checks )), style = "green" )
141- if check_result_type == "FAILED" :
142- summary_table .add_row ("FAILED" , str (len (checks )), style = "red" )
143- if check_result_type == "SKIPPED" :
144- summary_table .add_row ("SKIPPED" , str (len (checks )), style = "yellow" )
145- if check_result_type == "DISABLED" :
146- summary_table .add_row ("DISABLED" , str (len (checks )), style = "bright_blue" )
147- if check_result_type == "UNKNOWN" :
148- summary_table .add_row ("UNKNOWN" , str (len (checks )), style = "white" )
149-
150- self .summary_table = summary_table
154+ self .failed_checks_table = self ._make_failed_checks_table (checks_summary .get ("FAILED" , []))
155+ self .summary_table = self ._make_summary_table (checks_summary , total_checks )
151156
152157 def make_layout (self ) -> list [RenderableType ]:
153158 """
@@ -185,7 +190,7 @@ def make_layout(self) -> list[RenderableType]:
185190 return layout
186191
187192
188- class RichConsoleHandler (RichHandler ):
193+ class RichConsoleHandler (RichHandler , TableBuilder ):
189194 """A rich console handler for logging with rich formatting and live updates."""
190195
191196 def __init__ (self , * args : Any , verbose : bool = False , ** kwargs : Any ) -> None :
@@ -309,18 +314,10 @@ def add_description_table_content(self, key: str, value: str | Status) -> None:
309314 The value associated with the key.
310315 """
311316 if self .if_dependency and self .dependency_analysis_list :
312- dependency = self .dependency_analysis_list [- 1 ]
313- dependency .add_description_table_content (key , value )
317+ self .dependency_analysis_list [- 1 ].add_description_table_content (key , value )
314318 return
315-
316319 self .description_table_content [key ] = value
317- description_table = Table (show_header = False , box = None )
318- description_table .add_column ("Details" , justify = "left" )
319- description_table .add_column ("Value" , justify = "left" )
320- for field , content in self .description_table_content .items ():
321- description_table .add_row (field , content )
322-
323- self .description_table = description_table
320+ self .description_table = self ._make_table (self .description_table_content , ["Details" , "Value" ])
324321
325322 def no_of_checks (self , value : int ) -> None :
326323 """
@@ -357,20 +354,10 @@ def update_checks(self, check_id: str, status: str = "RUNNING") -> None:
357354 The new status of the check, by default "RUNNING"
358355 """
359356 if self .if_dependency and self .dependency_analysis_list :
360- dependency = self .dependency_analysis_list [- 1 ]
361- dependency .update_checks (check_id , status )
357+ self .dependency_analysis_list [- 1 ].update_checks (check_id , status )
362358 return
363359 self .checks [check_id ] = status
364-
365- progress_table = Table (show_header = False , box = None )
366- progress_table .add_column ("Status" , justify = "left" )
367- progress_table .add_column ("Check" , justify = "left" )
368-
369- for check_name , check_status in self .checks .items ():
370- if check_status == "RUNNING" :
371- progress_table .add_row (Status ("[bold green]RUNNING[/]" ), check_name )
372- self .progress_table = progress_table
373-
360+ self .progress_table = self ._make_checks_table (self .checks )
374361 if self .task_id is not None and status != "RUNNING" :
375362 self .progress .update (self .task_id , advance = 1 )
376363
@@ -386,42 +373,10 @@ def update_checks_summary(self, checks_summary: dict, total_checks: int) -> None
386373 The total number of checks.
387374 """
388375 if self .if_dependency and self .dependency_analysis_list :
389- dependency = self .dependency_analysis_list [- 1 ]
390- dependency .update_checks_summary (checks_summary , total_checks )
376+ self .dependency_analysis_list [- 1 ].update_checks_summary (checks_summary , total_checks )
391377 return
392- failed_checks_table = Table (show_header = False , box = None )
393- failed_checks_table .add_column ("Status" , justify = "left" )
394- failed_checks_table .add_column ("Check ID" , justify = "left" )
395- failed_checks_table .add_column ("Description" , justify = "left" )
396-
397- failed_checks = checks_summary ["FAILED" ]
398- for check in failed_checks :
399- failed_checks_table .add_row (
400- "[bold red]FAILED[/]" ,
401- check .check .check_id ,
402- check .check .check_description ,
403- )
404-
405- self .failed_checks_table = failed_checks_table
406-
407- summary_table = Table (show_header = False , box = None )
408- summary_table .add_column ("Check Result Type" , justify = "left" )
409- summary_table .add_column ("Count" , justify = "left" )
410- summary_table .add_row ("Total Checks" , str (total_checks ), style = "white" )
411-
412- for check_result_type , checks in checks_summary .items ():
413- if check_result_type == "PASSED" :
414- summary_table .add_row ("PASSED" , str (len (checks )), style = "green" )
415- if check_result_type == "FAILED" :
416- summary_table .add_row ("FAILED" , str (len (checks )), style = "red" )
417- if check_result_type == "SKIPPED" :
418- summary_table .add_row ("SKIPPED" , str (len (checks )), style = "yellow" )
419- if check_result_type == "DISABLED" :
420- summary_table .add_row ("DISABLED" , str (len (checks )), style = "bright_blue" )
421- if check_result_type == "UNKNOWN" :
422- summary_table .add_row ("UNKNOWN" , str (len (checks )), style = "white" )
423-
424- self .summary_table = summary_table
378+ self .failed_checks_table = self ._make_failed_checks_table (checks_summary .get ("FAILED" , []))
379+ self .summary_table = self ._make_summary_table (checks_summary , total_checks )
425380
426381 def update_report_table (self , report_type : str , report_path : str ) -> None :
427382 """
0 commit comments