From 5c7ca17d0240a629191d428d105317bcbe83b121 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Tue, 17 Nov 2020 16:15:50 +0100 Subject: [PATCH] Move svg basename detection down to RendererSVG. This means one fewer argument to track down the call stack (avoiding passing it from print_svg to RendererSVG). Wrapping the file object in a TextIOWrapper (as done in print_svg) forwards the `.name` to the wrapper, so we're fine there. --- lib/matplotlib/backends/backend_svg.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/matplotlib/backends/backend_svg.py b/lib/matplotlib/backends/backend_svg.py index f0dfc308e58d..5cdeebd7fb1f 100644 --- a/lib/matplotlib/backends/backend_svg.py +++ b/lib/matplotlib/backends/backend_svg.py @@ -280,8 +280,13 @@ def __init__(self, width, height, svgwriter, basename=None, image_dpi=72, self.writer = XMLWriter(svgwriter) self.image_dpi = image_dpi # actual dpi at which we rasterize stuff - self._groupd = {} + if basename is None: + basename = getattr(svgwriter, "name", "") + if not isinstance(basename, str): + basename = "" self.basename = basename + + self._groupd = {} self._image_counter = itertools.count() self._clipd = {} self._markers = {} @@ -1311,9 +1316,6 @@ def print_svg(self, filename, *args, **kwargs): __ DC_ """ with cbook.open_file_cm(filename, "w", encoding="utf-8") as fh: - filename = getattr(fh, 'name', '') - if not isinstance(filename, str): - filename = '' if not cbook.file_requires_unicode(fh): fh = codecs.getwriter('utf-8')(fh) self._print_svg(filename, fh, **kwargs) @@ -1336,7 +1338,7 @@ def _print_svg(self, filename, fh, *, dpi=None, bbox_inches_restore=None, renderer = MixedModeRenderer( self.figure, width, height, dpi, - RendererSVG(w, h, fh, filename, dpi, metadata=metadata), + RendererSVG(w, h, fh, image_dpi=dpi, metadata=metadata), bbox_inches_restore=bbox_inches_restore) self.figure.draw(renderer)