У меня нижеуказанная функция работает нормально на Python 2.6, но производственная среда appengine составляет 2,5, и она взорвалась:
AttributeError: у объекта 'module' нет атрибута 'Mapping'
У кого-нибудь есть решение для 2.5?
Спасибо
Chris
import types, collections
class AttrDict(dict):
'''AttrDict - dict with JS-like key=attr access'''
def __init__(self, *argz, **kwz):
if len(argz) == 1 and not kwz and isinstance(argz[0], types.StringTypes):
super(AttrDict, self).__init__(open(argz[0]))
else:
super(AttrDict, self).__init__(*argz, **kwz)
for k,v in self.iteritems(): setattr(self, k, v) # re-construct all values via factory
def __val_factory(self, val):
return AttrDict(val) if isinstance(val, collections.Mapping) else val
def __getattr__(self, k):
return super(AttrDict, self).__getitem__(k)
__getitem__ = __getattr__
def __setattr__(self, k, v):
return super(AttrDict, self).__setitem__(k, self.__val_factory(v))
__setitem__ = __setattr__