Warning:
Fauna is decommissioning FQL v4 on June 30, 2025.

This driver is not compatible with FQL v10, the latest version. Fauna accounts created after August 21, 2024 must use FQL v10.
Ensure you migrate existing projects to the official v10 driver by the v4 EOL date: https://github.com/fauna/fauna-python.

For more information, see the v4 end of life (EOL) announcement and related FAQ.

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)