[Zope-dev] ZODB object upgrades
alan milligan
alan_milligan at hotmail.com
Sun Nov 2 09:13:23 EST 2003
Hi,
Over the last month or so, I've rather wonderfully managed to corrupt my
ZODB with artifacts of my Currency class that no longer exist.
This is due to:
(i) moving the module to a different package (twice)
(ii) renaming the module
(iii) changing it's inheritance hierarchy (having removed all Zope-awareness
from class has caused loads of setstate issues in regard to either
__basicnew__ not found, AttributeErrors, and problems with non-derivation
from AcquireImplicitWrapper)
I now desperately need to write a parser to convert all of these nasties to
ZCurrency types. I've come up with the following ExternalMethod - whereby
I've defined a __currency__ attribute in each obselete incantation's product
(Currency object's are used in the spirit of DateTime rather than within
ObjectManager containment structures):
from Acquisition import aq_base
from Products.BastionBanking.ZCurrency import ZCurrency
def repair(container, counter=0):
for (k,v) in container.__dict__.items():
if hasattr(v, '__currency__'):
setattr(container, k, ZCurrency(v._currency, v._amount))
counter += 1
for object in container.objectValues():
for (k,v) in object.__dict__.items():
if hasattr(v, '__currency__'):
setattr(object, k, ZCurrency(v._currency, v._amount))
counter += 1
if hasattr(aq_base(object), 'objectValues'):
repair(object, counter)
return counter
However, it doesn't seem to find anything to convert. Does anyone have any
ideas?
TIA, Alan
_________________________________________________________________
Surf the net and talk on the phone with Xtra Jetstream @
http://www.xtra.co.nz/products/0,,5803,00.html !
More information about the Zope-Dev
mailing list