some improvements on the zope-/persistent-based storage adapter

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1544 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-01-05 13:22:06 +00:00
parent 3751952d34
commit a53d9d8e22

View file

@ -38,6 +38,10 @@ storages = AdapterFactory()
class PersistentObject(Persistent):
implements(IContained)
__parent__ = __name__ = None
def update(self, data):
self.__dict__.update(data)
@ -49,10 +53,10 @@ class Adapter(object):
persistentFactory = PersistentObject
persistent = address = uid = None
def __init__(self, context):
self.context = context
self.persistent = None
self.address = None
def save(self, address=None):
intids = component.getUtility(IIntIds)
@ -70,27 +74,29 @@ class Adapter(object):
else:
persistent = self.persistentFactory()
container[name] = persistent
persistent.__name__ = name
persistent.__parent__ = container
uid = intids.register(persistent)
else:
uid = intids.getId(persistent)
persistent.update(self.context.__dict__)
persistent._p_changed = True
self.persistent = persistent
self.uid = uid
return uid
def load(self, address=None):
intids = component.getUtility(IIntIds)
if self.uid is not None: # if ever possible we use the intId
address = self.uid
if type(address) is int: # seems to be an intId
intids = component.getUtility(IIntIds)
persistent = intids.getObject(address)
self.address = getPath(persistent)
else:
if self.address is None:
self.address = address
self.address = address # lets
else:
address = self.address
persistent = traverse(getSite(), address)
self.uid = intids.register(persistent)
t = type(self.context)
factory = t is type and self.context or t
obj = self.context = factory()