improved Table (10x), DAL(2x), Row(10x) without memory leak
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.00.0 (2012-08-26 00:00:11) dev
|
Version 2.00.0 (2012-08-26 09:32:05) dev
|
||||||
|
|||||||
+41
-28
@@ -6282,17 +6282,13 @@ def bar_decode_string(value):
|
|||||||
return [x.replace('||', '|') for x in string_unpack.split(value[1:-1]) if x.strip()]
|
return [x.replace('||', '|') for x in string_unpack.split(value[1:-1]) if x.strip()]
|
||||||
|
|
||||||
|
|
||||||
class Row(dict):
|
class Row(object):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
a dictionary that lets you do d['a'] as well as d.a
|
a dictionary that lets you do d['a'] as well as d.a
|
||||||
this is only used to store a Row
|
this is only used to store a Row
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__setattr__ = dict.__setitem__
|
|
||||||
__getattr__ = dict.__getitem__
|
|
||||||
__delattr__ = dict.__delitem__
|
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
key=str(key)
|
key=str(key)
|
||||||
m = regex_table_field.match(key)
|
m = regex_table_field.match(key)
|
||||||
@@ -6303,15 +6299,27 @@ class Row(dict):
|
|||||||
return dict.__getitem__(self, m.group(1))[m.group(2)]
|
return dict.__getitem__(self, m.group(1))[m.group(2)]
|
||||||
except (KeyError,TypeError):
|
except (KeyError,TypeError):
|
||||||
key = m.group(2)
|
key = m.group(2)
|
||||||
return dict.__getitem__(self, key)
|
return object.__getattribute__(self, key)
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
setattr(self, str(key), value)
|
||||||
|
|
||||||
__call__ = __getitem__
|
__call__ = __getitem__
|
||||||
|
|
||||||
#def __call__(self,key):
|
def get(self,key,default=None):
|
||||||
# return self.__getitem__(key)
|
return self.__dict__.get(key,default)
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __contains__(self,key):
|
||||||
dict.__setitem__(self, str(key), value)
|
return key in self.__dict__
|
||||||
|
|
||||||
|
def keys(self):
|
||||||
|
return self.__dict__.keys()
|
||||||
|
|
||||||
|
def items(self):
|
||||||
|
return self.__dict__.items()
|
||||||
|
|
||||||
|
def values(self):
|
||||||
|
return self.__dict__.values()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
### this could be made smarter
|
### this could be made smarter
|
||||||
@@ -6490,7 +6498,7 @@ def smart_query(fields,text):
|
|||||||
return query
|
return query
|
||||||
|
|
||||||
|
|
||||||
class DAL(dict):
|
class DAL(object):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
an instance of this class represents a database connection
|
an instance of this class represents a database connection
|
||||||
@@ -6692,12 +6700,6 @@ class DAL(dict):
|
|||||||
if name.upper() in self.RSK[backend]:
|
if name.upper() in self.RSK[backend]:
|
||||||
raise SyntaxError, 'invalid table/column name "%s" is a "%s" reserved SQL keyword' % (name, backend.upper())
|
raise SyntaxError, 'invalid table/column name "%s" is a "%s" reserved SQL keyword' % (name, backend.upper())
|
||||||
|
|
||||||
def __contains__(self, tablename):
|
|
||||||
if self.has_key(tablename):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def parse_as_rest(self,patterns,args,vars,queries=None,nested_select=True):
|
def parse_as_rest(self,patterns,args,vars,queries=None,nested_select=True):
|
||||||
"""
|
"""
|
||||||
EXAMPLE:
|
EXAMPLE:
|
||||||
@@ -6989,6 +6991,9 @@ def index():
|
|||||||
if on_define: on_define(table)
|
if on_define: on_define(table)
|
||||||
return table
|
return table
|
||||||
|
|
||||||
|
def __contains__(self, tablename):
|
||||||
|
return tablename in self.tables
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
for tablename in self.tables:
|
for tablename in self.tables:
|
||||||
yield self[tablename]
|
yield self[tablename]
|
||||||
@@ -7000,16 +7005,18 @@ def index():
|
|||||||
if not key is '_LAZY_TABLES' and key in self._LAZY_TABLES:
|
if not key is '_LAZY_TABLES' and key in 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 dict.__getitem__(self, key)
|
return object.__getattribute__(self, key)
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key, value):
|
||||||
dict.__setitem__(self, str(key), value)
|
object.__setattr__(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
|
||||||
dict.__setitem__(self,key,value)
|
object.__setattr__(self,key,value)
|
||||||
|
|
||||||
|
__delitem__ = object.__delattr__
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<DAL %s>' % self._uri
|
return '<DAL %s>' % self._uri
|
||||||
@@ -7207,7 +7214,7 @@ def Reference_pickler(data):
|
|||||||
copy_reg.pickle(Reference, Reference_pickler, Reference_unpickler)
|
copy_reg.pickle(Reference, Reference_pickler, Reference_unpickler)
|
||||||
|
|
||||||
|
|
||||||
class Table(dict):
|
class Table(object):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
an instance of this class represents a database table
|
an instance of this class represents a database table
|
||||||
@@ -7447,7 +7454,7 @@ class Table(dict):
|
|||||||
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 dict.__getitem__(self, str(key))
|
return object.__getattribute__(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)
|
||||||
@@ -7496,10 +7503,15 @@ class Table(dict):
|
|||||||
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
|
||||||
dict.__setitem__(self, str(key), value)
|
object.__setattr__(self, str(key), value)
|
||||||
|
|
||||||
__getattr__ = __getitem__
|
__getattr__ = __getitem__
|
||||||
|
|
||||||
|
def __setattr__(self, key, value):
|
||||||
|
if key[:1]!='_' and key in self:
|
||||||
|
raise SyntaxError, 'Object exists and cannot be redefined: %s' % key
|
||||||
|
object.__setattr__(self,key,value)
|
||||||
|
|
||||||
def __delitem__(self, key):
|
def __delitem__(self, key):
|
||||||
if isinstance(key, dict):
|
if isinstance(key, dict):
|
||||||
query = self._build_query(key)
|
query = self._build_query(key)
|
||||||
@@ -7509,10 +7521,11 @@ class Table(dict):
|
|||||||
not self._db(self._id == key).delete():
|
not self._db(self._id == key).delete():
|
||||||
raise SyntaxError, 'No such record: %s' % key
|
raise SyntaxError, 'No such record: %s' % key
|
||||||
|
|
||||||
def __setattr__(self, key, value):
|
def __contains__(self,key):
|
||||||
if key[:1]!='_' and key in self:
|
return hasattr(self,key)
|
||||||
raise SyntaxError, 'Object exists and cannot be redefined: %s' % key
|
|
||||||
self[key] = value
|
def items(self):
|
||||||
|
return self.__dict__.items()
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
for fieldname in self.fields:
|
for fieldname in self.fields:
|
||||||
@@ -7522,7 +7535,7 @@ class Table(dict):
|
|||||||
return '<Table %s (%s)>' % (self._tablename,','.join(self.fields()))
|
return '<Table %s (%s)>' % (self._tablename,','.join(self.fields()))
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
if self.get('_ot', None):
|
if hasattr(self,'_ot') and self._ot is not None:
|
||||||
if 'Oracle' in str(type(self._db._adapter)): # <<< patch
|
if 'Oracle' in str(type(self._db._adapter)): # <<< patch
|
||||||
return '%s %s' % (self._ot, self._tablename) # <<< patch
|
return '%s %s' % (self._ot, self._tablename) # <<< patch
|
||||||
return '%s AS %s' % (self._ot, self._tablename)
|
return '%s AS %s' % (self._ot, self._tablename)
|
||||||
|
|||||||
Reference in New Issue
Block a user