faster lazytables check

This commit is contained in:
mdipierro
2012-08-28 16:52:30 -05:00
parent 56716e7a20
commit 3884878efb
2 changed files with 12 additions and 10 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.00.1 (2012-08-28 15:36:00) rc4 Version 2.00.1 (2012-08-28 16:52:25) rc4
+11 -9
View File
@@ -184,6 +184,8 @@ SELECT_ARGS = set(
('orderby', 'groupby', 'limitby','required', 'cache', 'left', ('orderby', 'groupby', 'limitby','required', 'cache', 'left',
'distinct', 'having', 'join','for_update', 'processor','cacheable')) 'distinct', 'having', 'join','for_update', 'processor','cacheable'))
ogetattr = object.__getattribute__
osetattr = object.__setattr__
################################################################################### ###################################################################################
# following checks allow the use of dal without web2py, as a standalone module # following checks allow the use of dal without web2py, as a standalone module
@@ -6325,10 +6327,10 @@ class Row(object):
return self._extra[key] return self._extra[key]
elif m: elif m:
try: try:
return object.__getattribute__(self, m.group(1))[m.group(2)] return ogetattr(self, m.group(1))[m.group(2)]
except (KeyError,AttributeError,TypeError): except (KeyError,AttributeError,TypeError):
key = m.group(2) key = m.group(2)
return object.__getattribute__(self, key) return ogetattr(self, key)
def __setitem__(self, key, value): def __setitem__(self, key, value):
setattr(self, str(key), value) setattr(self, str(key), value)
@@ -7042,19 +7044,19 @@ def index():
return self.__getattr__(str(key)) return self.__getattr__(str(key))
def __getattr__(self, key): def __getattr__(self, key):
if not key is '_LAZY_TABLES' and key in self._LAZY_TABLES: if ogetattr(self,'_lazy_tables') and not key in ogetattr(self,'_LAZY_TABLES'):
tablename, fields, args = self._LAZY_TABLES.pop(key) tablename, fields, args = self._LAZY_TABLES.pop(key)
return self.lazy_define_table(tablename,*fields,**args) return self.lazy_define_table(tablename,*fields,**args)
return object.__getattribute__(self, key) return ogetattr(self, key)
def __setitem__(self, key, value): def __setitem__(self, key, value):
object.__setattr__(self, str(key), value) osetattr(self, str(key), value)
def __setattr__(self, key, value): def __setattr__(self, key, value):
if key[:1]!='_' and key in self: if key[:1]!='_' and key in self:
raise SyntaxError, \ raise SyntaxError, \
'Object %s exists and cannot be redefined' % key 'Object %s exists and cannot be redefined' % key
object.__setattr__(self,key,value) osetattr(self,key,value)
__delitem__ = object.__delattr__ __delitem__ = object.__delattr__
@@ -7494,7 +7496,7 @@ class Table(object):
elif str(key).isdigit() or 'google' in drivers and isinstance(key, Key): elif str(key).isdigit() or 'google' in drivers and isinstance(key, Key):
return self._db(self._id == key).select(limitby=(0,1)).first() return self._db(self._id == key).select(limitby=(0,1)).first()
elif key: elif key:
return object.__getattribute__(self, str(key)) return ogetattr(self, str(key))
def __call__(self, key=DEFAULT, **kwargs): def __call__(self, key=DEFAULT, **kwargs):
for_update = kwargs.get('_for_update',False) for_update = kwargs.get('_for_update',False)
@@ -7543,14 +7545,14 @@ class Table(object):
if isinstance(key, dict): if isinstance(key, dict):
raise SyntaxError,\ raise SyntaxError,\
'value must be a dictionary: %s' % value 'value must be a dictionary: %s' % value
object.__setattr__(self, str(key), value) osetattr(self, str(key), value)
__getattr__ = __getitem__ __getattr__ = __getitem__
def __setattr__(self, key, value): def __setattr__(self, key, value):
if key[:1]!='_' and key in self: if key[:1]!='_' and key in self:
raise SyntaxError, 'Object exists and cannot be redefined: %s' % key raise SyntaxError, 'Object exists and cannot be redefined: %s' % key
object.__setattr__(self,key,value) osetattr(self,key,value)
def __delitem__(self, key): def __delitem__(self, key):
if isinstance(key, dict): if isinstance(key, dict):