1616from cycode .cli .printers .text_printer import TextPrinter
1717
1818if TYPE_CHECKING :
19+ from pathlib import Path
20+
1921 from cycode .cli .models import LocalScanResult
2022 from cycode .cli .printers .tables .table_printer_base import PrinterBase
2123
@@ -43,17 +45,9 @@ def __init__(
4345 self .console_err = console_err_override or console_err
4446 self .output_type = output_type_override or self .ctx .obj .get ('output' )
4547
46- self .console_record = None
47-
48- self .export_type = self .ctx .obj .get ('export_type' )
49- self .export_file = self .ctx .obj .get ('export_file' )
50- if console_override is None and self .export_type and self .export_file :
51- self .console_record = ConsolePrinter (
52- ctx ,
53- console_override = Console (record = True , file = io .StringIO ()),
54- console_err_override = Console (stderr = True , record = True , file = io .StringIO ()),
55- output_type_override = 'json' if self .export_type == 'json' else self .output_type ,
56- )
48+ self .export_type : Optional [str ] = None
49+ self .export_file : Optional [Path ] = None
50+ self .console_record : Optional [ConsolePrinter ] = None
5751
5852 @property
5953 def scan_type (self ) -> str :
@@ -76,6 +70,18 @@ def printer(self) -> 'PrinterBase':
7670
7771 return printer_class (self .ctx , self .console , self .console_err )
7872
73+ def enable_recording (self , export_type : str , export_file : 'Path' ) -> None :
74+ if self .console_record is None :
75+ self .export_file = export_file
76+ self .export_type = export_type
77+
78+ self .console_record = ConsolePrinter (
79+ self .ctx ,
80+ console_override = Console (record = True , file = io .StringIO ()),
81+ console_err_override = Console (stderr = True , record = True , file = io .StringIO ()),
82+ output_type_override = 'json' if self .export_type == 'json' else self .output_type ,
83+ )
84+
7985 def print_scan_results (
8086 self ,
8187 local_scan_results : list ['LocalScanResult' ],
@@ -106,16 +112,17 @@ def export(self) -> None:
106112 if self .console_record is None :
107113 raise CycodeError ('Console recording was not enabled. Cannot export.' )
108114
109- if not self .export_file .suffix :
115+ export_file = self .export_file
116+ if not export_file .suffix :
110117 # resolve file extension based on the export type if not provided in the file name
111- self . export_file = self . export_file .with_suffix (f'.{ self .export_type .lower ()} ' )
118+ export_file = export_file .with_suffix (f'.{ self .export_type .lower ()} ' )
112119
113120 if self .export_type is ExportTypeOption .HTML :
114- self .console_record .console .save_html (self . export_file )
121+ self .console_record .console .save_html (export_file )
115122 elif self .export_type is ExportTypeOption .SVG :
116- self .console_record .console .save_svg (self . export_file , title = consts .APP_NAME )
123+ self .console_record .console .save_svg (export_file , title = consts .APP_NAME )
117124 elif self .export_type is ExportTypeOption .JSON :
118- with open (self . export_file , 'w' , encoding = 'UTF-8' ) as f :
125+ with open (export_file , 'w' , encoding = 'UTF-8' ) as f :
119126 self .console_record .console .file .seek (0 )
120127 f .write (self .console_record .console .file .read ())
121128 else :
0 commit comments