@@ -1189,49 +1189,50 @@ class FigureCanvasSVG(FigureCanvasBase):
1189
1189
1190
1190
def print_svg (self , filename , * args , ** kwargs ):
1191
1191
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 ):
1203
1196
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 )
1205
1210
1206
1211
def print_svgz (self , filename , * args , ** kwargs ):
1207
1212
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 )
1210
1214
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 )
1213
1216
else :
1214
1217
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 ()
1235
1236
1236
1237
def get_default_filetype (self ):
1237
1238
return 'svg'
0 commit comments