From cce476c37aa75390c654e07840222e8c31c6d808 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 29 Oct 2017 09:47:53 +0100 Subject: [PATCH] using id() as a cache key was a very bad idea --- src/c3nav/mapdata/utils/svg.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/c3nav/mapdata/utils/svg.py b/src/c3nav/mapdata/utils/svg.py index 66d22f17..ea3d4759 100644 --- a/src/c3nav/mapdata/utils/svg.py +++ b/src/c3nav/mapdata/utils/svg.py @@ -162,13 +162,15 @@ class SVGImage: return '' return ''.join(self._geometry_to_svg(g) for g in geoms) - def _create_geometry(self, geometry, attribs='', tag='g'): + def _create_geometry(self, geometry, attribs='', tag='g', cache_key=None): # convert a shapely geometry into an svg xml element - cache_key = (id(geometry), attribs, tag) - result = self._create_geometry_cache.get(cache_key, None) + result = None + if cache_key is not None: + result = self._create_geometry_cache.get(cache_key, None) if result is None: result = self._geometry_to_svg(geometry) - self._create_geometry_cache[cache_key] = result + if cache_key is not None: + self._create_geometry_cache[cache_key] = result return '<'+tag+attribs+'>'+result+'' def register_clip_path(self, geometry): @@ -221,7 +223,7 @@ class SVGImage: def add_geometry(self, geometry=None, fill_color=None, fill_opacity=None, opacity=None, filter=None, stroke_px=0.0, stroke_width=0.0, stroke_color=None, stroke_opacity=None, stroke_linejoin=None, - clip_path=None, altitude=None, elevation=None): + clip_path=None, altitude=None, elevation=None, shape_cache_key=None): # draw a shapely geometry with a given style # if altitude is set, the geometry will get a calculated shadow relative to the other geometries # if elevation is set, the geometry will get a shadow with exactly this elevation @@ -274,7 +276,7 @@ class SVGImage: self.clip_altitudes(geometry, altitude) - element = self._create_geometry(geometry, attribs) + element = self._create_geometry(geometry, attribs, cache_key=shape_cache_key) else: element = ''