=========================
Zope-based Object Storage
=========================

  ($Id$)

  >>> from zope.app.testing.setup import placefulSetUp, placefulTearDown
  >>> site = placefulSetUp(True)

As the Zope-based storage keeps track of the objects using unique ids
we need a utility that provides these. For testing we use a dummy
implementation; the real stuff is in zope.app.intids and there must
be a corresponding utility in the root site folder of your Zope.

  >>> from zope import component
  >>> from cybertools.relation.tests import IntIdsStub
  >>> component.provideUtility(IntIdsStub())

We first need a class from which we will create objects that later on
will be stored in and retrieved from the storage.

  >>> class Content(object):
  ...     title = 'demo'

  >>> c1 = Content()
  >>> c1.title
  'demo'
  >>> c1.title = 'changed'
  >>> c1.title
  'changed'

We can save the object in the storage by getting a storage adapter
from the corresponding factory in the `manager` module and calling
`save()` on it.

  >>> from cybertools.storage.pzope.base import storages
  >>> persistent = storages(c1)
  >>> c1Uid = persistent.save('/c1')

For loading an object we get a storage adapter to the object's class and
call `load()` on it, providing the UID we had got back when saving the
object.

  >>> persistent = storages(Content)
  >>> c2 = persistent.load(c1Uid)
  >>> c2.title
  'changed'

If an object has been stored to the storage or loaded from it it has got
an `address` attribut that will be used for subsequent accesses to the
storage.

  >>> persistent.address
  u'/c1'


Fin de partie
=============

  >>> placefulTearDown()

