@@ -1189,49 +1189,50 @@ class FigureCanvasSVG(FigureCanvasBase):
11891189
11901190 def print_svg (self , filename , * args , ** kwargs ):
11911191 if is_string_like (filename ):
1192- fh_to_close = svgwriter = io .open (filename , 'w' , encoding = 'utf-8' )
1193- elif is_writable_file_like (filename ):
1194- if not isinstance (filename , io .TextIOBase ):
1195- if six .PY3 :
1196- svgwriter = io .TextIOWrapper (filename , 'utf-8' )
1197- else :
1198- svgwriter = codecs .getwriter ('utf-8' )(filename )
1199- else :
1200- svgwriter = filename
1201- fh_to_close = None
1202- else :
1192+ with io .open (filename , 'w' , encoding = 'utf-8' ) as svgwriter :
1193+ return self ._print_svg (filename , svgwriter , ** kwargs )
1194+
1195+ if not is_writable_file_like (filename ):
12031196 raise ValueError ("filename must be a path or a file-like object" )
1204- return self ._print_svg (filename , svgwriter , fh_to_close , ** kwargs )
1197+
1198+ svgwriter = filename
1199+ filename = getattr (svgwriter , 'name' , '' )
1200+ if not isinstance (filename , six .string_types ):
1201+ filename = ''
1202+
1203+ if not isinstance (svgwriter , io .TextIOBase ):
1204+ if six .PY3 :
1205+ svgwriter = io .TextIOWrapper (svgwriter , 'utf-8' )
1206+ else :
1207+ svgwriter = codecs .getwriter ('utf-8' )(svgwriter )
1208+
1209+ return self ._print_svg (filename , svgwriter , ** kwargs )
12051210
12061211 def print_svgz (self , filename , * args , ** kwargs ):
12071212 if is_string_like (filename ):
1208- fh_to_close = gzipwriter = gzip .GzipFile (filename , 'w' )
1209- svgwriter = io .TextIOWrapper (gzipwriter , 'utf-8' )
1213+ options = dict (filename = filename )
12101214 elif is_writable_file_like (filename ):
1211- fh_to_close = gzipwriter = gzip .GzipFile (fileobj = filename , mode = 'w' )
1212- svgwriter = io .TextIOWrapper (gzipwriter , 'utf-8' )
1215+ options = dict (fileobj = filename )
12131216 else :
12141217 raise ValueError ("filename must be a path or a file-like object" )
1215- return self ._print_svg (filename , svgwriter , fh_to_close )
1216-
1217- def _print_svg (self , filename , svgwriter , fh_to_close = None , ** kwargs ):
1218- try :
1219- image_dpi = kwargs .pop ("dpi" , 72 )
1220- self .figure .set_dpi (72.0 )
1221- width , height = self .figure .get_size_inches ()
1222- w , h = width * 72 , height * 72
1223-
1224- _bbox_inches_restore = kwargs .pop ("bbox_inches_restore" , None )
1225- renderer = MixedModeRenderer (
1226- self .figure ,
1227- width , height , image_dpi , RendererSVG (w , h , svgwriter , filename , image_dpi ),
1228- bbox_inches_restore = _bbox_inches_restore )
1229-
1230- self .figure .draw (renderer )
1231- renderer .finalize ()
1232- finally :
1233- if fh_to_close is not None :
1234- svgwriter .close ()
1218+
1219+ with gzip .GzipFile (mode = 'w' , ** options ) as gzipwriter :
1220+ return self .print_svg (gzipwriter )
1221+
1222+ def _print_svg (self , filename , svgwriter , ** kwargs ):
1223+ image_dpi = kwargs .pop ("dpi" , 72 )
1224+ self .figure .set_dpi (72.0 )
1225+ width , height = self .figure .get_size_inches ()
1226+ w , h = width * 72 , height * 72
1227+
1228+ _bbox_inches_restore = kwargs .pop ("bbox_inches_restore" , None )
1229+ renderer = MixedModeRenderer (
1230+ self .figure ,
1231+ width , height , image_dpi , RendererSVG (w , h , svgwriter , filename , image_dpi ),
1232+ bbox_inches_restore = _bbox_inches_restore )
1233+
1234+ self .figure .draw (renderer )
1235+ renderer .finalize ()
12351236
12361237 def get_default_filetype (self ):
12371238 return 'svg'
0 commit comments