[formatter] allow for numeric list and string indices

This commit is contained in:
Mike Fährmann
2020-02-15 18:31:21 +01:00
parent 7d1da614d9
commit 219c4cc78c
2 changed files with 15 additions and 8 deletions

View File

@@ -512,16 +512,19 @@ class Formatter():
for is_attr, key in rest:
if is_attr:
func = operator.attrgetter
elif ":" in key:
func = operator.itemgetter
start, _, stop = key.partition(":")
stop, _, step = stop.partition(":")
start = int(start) if start else None
stop = int(stop) if stop else None
step = int(step) if step else None
key = slice(start, stop, step)
else:
func = operator.itemgetter
try:
if ":" in key:
start, _, stop = key.partition(":")
stop, _, step = stop.partition(":")
start = int(start) if start else None
stop = int(stop) if stop else None
step = int(step) if step else None
key = slice(start, stop, step)
except TypeError:
pass # key is an integer
funcs.append(func(key))
return first, funcs

View File

@@ -340,6 +340,10 @@ class TestFormatter(unittest.TestCase):
self._run_test("{d[a]|d[b]|d[c]}", "foo")
self._run_test("{d[z]|d[y]|d[x]}", "None")
def test_indexing(self):
self._run_test("{l[0]}" , "a")
self._run_test("{a[6]}" , "w")
def test_slicing(self):
v = self.kwdict["a"]
self._run_test("{a[1:10]}" , v[1:10])