=========================
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()