10000 Refactor FigureCanvasSVG · rmlopes/matplotlib@682a331 · GitHub
[go: up one dir, main page]

Skip to content

Commit 682a331

Browse files
KojoleyQuLogic
authored andcommitted
Refactor FigureCanvasSVG
1 parent 519b050 commit 682a331

File tree

1 file changed

+37
-36
lines changed

1 file changed

+37
-36
lines changed

lib/matplotlib/backends/backend_svg.py

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)
0