Source code for pycrunchbase.resource.page

import six

from .utils import safe_int
from .pageitem import PageItem


@six.python_2_unicode_compatible
[docs]class Page(object): """A Page represents a a page of results returned by CrunchBase. Page contains useful information regarding how many items there are in total (total_items), items per page (items_per_page), etc. A page contains information for going to the prev/next page (if available). The data that is used to initialize a Page looks like this:: "data": { "paging": { "items_per_page": 1000, "current_page": 1, "number_of_pages": 1, "next_page_url": null, "prev_page_url": null, "total_items": 1, "sort_order": "custom" }, "items": [ { "updated_at": 1423666090, "created_at": 1371717055, "path": "organization/example", "name": "Example", "type": "Organization" } ] } A special note is that current_page might be 0, this is when the page is returned as part of a :class:`Relationship`. """ def __init__(self, name, data): self.name = name paging = data.get('paging') self.total_items = safe_int(paging.get('total_items')) or 0 self.first_page_url = paging.get('first_page_url') self.sort_order = paging.get('sort_order') self.next_page_url = paging.get('next_page_url') self.prev_page_url = paging.get('prev_page_url') self.items_per_page = safe_int(paging.get('items_per_page')) # if these 2 fields are 0, we know that this Page is a result of # a call to retrieve a relationship of a Node self.current_page = paging.get('current_page') or 0 self.number_of_pages = safe_int(paging.get('number_of_pages')) or 0 self.items = [PageItem.build(item) for item in data.get('items')]
[docs] def __getitem__(self, key): """Allows caller to use array indices to get a :class:`PageItem` Args: i (int): 0-based index of the element to retrieve Returns: PageItem: if valid item exists at index i None if the index is too small or too large """ if not isinstance(key, int): raise TypeError() return self.items[key]
[docs] def __len__(self): """Returns the number of items this Page holds""" return len(self.items)
[docs] def __iter__(self): """Allows callers to iterate through the items of this page as such: team_members = [member for member in page_of_members] """ return iter(self.items)
[docs] def get(self, i): """Gets the i-th element of this page Args: i (int): 0-based index of the element to retrieve Returns: PageItem: if valid item exists at index i None if the index is too small or too large """ return self[i]
def __str__(self): return ("Page {name} {current}/{pages} Per Page: {per_page} " "Total items: {total}").format( name=self.name, current=self.current_page, pages=self.number_of_pages, per_page=self.items_per_page, total=self.total_items, ) def __repr__(self): return self.__str__()