def __get__(self, instance, owner): if instance is None: return self if self.many or self.sub: if self.many: list_path = self.list_path or self.related_cls.Meta.list_path response = client.get(instance._get_path() + list_path) return ListSet( resource_cls=self.related_cls, response=response, ) else: path = instance.get_related_url(self.related_cls) response = client.get(path, raw_url=True) return self.related_cls.from_api_data(response) else: attr = self.find_parent_attr(type(instance)) id = getattr(instance, '%s_id' % attr) if id is None: return None return self.related_cls.objects.get(id=id)
def _paginate(self): next_page = self._response[self._pagination_key].get(self._next_key) if next_page is None: for value in self._build_resources( self._response[self._results_key]): # noqa: E501 yield value else: while next_page is not None: for value in self._build_resources( rows=self._response[self._results_key]): yield value self._response = client.get(next_page, raw_url=True) pagination_data = self._response[self._pagination_key] next_page = pagination_data.get(self._next_key)
def read(self): path = self._get_path() data = self._load_raw(client.get(path)) self._orig_data = data self._set_fields(data)
def __init__(self, resource_cls, response=None): self._resource_cls = resource_cls self._response = response or client.get( self._resource_cls.Meta.list_path) self._results = self._results_generator()
def download(self, local_file_path): path = self._get_download_path() r = client.get(path, raw_url=True, download=True) with open(local_file_path, 'wb') as fd: for chunk in r.iter_content(128): fd.write(chunk)