Skip to content

Commit afd30e4

Browse files
Jordan WoodsJordan Woods
authored andcommitted
Properly support negative steps
1 parent b0e9255 commit afd30e4

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

tableauserverclient/server/query.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ def __getitem__(self, k):
4343
start += self.total_available
4444
if stop < 0:
4545
stop += self.total_available
46+
if start < stop and step < 0:
47+
# Since slicing is left inclusive and right exclusive, shift
48+
# the start and stop values by 1 to keep that behavior
49+
start, stop = stop - 1, start - 1
50+
slice_stop = stop if stop > 0 else None
51+
k = slice(start, slice_stop, step)
4652

4753
k_range = range(start, stop, step)
4854
if all(i in page_range for i in k_range):

test/test_request_option.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,13 @@ def test_slicing_queryset(self):
246246
self.assertEqual(3, len(all_views[2:5]))
247247
self.assertEqual(3, len(all_views[-3:]))
248248
self.assertEqual(3, len(all_views[-6:-3]))
249+
self.assertEqual(3, len(all_views[3:6:-1]))
250+
self.assertEqual(3, len(all_views[6:3:-1]))
251+
self.assertEqual(10, len(all_views[::-1]))
252+
self.assertEqual(
253+
all_views[3:6],
254+
list(reversed(all_views[3:6:-1]))
255+
)
249256

250257
self.assertEqual(all_views[-3].id, "2df55de2-3a2d-4e34-b515-6d4e70b830e9")
251258

0 commit comments

Comments
 (0)