[formatter] allow for numeric list and string indices
This commit is contained in:
@@ -512,16 +512,19 @@ class Formatter():
|
|||||||
for is_attr, key in rest:
|
for is_attr, key in rest:
|
||||||
if is_attr:
|
if is_attr:
|
||||||
func = operator.attrgetter
|
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:
|
else:
|
||||||
func = operator.itemgetter
|
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))
|
funcs.append(func(key))
|
||||||
|
|
||||||
return first, funcs
|
return first, funcs
|
||||||
|
|||||||
@@ -340,6 +340,10 @@ class TestFormatter(unittest.TestCase):
|
|||||||
self._run_test("{d[a]|d[b]|d[c]}", "foo")
|
self._run_test("{d[a]|d[b]|d[c]}", "foo")
|
||||||
self._run_test("{d[z]|d[y]|d[x]}", "None")
|
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):
|
def test_slicing(self):
|
||||||
v = self.kwdict["a"]
|
v = self.kwdict["a"]
|
||||||
self._run_test("{a[1:10]}" , v[1:10])
|
self._run_test("{a[1:10]}" , v[1:10])
|
||||||
|
|||||||
Reference in New Issue
Block a user