comparison configmix/config.py @ 528:54a8d020f5d5

Apply None and Empty interpolation filters only on KeyErrors
author Franz Glasner <f.glasner@feldmann-mg.com>
date Mon, 20 Dec 2021 13:39:11 +0100
parents 08924499db3c
children 9976ff66c439
comparison
equal deleted inserted replaced
527:08924499db3c 528:54a8d020f5d5
660 def _split_filters(self, s): 660 def _split_filters(self, s):
661 name, sep, filters = s.partition(_FILTER_SEPARATOR) 661 name, sep, filters = s.partition(_FILTER_SEPARATOR)
662 if sep: 662 if sep:
663 filters = filters.strip() 663 filters = filters.strip()
664 if filters: 664 if filters:
665 filters = filters.split(_FILTER_SEPARATOR)
666 return (name.rstrip(), 665 return (name.rstrip(),
667 filters, 666 filters.split(_FILTER_SEPARATOR))
668 NONE_FILTER in filters, 667 else:
669 EMPTY_FILTER in filters) 668 return (name.rstrip(), [])
670 else: 669 else:
671 return (name.rstrip(), [], False, False) 670 return (name, [])
672 else:
673 return (name, [], False, False)
674 671
675 def _lookupvar(self, *path): 672 def _lookupvar(self, *path):
676 """Lookup a variable within a hierarchy. 673 """Lookup a variable within a hierarchy.
677 674
678 :raise KeyError: An unexisting `path` raises a `KeyError` 675 :raise KeyError: An unexisting `path` raises a `KeyError`
788 res_append(s[rest:start]) 785 res_append(s[rest:start])
789 end = s.find(_ENDTOK, start) 786 end = s.find(_ENDTOK, start)
790 if end < 0: 787 if end < 0:
791 rest = start 788 rest = start
792 break 789 break
793 varname, filters, none_filter, empty_filter = self._split_filters( 790 varname, filters = self._split_filters(
794 s[start+2:end]) 791 s[start+2:end])
795 try: 792 try:
796 if none_filter: 793 varvalue = self.getvar_s(varname)
797 varvalue = self._apply_filters( 794 except KeyError:
798 filters, self.getvar_s(varname, default=None)) 795 if NONE_FILTER in filters:
799 elif empty_filter: 796 varvalue = None
800 varvalue = self._apply_filters( 797 elif EMPTY_FILTER in filters:
801 filters, self.getvar_s(varname, 798 varvalue = _EMPTY_STR
802 default=_EMPTY_STR))
803 else: 799 else:
804 varvalue = self._apply_filters( 800 warnings.warn("Cannot expand variable %r in string "
805 filters, self.getvar_s(varname)) 801 "%r" % (varname, s, ),
806 except KeyError: 802 UserWarning,
807 warnings.warn("Cannot expand variable %r in string " 803 stacklevel=1)
808 "%r" % (varname, s, ), 804 raise
809 UserWarning, 805 varvalue = self._apply_filters(filters, varvalue)
810 stacklevel=1)
811 raise
812 rest = end + 2 806 rest = end + 2
813 # 807 #
814 # Dont apply and type conversions to the variable value if 808 # Dont apply and type conversions to the variable value if
815 # the whole `s` is just one expansion 809 # the whole `s` is just one expansion
816 # 810 #