Skip to content

Commit

Permalink
Add the page argument on pdc
Browse files Browse the repository at this point in the history
Add the page argument on pdc command.

JIRA: PDC-2087
  • Loading branch information
chcao55 committed Aug 24, 2017
1 parent 93cfd26 commit 0ca058d
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 7 deletions.
21 changes: 15 additions & 6 deletions pdc_client/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ def get_version():
except pkg_resources.DistributionNotFound:
return 'unknown'


__version__ = get_version()


Expand Down Expand Up @@ -97,7 +98,7 @@ class PDCClient(object):
connections. The authentication token is automatically retrieved (if
needed).
"""
def __init__(self, server, token=None, develop=None, ssl_verify=None, page_size=None):
def __init__(self, server, token=None, develop=None, ssl_verify=None, page_size=None, page=None):
"""Create new client instance.
Once the class is instantiated, use it as you would use a regular
Expand All @@ -111,6 +112,7 @@ class to perform requests.
directory to use for validation otherwise
"""
self.page_size = page_size
self.page = page
if not server:
raise TypeError('Server must be specified')
self.session = requests.Session()
Expand Down Expand Up @@ -187,10 +189,10 @@ def obtain_token(self):

def get_paged(self, res, **kwargs):
"""
This call is equivalent to ``res(**kwargs)``, only it retrieves all pages
and returns the results joined into a single iterable. The advantage over
retrieving everything at once is that the result can be consumed
immediately.
This call is equivalent to ``res(**kwargs)``, if there is no self.page
parameter,only it retrieves all pages and returns the results joined into
a single iterable. The advantage over retrieving everything at once is that
the result can be consumed immediately.
:param res: what resource to connect to
:param kwargs: filters to be used
Expand All @@ -200,14 +202,21 @@ def get_paged(self, res, **kwargs):
# Example: Iterate over all active releases
for release in client.get_paged(client['releases']._, active=True):
...
If there is a self.page parameter here, just return that page's data with the
self.page_size.
"""
if self.page_size is not None:
kwargs['page_size'] = self.page_size

if self.page_size <= 0:
# If page_size <= 0, pagination will be disable.
return res(**kwargs)

if self.page is not None:
kwargs['page'] = self.page
allinfo = res(**kwargs)
return allinfo['results']

def worker():
kwargs['page'] = 1
while True:
Expand Down
4 changes: 3 additions & 1 deletion pdc_client/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,8 @@ def setup(self):
help='display output as JSON')
self.parser.add_argument('--page-size', dest='page_size', type=int,
help='change page size in response')
self.parser.add_argument('--page', dest='page', type=int,
help='change page in response')
self.parser.add_argument('--version', action='version',
version='%(prog)s ' + pdc_client.__version__)

Expand All @@ -164,7 +166,7 @@ def run(self, args=None):
ssl_verify = self.args.ca_cert
else:
ssl_verify = None
self.client = pdc_client.PDCClient(self.args.server, page_size=self.args.page_size, ssl_verify=ssl_verify)
self.client = pdc_client.PDCClient(self.args.server, page_size=self.args.page_size, ssl_verify=ssl_verify, page=self.args.page)
try:
self.args.func(self.args)
except beanbag.BeanBagException as ex:
Expand Down
13 changes: 13 additions & 0 deletions pdc_client/test_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,22 @@ class MockAPI(object):
def __init__(self):
self.endpoints = {}
self.calls = {}
self.page = None
self.page_size = None

def get_paged(self, res, **kwargs):
""" """
if self.page_size is not None:
if self.page_size <= 0:
# If page_size <= 0, pagination will be disable.
return res(**kwargs)

if self.page is not None:
kwargs['page'] = self.page
kwargs['page_size'] = self.page_size
allinfo = res(**kwargs)
return allinfo['results']

def worker():
kwargs['page'] = 1
while True:
Expand Down
12 changes: 12 additions & 0 deletions pdc_client/test_helpers_py3.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,21 @@ class MockAPI(object):
def __init__(self):
self.endpoints = {}
self.calls = {}
self.page = None
self.page_size = None

def get_paged(self, res, **kwargs):
""" """
if self.page_size is not None:
if self.page_size <= 0:
# If page_size <= 0, pagination will be disable.
return res(**kwargs)

if self.page is not None:
kwargs['page'] = self.page
kwargs['page_size'] = self.page_size
allinfo = res(**kwargs)
return allinfo['results']
def worker():
kwargs['page'] = 1
while True:
Expand Down
26 changes: 26 additions & 0 deletions tests/product/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,3 +157,29 @@ def test_update(self, api):
}),
],
})

def test_list_by_page(self, api):
api.add_endpoint('products', 'GET', [self.product_detail])
api.page = 1
api.page_size = 1

# compare stdout with data/list-all.txt
with self.expect_output('list-all.txt'):
# run the command
self.runner.run([
'--page', '1',
'--page-size', '1',
'product',
'list',
'--all',
])

# test api calls made by the command
self.assertEqual(api.calls, {
'products': [
('GET', {
'page': 1,
'page_size': 1
}),
],
})

0 comments on commit 0ca058d

Please sign in to comment.