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