Mercurial > hgrepos > Python > libs > ConfigMix
changeset 527:08924499db3c
Implement a simple interpolation cache for text types
| author | Franz Glasner <f.glasner@feldmann-mg.com> |
|---|---|
| date | Mon, 20 Dec 2021 13:12:14 +0100 |
| parents | 48990863b905 |
| children | 54a8d020f5d5 |
| files | configmix/config.py |
| diffstat | 1 files changed, 9 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/configmix/config.py Mon Dec 20 12:45:48 2021 +0100 +++ b/configmix/config.py Mon Dec 20 13:12:14 2021 +0100 @@ -335,11 +335,13 @@ # PY2.7 compat: must be set before calling the superclass' __init__ # self.__lookup_cache = {} + self.__interpolation_cache = {} super(Configuration, self).__init__(*args, **kwds) def clear_cache(self): """Clear the internal lookup cache""" self.__lookup_cache.clear() + self.__interpolation_cache.clear() def __getitem__(self, key): """Mapping and list interface that forwards to :meth:`~.getvarl_s` @@ -775,6 +777,9 @@ start = s.find(_STARTTOK, 0) if start < 0: return s + res = self.__interpolation_cache.get(s, _MARKER) + if res is not _MARKER: + return res len_s = len(s) res = [] res_append = res.append @@ -810,6 +815,7 @@ # the whole `s` is just one expansion # if (start == 0) and (rest == len_s): + self.__interpolation_cache[s] = varvalue return varvalue if varvalue is None: pass @@ -818,7 +824,9 @@ # don't re-evaluate because `self.getvar_s()` expands already start = s.find(_STARTTOK, rest) res_append(s[rest:]) - return _EMPTY_STR.join(res) + res = _EMPTY_STR.join(res) + self.__interpolation_cache[s] = res + return res def _apply_filters(self, filters, value): for name in filters:
