1from __future__ import absolute_import, division, print_function
2
3from stripe import util
4from stripe.stripe_object import StripeObject
5
6from stripe.six.moves.urllib.parse import quote_plus
7
8
9class ListObject(StripeObject):
10    OBJECT_NAME = "list"
11
12    def list(self, **params):
13        return self.request("get", self["url"], params)
14
15    def auto_paging_iter(self):
16        page = self
17        params = dict(self._retrieve_params)
18
19        while True:
20            item_id = None
21            for item in page:
22                item_id = item.get("id", None)
23                yield item
24
25            if not getattr(page, "has_more", False) or item_id is None:
26                return
27
28            params["starting_after"] = item_id
29            page = self.list(**params)
30
31    def create(self, idempotency_key=None, **params):
32        headers = util.populate_headers(idempotency_key)
33        return self.request("post", self["url"], params, headers)
34
35    def retrieve(self, id, **params):
36        base = self.get("url")
37        id = util.utf8(id)
38        extn = quote_plus(id)
39        url = "%s/%s" % (base, extn)
40
41        return self.request("get", url, params)
42
43    def __iter__(self):
44        return getattr(self, "data", []).__iter__()
45
46    def __len__(self):
47        return getattr(self, "data", []).__len__()
48