[Zope-dev] using persistent storage inside Zope
Adam Feuer
adamf@pobox.com
Mon, 20 Sep 1999 09:53:38 -0700
zope folks,
if this has already been covered somewhere, let me know-- i just
couldn't find information about it on the Zope site!
i'm building a Zope product that needs to store some persistent
information in the Zope object database. the information needs to be
accessible to all instances of that product.
my approach was: write a class that derives from
Persistence.Persistent that will store the data and mediate access to
it. then, in the product's __init__.py file, instantiate this class
and put the instance into the Zope object database, then call
get_transaction().commit() to commit it.
theoretically, once my instance is in the Zope object database,
other objects can access it-- adding or subtracting data. and the
instance will handle committing its own changes, so it won't forget
anything between restarts of Zope.
my question: how do actually do this?? :-) i found a kludgy way to
store a class instance in the Zope object database from the product's
__init__.py file, but i can't figure out how to connect to this object
from a random instance of my product.
amy i going about this all wrong? is there a better way of storing
and accessing persistent objects from inside of Zope? or if my
approach is correct, how do actually implement it?
here's what i am doing in the product's __init__.py file:
# get the ZODB root-- kludge!
root=context._ProductContext__app._p_jar.root()
# now make the object instance if we need to
if root.has_key('FooObject'):
print "FooObject already in DB"
else:
print "made new FooObject."
root['FooObject'] = Foo.Foo()
get_transaction().commit()
the problem seems to be, i don't know how to get access to the Zope
object database's root object from inside an instance of my product.
what i want to do inside the product base class, during an add or
delete of an instance of the product, is something like:
# somehow get the root of the Zope ZODB :-)
root=Somehow.get.ZODB.root()
root['FooObject'].remove_item(someitem)
get_transaction().commit()
any help is greatly appreciated!
cheers
adam
--
Adam Feuer
adamf@pobox.com