3
3
4
4
5
5
class Page (object ):
6
+ """
7
+ Represents a page of records in a collection.
8
+
9
+ A `Page` lets you iterate over its records and fetch the next and previous
10
+ pages in the collection.
11
+ """
6
12
META_KEYS = {
7
13
'end' ,
8
14
'first_page_uri' ,
@@ -26,22 +32,40 @@ def __init__(self, version, response):
26
32
self ._records = iter (self .load_page (payload ))
27
33
28
34
def __iter__ (self ):
35
+ """
36
+ A `Page` is a valid iterator.
37
+ """
29
38
return self
30
39
31
40
def __next__ (self ):
32
41
return self .next ()
33
42
34
43
def next (self ):
44
+ """
45
+ Returns the next record in the `Page`.
46
+ """
35
47
return self .get_instance (next (self ._records ))
36
48
37
49
@classmethod
38
50
def process_response (self , response ):
51
+ """
52
+ Load a JSON response.
53
+
54
+ :param Response response: The HTTP response.
55
+ :return dict: The JSON-loaded content.
56
+ """
39
57
if response .status_code != 200 :
40
58
raise TwilioException ('Unable to fetch page' , response )
41
59
42
60
return json .loads (response .content )
43
61
44
62
def load_page (self , payload ):
63
+ """
64
+ Parses the collection of records out of a list payload.
65
+
66
+ :param dict payload: The JSON-loaded content.
67
+ :return list: The list of records.
68
+ """
45
69
if 'meta' in payload and 'key' in payload ['meta' ]:
46
70
return payload [payload ['meta' ]['key' ]]
47
71
else :
@@ -54,6 +78,9 @@ def load_page(self, payload):
54
78
55
79
@property
56
80
def previous_page_url (self ):
81
+ """
82
+ :return str: Returns a link to the previous_page_url or None if doesn't exist.
83
+ """
57
84
if 'meta' in self ._payload and 'previous_page_url' in self ._payload ['meta' ]:
58
85
return self ._payload ['meta' ]['previous_page_url' ]
59
86
elif 'previous_page_uri' in self ._payload and self ._payload ['previous_page_uri' ]:
@@ -63,6 +90,9 @@ def previous_page_url(self):
63
90
64
91
@property
65
92
def next_page_url (self ):
93
+ """
94
+ :return str: Returns a link to the next_page_url or None if doesn't exist.
95
+ """
66
96
if 'meta' in self ._payload and 'next_page_url' in self ._payload ['meta' ]:
67
97
return self ._payload ['meta' ]['next_page_url' ]
68
98
elif 'next_page_uri' in self ._payload and self ._payload ['next_page_uri' ]:
@@ -71,9 +101,17 @@ def next_page_url(self):
71
101
return None
72
102
73
103
def get_instance (self , payload ):
104
+ """
105
+ :param dict payload: A JSON-loaded representation of an instance record.
106
+ :return: A rich, resource-dependent object.
107
+ """
74
108
raise TwilioException ('Page.get_instance() must be implemented in the derived class' )
75
109
76
110
def next_page (self ):
111
+ """
112
+ Return the `Page` after this one.
113
+ :return Page: The next page.
114
+ """
77
115
if not self .next_page_url :
78
116
return None
79
117
@@ -82,6 +120,10 @@ def next_page(self):
82
120
return cls (self ._version , response , self ._solution )
83
121
84
122
def previous_page (self ):
123
+ """
124
+ Return the `Page` before this one.
125
+ :return Page: The previous page.
126
+ """
85
127
if not self .previous_page_url :
86
128
return None
87
129
@@ -91,4 +133,3 @@ def previous_page(self):
91
133
92
134
def __repr__ (self ):
93
135
return '<Page>'
94
-
0 commit comments