changeset 349:83f76a41cf7c

Implement a special filter named "None" that suppresses "KeyErrors" from interpolation lookups and returns a Python "None" instead
author Franz Glasner <fzglas.hg@dom66.de>
date Thu, 24 Jun 2021 09:33:22 +0200
parents 396d8d9aaead
children 9d729c479dc2
files configmix/config.py configmix/variables.py
diffstat 2 files changed, 17 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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, ),
--- 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)