@@ -195,13 +195,78 @@ def get_times(f, *args, iter_number=5):
195195 return exec_times , boxing_times
196196
197197
198+ class ResultsDriver :
199+ """Base class. Load and dump results."""
200+
201+ def __init__ (self , file_name , raw_file_name = None ):
202+ self .file_name = file_name
203+ self .raw_file_name = raw_file_name if raw_file_name else f'raw_{ file_name } '
204+
205+
206+ class ExcelResultsDriver (ResultsDriver ):
207+ # openpyxl need to be installed
208+
209+ def dump_grouped_data (self , grouped_data , logger = None ):
210+ try :
211+ with pandas .ExcelWriter (self .file_name ) as writer :
212+ grouped_data .to_excel (writer )
213+ except ModuleNotFoundError as e :
214+ if logger :
215+ msg = 'Could not dump the results to "%s": %s'
216+ logger .warning (msg , self .file_name , e )
217+
218+ def dump_test_results_data (self , test_results_data , logger = None ):
219+ try :
220+ with pandas .ExcelWriter (self .raw_file_name ) as writer :
221+ test_results_data .to_excel (writer , index = False )
222+ except ModuleNotFoundError as e :
223+ if logger :
224+ msg = 'Could not dump raw results to "%s": %s'
225+ logger .warning (msg , self .raw_file_name , e )
226+
227+ def load (self , logger = None ):
228+ raw_perf_results_xlsx = Path (self .raw_file_name )
229+ if raw_perf_results_xlsx .exists ():
230+ with raw_perf_results_xlsx .open ('rb' ) as fd :
231+ # xlrd need to be installed
232+ try :
233+ return pandas .read_excel (fd )
234+ except ModuleNotFoundError as e :
235+ if logger :
236+ msg = 'Could not load previous results from %s: %s'
237+ logger .warning (msg , self .raw_file_name , e )
238+
239+
240+ class CSVResultsDriver (ResultsDriver ):
241+
242+ def dump_grouped_data (self , grouped_data , logger = None ):
243+ grouped_data .to_csv (self .file_name )
244+
245+ def dump_test_results_data (self , test_results_data , logger = None ):
246+ test_results_data .to_csv (self .raw_file_name )
247+
248+ def load (self , logger = None ):
249+ raw_perf_results_csv = Path (self .raw_file_name )
250+ if raw_perf_results_csv .exists ():
251+ with raw_perf_results_csv .open ('rb' ) as fd :
252+ # xlrd need to be installed
253+ try :
254+ return pandas .read_csv (fd )
255+ except ModuleNotFoundError as e :
256+ if logger :
257+ msg = 'Could not load previous results from %s: %s'
258+ logger .warning (msg , self .raw_file_name , e )
259+
260+
198261class TestResults :
199- perf_results_xlsx = 'perf_results.xlsx'
200- raw_perf_results_xlsx = 'raw_perf_results.xlsx'
201262 index = ['name' , 'N' , 'type' , 'size' ]
202263 test_results_data = pandas .DataFrame (index = index )
203264 logger = setup_logging ()
204265
266+ def __init__ (self , drivers = None ):
267+ self .drivers = drivers
268+ self .default_driver = drivers [0 ] if drivers else None
269+
205270 @property
206271 def grouped_data (self ):
207272 """
@@ -272,35 +337,18 @@ def dump(self):
272337 """
273338 Dump performance testing results from global data storage to excel
274339 """
275- # openpyxl need to be installed
276-
277- try :
278- with pandas .ExcelWriter (self .perf_results_xlsx ) as writer :
279- self .grouped_data .to_excel (writer )
280- except ModuleNotFoundError as e :
281- msg = 'Could not dump the results to "%s": %s'
282- self .logger .warning (msg , self .perf_results_xlsx , e )
283-
284- try :
285- with pandas .ExcelWriter (self .raw_perf_results_xlsx ) as writer :
286- self .test_results_data .to_excel (writer , index = False )
287- except ModuleNotFoundError as e :
288- msg = 'Could not dump raw results to "%s": %s'
289- self .logger .warning (msg , self .raw_perf_results_xlsx , e )
340+ for d in self .drivers :
341+ d .dump_grouped_data (self .grouped_data , self .logger )
342+ d .dump_test_results_data (self .test_results_data , self .logger )
290343
291344 def load (self ):
292345 """
293346 Load existing performance testing results from excel to global data storage
294347 """
295- raw_perf_results_xlsx = Path (self .raw_perf_results_xlsx )
296- if raw_perf_results_xlsx .exists ():
297- with raw_perf_results_xlsx .open ('rb' ) as fd :
298- # xlrd need to be installed
299- try :
300- self .test_results_data = pandas .read_excel (fd )
301- except ModuleNotFoundError as e :
302- msg = 'Could not load previous results from %s: %s'
303- self .logger .warning (msg , raw_perf_results_xlsx , e )
348+ if self .default_driver :
349+ test_results_data = self .default_driver .load (self .logger )
350+ if test_results_data is not None :
351+ self .test_results_data = test_results_data
304352
305353
306354class TestResultsStr (TestResults ):
0 commit comments