From c25f337ffe6a11506fb7820e80059d7be1cad444 Mon Sep 17 00:00:00 2001 From: Michele Comitini Date: Thu, 27 Jun 2013 16:57:37 +0200 Subject: [PATCH 1/3] Row code speedups --- gluon/dal.py | 67 +++++++++++++++++++++------------------------------- 1 file changed, 27 insertions(+), 40 deletions(-) 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: From c4bff4437fd8b6e2750f4596edb13f14b57c7ebf Mon Sep 17 00:00:00 2001 From: Michele Comitini Date: Thu, 27 Jun 2013 17:19:10 +0200 Subject: [PATCH 2/3] removed useless comment --- gluon/dal.py | 1 - 1 file changed, 1 deletion(-) diff --git a/gluon/dal.py b/gluon/dal.py index 63a93e61..295cad44 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -6866,7 +6866,6 @@ class Row(object): 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:]) From 4b94fe637da720313e7515f67fa2531d08f31f33 Mon Sep 17 00:00:00 2001 From: Michele Comitini Date: Fri, 28 Jun 2013 02:07:22 +0200 Subject: [PATCH 3/3] restored the regex --- gluon/dal.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/gluon/dal.py b/gluon/dal.py index 295cad44..d13e3c13 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -6866,13 +6866,12 @@ class Row(object): return _extra.get(key) if v: return v - idot = key.find('.') - if idot != -1: - m = (key[:idot],key[idot+1:]) + m = REGEX_TABLE_DOT_FIELD.match(key) + if m: try: - return ogetattr(self, m[0])[m[1]] + return ogetattr(self, m.group(1))[m.group(2)] except (KeyError,AttributeError,TypeError): - key = m[1] + key = m.group(2) return ogetattr(self, key) __setitem__ = lambda self, key, value: setattr(self, str(key), value) @@ -6883,7 +6882,7 @@ class Row(object): __call__ = __getitem__ - get = lambda self, key, default: self.__dict__.get(key,default) + get = lambda self, key, default=None: self.__dict__.get(key,default) has_key = __contains__ = lambda self, key: key in self.__dict__