# HG changeset patch # User Franz Glasner # Date 1624520002 -7200 # Node ID 83f76a41cf7cd08b361669c9ec64dd3e0986e585 # Parent 396d8d9aaead7cf6e9a7f3636913183a81ea2658 Implement a special filter named "None" that suppresses "KeyErrors" from interpolation lookups and returns a Python "None" instead diff -r 396d8d9aaead -r 83f76a41cf7c configmix/config.py --- a/configmix/config.py Wed Jun 23 15:00:37 2021 +0200 +++ b/configmix/config.py Thu Jun 24 09:33:22 2021 +0200 @@ -345,7 +345,12 @@ return s varname, filters = self._split_filters(s[start+2:end]) try: - varvalue = self._apply_filters(filters, self.getvar_s(varname)) + if "None" in filters: + varvalue = self._apply_filters( + filters, self.getvar_s(varname, default=None)) + else: + varvalue = self._apply_filters( + filters, self.getvar_s(varname)) except KeyError: warnings.warn("Cannot expand variable %r in string " "%r" % (varname, s, ), diff -r 396d8d9aaead -r 83f76a41cf7c configmix/variables.py --- a/configmix/variables.py Wed Jun 23 15:00:37 2021 +0200 +++ b/configmix/variables.py Thu Jun 24 09:33:22 2021 +0200 @@ -244,6 +244,17 @@ return v.upper() +@filter("None") +def None_filter_impl(config, v): + """Identity. + + The `None` filter is just a marker to not throw `KeyError` but return + `None`. + + """ + return v + + # Register the default namespaces add_varns("ENV", _envlookup) add_varns("OS", _oslookup)