[formatter] implement field name alternatives (#525)
The format string '{a|b|c}' will now try to use the value from 'a' and
fall back to 'b' and 'c' if accessing a field raises an exception or
if its value is None.
This commit is contained in:
@@ -259,6 +259,7 @@ class TestFormatter(unittest.TestCase):
|
||||
kwdict = {
|
||||
"a": "hElLo wOrLd",
|
||||
"b": "äöü",
|
||||
"d": {"a": "foo", "b": 0, "c": None},
|
||||
"l": ["a", "b", "c"],
|
||||
"n": None,
|
||||
"u": "%27%3C%20/%20%3E%27",
|
||||
@@ -323,6 +324,22 @@ class TestFormatter(unittest.TestCase):
|
||||
self._run_test("{missing[key]}", replacement, default)
|
||||
self._run_test("{missing:?a//}", "a" + default, default)
|
||||
|
||||
def test_alternative(self):
|
||||
self._run_test("{a|z}" , "hElLo wOrLd")
|
||||
self._run_test("{z|a}" , "hElLo wOrLd")
|
||||
self._run_test("{z|y|a}" , "hElLo wOrLd")
|
||||
self._run_test("{z|y|x|a}", "hElLo wOrLd")
|
||||
self._run_test("{z|n|a|y}", "hElLo wOrLd")
|
||||
|
||||
self._run_test("{z|a!C}" , "Hello World")
|
||||
self._run_test("{z|a:Rh/C/}" , "CElLo wOrLd")
|
||||
self._run_test("{z|a!C:RH/C/}", "Cello World")
|
||||
self._run_test("{z|y|x:?</>/}", "")
|
||||
|
||||
self._run_test("{d[c]|d[b]|d[a]}", "0")
|
||||
self._run_test("{d[a]|d[b]|d[c]}", "foo")
|
||||
self._run_test("{d[z]|d[y]|d[x]}", "None")
|
||||
|
||||
def test_slicing(self):
|
||||
v = self.kwdict["a"]
|
||||
self._run_test("{a[1:10]}" , v[1:10])
|
||||
|
||||
Reference in New Issue
Block a user