diff --git a/gluon/dal.py b/gluon/dal.py index 43521893..a678c820 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -6865,23 +6865,24 @@ 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) + 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) - if key in self.get('_extra',{}): - return self._extra[key] - elif m: + if m: try: return ogetattr(self, m.group(1))[m.group(2)] except (KeyError,AttributeError,TypeError): key = m.group(2) 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__ @@ -6889,47 +6890,31 @@ class Row(object): __call__ = __getitem__ - def get(self,key,default=None): - return self.__dict__.get(key,default) + get = lambda self, key, default=None: 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: