diff --git a/gluon/dal.py b/gluon/dal.py index b837a50e..63a93e61 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -6857,23 +6857,26 @@ class Row(object): this is only used to store a Row """ - def __init__(self,*args,**kwargs): - self.__dict__.update(*args,**kwargs) + __init__ = lambda self,*args,**kwargs: self.__dict__.update(*args,**kwargs) - def __getitem__(self, key): - key=str(key) - m = REGEX_TABLE_DOT_FIELD.match(key) - if key in self.get('_extra',{}): - return self._extra[key] - elif m: + def __getitem__(self, k): + key=str(k) + _extra = getattr(self, '_extra', None) + if _extra: + return _extra.get(key) + if v: + return v + #m = REGEX_TABLE_DOT_FIELD.match(key) + idot = key.find('.') + if idot != -1: + m = (key[:idot],key[idot+1:]) try: - return ogetattr(self, m.group(1))[m.group(2)] + return ogetattr(self, m[0])[m[1]] except (KeyError,AttributeError,TypeError): - key = m.group(2) + key = m[1] return ogetattr(self, key) - def __setitem__(self, key, value): - setattr(self, str(key), value) + __setitem__ = lambda self, key, value: setattr(self, str(key), value) __delitem__ = object.__delattr__ @@ -6881,47 +6884,31 @@ class Row(object): __call__ = __getitem__ - def get(self,key,default=None): - return self.__dict__.get(key,default) + get = lambda self, key, default: self.__dict__.get(key,default) - def __contains__(self,key): - return key in self.__dict__ - has_key = __contains__ + has_key = __contains__ = lambda self, key: key in self.__dict__ - def __nonzero__(self): - return len(self.__dict__)>0 + __nonzero__ = lambda self: len(self.__dict__)>0 - def update(self, *args, **kwargs): - self.__dict__.update(*args, **kwargs) + update = lambda self, *args, **kwargs: self.__dict__.update(*args, **kwargs) - def keys(self): - return self.__dict__.keys() + keys = lambda self: self.__dict__.keys() - def items(self): - return self.__dict__.items() + items = lambda self: self.__dict__.items() - def values(self): - return self.__dict__.values() + values = lambda self: self.__dict__.values() - def __iter__(self): - return self.__dict__.__iter__() + __iter__ = lambda self: self.__dict__.__iter__() - def iteritems(self): - return self.__dict__.iteritems() + iteritems = lambda self: self.__dict__.iteritems() - def __str__(self): - ### this could be made smarter - return '' % self.as_dict() + __str__ = __repr__ = lambda self: '' % self.as_dict() - def __repr__(self): - return '' % self.as_dict() + __int__ = lambda self: object.__getattribute__(self,'id') - def __int__(self): - return object.__getattribute__(self,'id') + __long__ = lambda self: long(object.__getattribute__(self,'id')) - def __long__(self): - return long(object.__getattribute__(self,'id')) def __eq__(self,other): try: