[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