11import os
2+ import logging
23
34import pkg_resources
45import pickle
2122from Orange .canvas .application .canvasmain import CanvasMainWindow
2223from Orange .canvas .gui .utils import message_critical
2324
25+ log = logging .getLogger (__name__ )
2426
2527class Column (IntEnum ):
2628 item = 0
@@ -310,8 +312,11 @@ def save_report(self):
310312 self .save (filename )
311313 else :
312314 def save_html (contents ):
313- with open (filename , "w" , encoding = "utf-8" ) as f :
314- f .write (contents )
315+ try :
316+ with open (filename , "w" , encoding = "utf-8" ) as f :
317+ f .write (contents )
318+ except PermissionError :
319+ self .permission_error (filename )
315320
316321 save_html (self .report_view .html ())
317322 self .report_changed = False
@@ -337,14 +342,15 @@ def open_report(self):
337342
338343 try :
339344 report = self .load (filename )
340- except (IOError , AttributeError ) as e :
345+ except (IOError , AttributeError , pickle . UnpicklingError ) as e :
341346 message_critical (
342347 self .tr ("Could not load an Orange Report file" ),
343348 title = self .tr ("Error" ),
344- informative_text = self .tr ("An unexpected error occurred "
345- "while loading '%s '." ) % filename ,
349+ informative_text = self .tr ("Error occurred "
350+ "while loading '{} '." ). format ( filename ) ,
346351 exc_info = True ,
347352 parent = self )
353+ log .error (str (e ), exc_info = True )
348354 return
349355 self .set_instance (report )
350356 self = report
@@ -363,8 +369,11 @@ def save(self, filename):
363369 attributes = attributes ,
364370 items = items )
365371
366- with open (filename , 'wb' ) as f :
367- pickle .dump (report , f )
372+ try :
373+ with open (filename , 'wb' ) as f :
374+ pickle .dump (report , f )
375+ except PermissionError :
376+ self .permission_error (filename )
368377
369378 @classmethod
370379 def load (cls , filename ):
@@ -383,6 +392,16 @@ def load(cls, filename):
383392 )
384393 return self
385394
395+ def permission_error (self , filename ):
396+ message_critical (
397+ self .tr ("Permission error when trying to write report." ),
398+ title = self .tr ("Error" ),
399+ informative_text = self .tr ("Permission error occurred "
400+ "while saving '{}'." ).format (filename ),
401+ exc_info = True ,
402+ parent = self )
403+ log .error ("PermissionError when trying to write report." , exc_info = True )
404+
386405 def is_empty (self ):
387406 return not self .table_model .rowCount ()
388407
0 commit comments