From fb866ba2a103fc484fc4e21494f600285dc5c068 Mon Sep 17 00:00:00 2001 From: Russell Hay Date: Fri, 12 May 2017 09:54:02 -0700 Subject: [PATCH 1/3] Enble always sorting when using pager because queries are not currently deterministic --- tableauserverclient/server/pager.py | 7 +++++++ test/test_pager.py | 8 ++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tableauserverclient/server/pager.py b/tableauserverclient/server/pager.py index eaad398af..6097d6aa1 100644 --- a/tableauserverclient/server/pager.py +++ b/tableauserverclient/server/pager.py @@ -1,4 +1,5 @@ from . import RequestOptions +from . import Sort class Pager(object): @@ -16,6 +17,12 @@ def __init__(self, endpoint, request_opts=None): self._count = ((self._options.pagenumber - 1) * self._options.pagesize) else: self._count = 0 + self._options = RequestOptions() + + # Pager assumes deterministic order but solr doesn't guarantee sort order unless specified + if len(self._options.sort) == 0: + self._options.sort.add(Sort(RequestOptions.Field.Name, RequestOptions.Direction.Asc)) + def __iter__(self): # Fetch the first page diff --git a/test/test_pager.py b/test/test_pager.py index e3cec1ce8..5a6e9a4ed 100644 --- a/test/test_pager.py +++ b/test/test_pager.py @@ -55,10 +55,10 @@ def test_pager_with_options(self): page_3 = f.read().decode('utf-8') with requests_mock.mock() as m: # Register Pager with some pages - m.get(self.baseurl + "?pageNumber=1&pageSize=1", text=page_1) - m.get(self.baseurl + "?pageNumber=2&pageSize=1", text=page_2) - m.get(self.baseurl + "?pageNumber=3&pageSize=1", text=page_3) - m.get(self.baseurl + "?pageNumber=1&pageSize=3", text=page_1) + m.get(self.baseurl + "?pageNumber=1&pageSize=1&sort=name:asc", complete_qs=True, text=page_1) + m.get(self.baseurl + "?pageNumber=2&pageSize=1&sort=name:asc", complete_qs=True, text=page_2) + m.get(self.baseurl + "?pageNumber=3&pageSize=1&sort=name:asc", complete_qs=True, text=page_3) + m.get(self.baseurl + "?pageNumber=1&pageSize=3&sort=name:asc", complete_qs=True, text=page_1) # Starting on page 2 should get 2 out of 3 opts = TSC.RequestOptions(2, 1) From 9a62907ed92e250ee14062139d244dbe28034f29 Mon Sep 17 00:00:00 2001 From: Russell Hay Date: Fri, 12 May 2017 10:04:45 -0700 Subject: [PATCH 2/3] I forgot to format the files --- tableauserverclient/server/pager.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tableauserverclient/server/pager.py b/tableauserverclient/server/pager.py index 6097d6aa1..73e36427e 100644 --- a/tableauserverclient/server/pager.py +++ b/tableauserverclient/server/pager.py @@ -23,7 +23,6 @@ def __init__(self, endpoint, request_opts=None): if len(self._options.sort) == 0: self._options.sort.add(Sort(RequestOptions.Field.Name, RequestOptions.Direction.Asc)) - def __iter__(self): # Fetch the first page current_item_list, last_pagination_item = self._endpoint(self._options) From 13f0cd9806a8b55fa888fb11d276dd1517e9672d Mon Sep 17 00:00:00 2001 From: Russell Hay Date: Fri, 12 May 2017 10:53:12 -0700 Subject: [PATCH 3/3] Fixing tyler's nit --- tableauserverclient/server/pager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tableauserverclient/server/pager.py b/tableauserverclient/server/pager.py index 73e36427e..1a6bfe17c 100644 --- a/tableauserverclient/server/pager.py +++ b/tableauserverclient/server/pager.py @@ -20,7 +20,7 @@ def __init__(self, endpoint, request_opts=None): self._options = RequestOptions() # Pager assumes deterministic order but solr doesn't guarantee sort order unless specified - if len(self._options.sort) == 0: + if not self._options.sort: self._options.sort.add(Sort(RequestOptions.Field.Name, RequestOptions.Direction.Asc)) def __iter__(self):