8000 fix: drop the page limit calculation and correct the page limit stop … · dialex-com/twilio-python@39b8e2f · GitHub
[go: up one dir, main page]

Skip to content

Commit 39b8e2f

Browse files
author
childish-sambino
authored
fix: drop the page limit calculation and correct the page limit stop condition (twilio#523)
Dropping the page limit calculation since it's no longer used and doesn't make sense to be calculated on a record limit. Also correct the page limit stop logic (with added tests) where an extra page was being queried.
1 parent 3907610 commit 39b8e2f

File tree

2 files changed

+72
-12
lines changed

2 files changed

+72
-12
lines changed

tests/unit/base/test_version.py

Lines changed: 66 additions & 0 deletions
< 8000 /div>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
from tests import IntegrationTestCase
2+
from tests.holodeck import Request
3+
from twilio.base.page import Page
4+
from twilio.http.response import Response
5+
6+
7+
class TestPage(Page):
8+
def __init__(self, version, response, *_args, **_kwargs):
9+
super(TestPage, self).__init__(version, response)
10+
11+
def get_instance(self, payload):
12+
return payload
13+
14+
15+
class VersionTestCase(IntegrationTestCase):
16+
def setUp(self):
17+
super(VersionTestCase, self).setUp()
18+
19+
self.holodeck.mock(Response(
20+
200,
21+
'''
22+
{
23+
"next_page_uri": "/2010-04-01/Accounts/AC123/Messages.json?Page=1",
24+
"messages": [{"body": "payload0"}, {"body": "payload1"}]
25+
}
26+
'''
27+
), Request(url='https://api.twilio.com/2010-04-01/Accounts/AC123/Messages.json'))
28+
29+
self.holodeck.mock(Response(
30+
200,
31+
'''
32+
{
33+
"next_page_uri": "/2010-04-01/Accounts/AC123/Messages.json?Page=2",
34+
"messages": [{"body": "payload2"}, {"body": "payload3"}]
35+
}
36+
'''
37+
), Request(url='https://api.twilio.com/2010-04-01/Accounts/AC123/Messages.json?Page=1'))
38+
39+
self.holodeck.mock(Response(
40+
200,
41+
'''
42+
{
43+
"next_page_uri": null,
44+
"messages": [{"body": "payload4"}]
45+
}
46+
'''
47+
), Request(url='https://api.twilio.com/2010-04-01/Accounts/AC123/Messages.json?Page=2'))
48+
49+
self.version = self.client.api.v2010
50+
self.response = self.version.page(method='GET', uri='/Accounts/AC123/Messages.json')
51+
self.page = TestPage(self.version, self.response)
52+
53+
def test_stream(self):
54+
messages = list(self.version.stream(self.page))
55+
56+
self.assertEqual(len(messages), 5)
57+
58+
def test_stream_limit(self):
59+
messages = list(self.version.stream(self.page, limit=3))
60+
61+
self.assertEqual(len(messages), 3)
62+
63+
def test_stream_page_limit(self):
64+
messages = list(self.version.stream(self.page, page_limit=1))
65+
66+
self.assertEqual(len(messages), 2)

twilio/base/version.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ def exception(cls, method, uri, response, message):
6161
code = error_payload.get('code', response.status_code)
6262
return TwilioRestException(response.status_code, uri, message, code, method, details)
6363
except Exception:
64-
return TwilioRestException(response.status_code, uri, message, response.status_code, method)
64+
return TwilioRestException(response.status_code, uri, message, response.status_code,
65+
method)
6566

6667
def fetch(self, method, uri, params=None, data=None, headers=None, auth=None, timeout=None,
6768
allow_redirects=False):
@@ -135,19 +136,12 @@ def read_limits(self, limit=None, page_size=None):
135136
:param int page_size: Max page size.
136137
:return dict: A dictionary of paging limits.
137138
"""
138-
page_limit = values.unset
139-
140-
if limit is not None:
141-
142-
if page_size is None:
143-
page_size = limit
144-
145-
page_limit = int(ceil(limit / float(page_size)))
139+
if limit is not None and page_size is None:
140+
page_size = limit
146141

147142
return {
148143
'limit': limit or values.unset,
149144
'page_size': page_size or values.unset,
150-
'page_limit': page_limit,
151145
}
152146

153147
def page(self, method, uri, params=None, data=None, headers=None, auth=None, timeout=None,
@@ -172,7 +166,7 @@ def stream(self, page, limit=None, page_limit=None):
172166
173167
:param Page page: The page to stream.
174168
:param int limit: The max number of records to read.
175-
:param int page_imit: The max number of pages to read.
169+
:param int page_limit: The max number of pages to read.
176170
"""
177171
current_record = 1
178172
current_page = 1
@@ -184,11 +178,11 @@ def stream(self, page, limit=None, page_limit=None):
184178
if limit and limit is not values.unset and limit < current_record:
185179
return
186180

181+
current_page += 1
187182
if page_limit and page_limit is not values.unset and page_limit < current_page:
188183
return
189184

190185
page = page.next_page()
191-
current_page += 1
192186

193187
def create(self, method, uri, params=None, data=None, headers=None, auth=None, timeout=None,
194188
allow_redirects=False):

0 commit comments

Comments
 (0)
0