Module faunadb.page

Expand source code
from faunadb import query

class Page(object):
  """
  Represents a single pagination result.
  See ``paginate`` in the `docs <https://app.fauna.com/documentation/reference/queryapi#read-functions>`__.
  You must convert to Page yourself using :py:meth:`from_raw`.
  """

  @staticmethod
  def from_raw(raw):
    """Convert a raw response dict to a Page."""
    return Page(raw["data"], raw.get("before"), raw.get("after"))

  def __init__(self, data, before=None, after=None):
    self.data = data
    """List of elements returned by the query."""
    self.before = before
    """Optional :any:`Ref` for an instance that comes before this page."""
    self.after = after
    """Optional :any:`Ref` for an instance that comes after this page."""

  def map_data(self, func):
    """Return a new Page whose data has had ``func`` applied to each element."""
    return Page([func(x) for x in self.data], self.before, self.after)

  def __repr__(self):
    return "Page(data=%s, before=%s, after=%s)" % (self.data, self.before, self.after)

  def __eq__(self, other):
    return isinstance(other, Page) and\
      self.data == other.data and\
      self.before == other.before and\
      self.after == other.after

  @staticmethod
  def set_iterator(client, set_query, map_lambda=None, mapper=None, page_size=None):
    """
    Iterator that keeps getting new pages of a set.

    :param map_lambda:
      If present, a :any:`lambda_` for mapping set elements.
    :param mapper:
      Mapping Python function used on each page element.
    :param page_size:
      Number of instances to be fetched at a time.
    :return:
      Iterator through all elements in the set.
    """

    def get_page(**kwargs):
      queried = query.paginate(set_query, **kwargs)
      if map_lambda is not None:
        queried = query.map_(map_lambda, queried)
      return Page.from_raw(client.query(queried))

    page = get_page(size=page_size)
    for val in page.data:
      yield val if mapper is None else mapper(val)

    next_cursor = "after" if page.after is not None else "before"

    while getattr(page, next_cursor) is not None:
      page = get_page(**{"size": page_size, next_cursor: getattr(page, next_cursor)})
      for val in page.data:
        yield val if mapper is None else mapper(val)

Classes

class Page (data, before=None, after=None)

Represents a single pagination result. See paginate in the docs <https://app.fauna.com/documentation/reference/queryapi#read-functions>__. You must convert to Page yourself using :py:meth:from_raw.

Expand source code
class Page(object):
  """
  Represents a single pagination result.
  See ``paginate`` in the `docs <https://app.fauna.com/documentation/reference/queryapi#read-functions>`__.
  You must convert to Page yourself using :py:meth:`from_raw`.
  """

  @staticmethod
  def from_raw(raw):
    """Convert a raw response dict to a Page."""
    return Page(raw["data"], raw.get("before"), raw.get("after"))

  def __init__(self, data, before=None, after=None):
    self.data = data
    """List of elements returned by the query."""
    self.before = before
    """Optional :any:`Ref` for an instance that comes before this page."""
    self.after = after
    """Optional :any:`Ref` for an instance that comes after this page."""

  def map_data(self, func):
    """Return a new Page whose data has had ``func`` applied to each element."""
    return Page([func(x) for x in self.data], self.before, self.after)

  def __repr__(self):
    return "Page(data=%s, before=%s, after=%s)" % (self.data, self.before, self.after)

  def __eq__(self, other):
    return isinstance(other, Page) and\
      self.data == other.data and\
      self.before == other.before and\
      self.after == other.after

  @staticmethod
  def set_iterator(client, set_query, map_lambda=None, mapper=None, page_size=None):
    """
    Iterator that keeps getting new pages of a set.

    :param map_lambda:
      If present, a :any:`lambda_` for mapping set elements.
    :param mapper:
      Mapping Python function used on each page element.
    :param page_size:
      Number of instances to be fetched at a time.
    :return:
      Iterator through all elements in the set.
    """

    def get_page(**kwargs):
      queried = query.paginate(set_query, **kwargs)
      if map_lambda is not None:
        queried = query.map_(map_lambda, queried)
      return Page.from_raw(client.query(queried))

    page = get_page(size=page_size)
    for val in page.data:
      yield val if mapper is None else mapper(val)

    next_cursor = "after" if page.after is not None else "before"

    while getattr(page, next_cursor) is not None:
      page = get_page(**{"size": page_size, next_cursor: getattr(page, next_cursor)})
      for val in page.data:
        yield val if mapper is None else mapper(val)

Static methods

def from_raw(raw)

Convert a raw response dict to a Page.

Expand source code
@staticmethod
def from_raw(raw):
  """Convert a raw response dict to a Page."""
  return Page(raw["data"], raw.get("before"), raw.get("after"))
def set_iterator(client, set_query, map_lambda=None, mapper=None, page_size=None)

Iterator that keeps getting new pages of a set.

:param map_lambda: If present, a :any:lambda_ for mapping set elements. :param mapper: Mapping Python function used on each page element. :param page_size: Number of instances to be fetched at a time. :return: Iterator through all elements in the set.

Expand source code
@staticmethod
def set_iterator(client, set_query, map_lambda=None, mapper=None, page_size=None):
  """
  Iterator that keeps getting new pages of a set.

  :param map_lambda:
    If present, a :any:`lambda_` for mapping set elements.
  :param mapper:
    Mapping Python function used on each page element.
  :param page_size:
    Number of instances to be fetched at a time.
  :return:
    Iterator through all elements in the set.
  """

  def get_page(**kwargs):
    queried = query.paginate(set_query, **kwargs)
    if map_lambda is not None:
      queried = query.map_(map_lambda, queried)
    return Page.from_raw(client.query(queried))

  page = get_page(size=page_size)
  for val in page.data:
    yield val if mapper is None else mapper(val)

  next_cursor = "after" if page.after is not None else "before"

  while getattr(page, next_cursor) is not None:
    page = get_page(**{"size": page_size, next_cursor: getattr(page, next_cursor)})
    for val in page.data:
      yield val if mapper is None else mapper(val)

Instance variables

var after

Optional :any:Ref for an instance that comes after this page.

var before

Optional :any:Ref for an instance that comes before this page.

var data

List of elements returned by the query.

Methods

def map_data(self, func)

Return a new Page whose data has had func applied to each element.

Expand source code
def map_data(self, func):
  """Return a new Page whose data has had ``func`` applied to each element."""
  return Page([func(x) for x in self.data], self.before, self.after)