@@ -14,10 +14,50 @@ def parse() -> argparse.ArgumentParser:
1414 parser_add_device (parser )
1515 return parser
1616
17- def show (settings : Box , args : argparse .Namespace ) -> None :
18- heading = ['device' ,'description' ]
17+ def print_result_table (result : Box , settings : Box ) -> None :
18+
19+ device_rows = []
20+ daemon_rows = []
21+ caveat_rows = []
22+ support_level = data .get_empty_box ()
23+
24+ heading = ['device' ,'description' ,'support level' ]
25+ for d_name in sorted (list (result )):
26+ d_data = result [d_name ]
27+ support_text = d_data .get ('support.level' ,'✅' ) + (' ❗' if d_data .get ('support.caveats' ) else '' )
28+ row = [ d_name , d_data .description , support_text .center (len (heading [2 ])) ]
29+ d_support = d_data .get ('support.level' ,None )
30+ if d_support :
31+ support_level [d_support ] = True
32+ d_caveat = d_data .get ('support.caveats' ,[])
33+ if d_caveat :
34+ caveat_rows .extend (d_caveat if isinstance (d_caveat ,list ) else [ d_caveat ])
35+
36+ if d_data .get ('daemon' ,False ):
37+ daemon_rows .append (row )
38+ else :
39+ device_rows .append (row )
40+
41+ if device_rows :
42+ strings .print_colored_text ('Virtual network devices supported by netlab\n \n ' ,color = 'bold' )
43+ strings .print_table (heading ,device_rows ,inter_row_line = False )
1944
20- rows = []
45+ if daemon_rows :
46+ strings .print_colored_text ('\n Networking daemons supported by netlab\n \n ' ,color = 'bold' )
47+ heading [1 ] = 'daemon'
48+ strings .print_table (heading ,daemon_rows ,inter_row_line = False )
49+
50+ if support_level :
51+ strings .print_colored_text ('\n Legend: support levels\n \n ' ,color = 'bold' )
52+ for sl in sorted (list (support_level )):
53+ print (strings .wrap_error_message (f'* { sl } : { settings .hints .support [sl ]} ' ,indent = 2 ))
54+
55+ if caveat_rows :
56+ strings .print_colored_text ('\n Caveats:\n \n ' ,color = 'bold' )
57+ for cv in caveat_rows :
58+ print (strings .wrap_error_message (f'* { cv } ' ,indent = 2 ))
59+
60+ def show (settings : Box , args : argparse .Namespace ) -> None :
2161 result = data .get_empty_box ()
2262 for device in sorted (settings .devices .keys ()):
2363 dev_data = settings .devices [device ]
@@ -27,24 +67,17 @@ def show(settings: Box, args: argparse.Namespace) -> None:
2767 if device != args .device and args .device != '*' :
2868 continue
2969
30- row = [ device ,dev_data .description ]
70+ dev_summary = data .get_box ({ 'description' : dev_data .description })
71+ if 'support' in dev_data :
72+ dev_summary .support = dev_data .support
3173 if dev_data .daemon :
32- row [1 ] = {
33- 'daemon' : True ,
34- 'description' : dev_data .description ,
35- 'parent' : dev_data .daemon_parent
36- }
37- rows .append (row )
38- result [device ] = row [1 ]
74+ dev_summary .daemon = True
75+ dev_summary .parent = dev_data .daemon_parent
76+
77+ result [device ] = dev_summary
3978
4079 if args .format == 'table' :
41- print ('Virtual network devices supported by netlab' )
42- print ("" )
43- strings .print_table (heading ,[ r for r in rows if isinstance (r [1 ],str ) ],inter_row_line = False )
44- daemons = [ [ r [0 ],r [1 ]['description' ]] for r in rows if isinstance (r [1 ],dict ) and r [1 ]['daemon' ] ]
45- if daemons :
46- print ('\n Networking daemons supported by netlab\n ' )
47- strings .print_table (['daemon' ,'description' ],daemons ,inter_row_line = False )
80+ print_result_table (result ,settings )
4881
4982 elif args .format in ['text' ,'yaml' ]:
5083 print (strings .get_yaml_string (result ))
0 commit comments