From f36350ebee99b3cc4b284c22c1d9fb6046d81ae8 Mon Sep 17 00:00:00 2001 From: jan Date: Sun, 27 Feb 2022 21:19:29 -0800 Subject: [PATCH] Add some warnings around cache invalidation when mutating items --- masque/library/library.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/masque/library/library.py b/masque/library/library.py index 927eeff..4796b82 100644 --- a/masque/library/library.py +++ b/masque/library/library.py @@ -69,6 +69,8 @@ class Library: def __setitem__(self, key: str, value: PatternGenerator) -> None: self.primary[key] = value if key in self.cache: + logger.warning(f'Replaced library item "{key}" & existing cache entry.' + ' Previously-generated Pattern will *not* be updated!') del self.cache[key] def __delitem__(self, key: str) -> None: @@ -78,6 +80,8 @@ class Library: del self.secondary[key] if key in self.cache: + logger.warning(f'Deleting library item "{key}" & existing cache entry.' + ' Previously-generated Pattern may remain in the wild!') del self.cache[key] def __getitem__(self, key: str) -> 'Pattern': @@ -113,6 +117,13 @@ class Library: self.cache[key2] = pat return pat + def set_secondary(self, key: str, tag: str, value: PatternGenerator) -> None: + self.secondary[(key, tag)] = value + if (key, tag) in self.cache: + logger.warning(f'Replaced library item "{key}" & existing cache entry.' + ' Previously-generated Pattern will *not* be updated!') + del self.cache[(key, tag)] + def resolve_subpatterns(self, pat: 'Pattern', tag: str) -> 'Pattern': logger.debug(f'Resolving subpatterns in {pat.name}') for sp in pat.subpatterns: @@ -293,6 +304,19 @@ class Library: del self.cache[key2] + def clear_cache(self: L) -> L: + """ + Clear the cache of this library. + This is usually used before modifying or deleting cells, e.g. when merging + with another library. + + Returns: + self + """ + self.cache = {} + return self + + r""" # Add a filter for names which aren't added