Quickstart Instructions
=======================
  ($Id$)
  >>> from zope.app import zapi
  >>> from zope.app.testing import ztapi
  >>> from zope.interface import directlyProvides
A Basic API for Reports and Listings
====================================
  >>> from cybertools.reporter.data import DataSource
  >>> from cybertools.reporter.interfaces import IResultSet
Let's start with the Person class from the example package - we will
then provide a listing of persons...
  >>> from cybertools.contact import Person
  >>> from cybertools.reporter.example.interfaces import IContactsDataSource
  >>> from cybertools.reporter.example.contact import Contacts
  >>> from datetime import date
  >>> pdata = ((u'John', u'Smith', '1956-08-01'),
  ...          (u'David', u'Waters', '1972-12-24'),
  ...          (u'Carla', u'Myers', '1981-10-11'))
  >>> persons = DataSource([Person(f, s, date(*[int(d) for d in b.split('-')]))
  ...                         for f, s, b in pdata])
  >>> directlyProvides(persons, IContactsDataSource)
  >>> ztapi.provideAdapter(IContactsDataSource, IResultSet, Contacts)
  >>> rset = IResultSet(persons)
  >>> len(rset)
  3
For the browser presentation we can also use a browser view providing
the result set with extended attributes:
  >>> #rsView = zapi.getMultiAdapter((context, TestRequest()), IBrowserView)