RecordUpdater, RecordDeleted and compute on update
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.00.1 (2012-08-28 10:02:16) rc4
|
Version 2.00.1 (2012-08-28 10:31:57) rc4
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
'%s %%{shop[0]}': '%s %%{shop[0]}',
|
'%s %%{shop[0]}': '%s %%{shop[0]}',
|
||||||
'%s %%{shop}': '%s %%{shop}',
|
'%s %%{shop}': '%s %%{shop}',
|
||||||
'@markmin\x01**Hello World**': '**Hello World**',
|
'@markmin\x01**Hello World**': '**Hello World**',
|
||||||
|
'enter an integer between %(min)g and %(max)g': 'enter an integer between %(min)g and %(max)g',
|
||||||
'Hello World': 'Hello World',
|
'Hello World': 'Hello World',
|
||||||
'Hello World ## comment': 'Hello World ',
|
'Hello World ## comment': 'Hello World ',
|
||||||
'Hello World## comment': 'Hello World',
|
'Hello World## comment': 'Hello World',
|
||||||
|
|||||||
+30
-22
@@ -1835,12 +1835,8 @@ class BaseAdapter(ConnectionPool):
|
|||||||
colset.gae_item = value
|
colset.gae_item = value
|
||||||
else:
|
else:
|
||||||
id = value
|
id = value
|
||||||
colset.update_record = (
|
colset.update_record = RecordUpdater(colset,table,id)
|
||||||
lambda _ = (colset, table, id), **a:
|
colset.delete_record = RecordDeleter(table,id)
|
||||||
update_record(_, a))
|
|
||||||
colset.delete_record = (
|
|
||||||
lambda t = table, i = id:
|
|
||||||
t._db(t._id==i).delete())
|
|
||||||
for (referee_table, referee_name) \
|
for (referee_table, referee_name) \
|
||||||
in table._referenced_by:
|
in table._referenced_by:
|
||||||
s = db[referee_table][referee_name]
|
s = db[referee_table][referee_name]
|
||||||
@@ -7611,15 +7607,15 @@ class Table(object):
|
|||||||
# check all fields that should be in the self table
|
# check all fields that should be in the self table
|
||||||
for ofield in self:
|
for ofield in self:
|
||||||
name = ofield.name
|
name = ofield.name
|
||||||
# if field is supposed to be computed, compute it!
|
if not name in new_fields:
|
||||||
if ofield.compute:
|
# if field is supposed to be computed, compute it!
|
||||||
try:
|
if ofield.compute:
|
||||||
new_fields[name] = (ofield,ofield.compute(Row(fields)))
|
try:
|
||||||
except KeyError:
|
new_fields[name] = (ofield,ofield.compute(Row(fields)))
|
||||||
pass
|
except (KeyError, AttributeError):
|
||||||
# if field is required, check its default value
|
pass
|
||||||
elif not name in new_fields:
|
# if field is required, check its default value
|
||||||
if not update and not ofield.default is None:
|
elif not update and not ofield.default is None:
|
||||||
new_fields[name] = (ofield,ofield.default)
|
new_fields[name] = (ofield,ofield.default)
|
||||||
elif update and not ofield.update is None:
|
elif update and not ofield.update is None:
|
||||||
new_fields[name] = (ofield,ofield.update)
|
new_fields[name] = (ofield,ofield.update)
|
||||||
@@ -8653,13 +8649,25 @@ class Set(object):
|
|||||||
os.unlink(oldpath)
|
os.unlink(oldpath)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def update_record(pack, a=None):
|
class RecordUpdater(object):
|
||||||
(colset, table, id) = pack
|
def __init__(self, colset, table, id):
|
||||||
b = a or dict(colset)
|
self.colset, self.table, self.id = colset, table, id
|
||||||
c = dict([(k,v) for (k,v) in b.iteritems() if k in table.fields and table[k].type!='id'])
|
|
||||||
table._db(table._id==id,ignore_common_filters=True).update(**c)
|
def __call__(self, **fields):
|
||||||
for (k, v) in c.iteritems():
|
colset, table, id = self.colset, self.table, self.id
|
||||||
colset[k] = v
|
newfields = fields or dict(colset)
|
||||||
|
for fieldname in newfields.keys():
|
||||||
|
if not fieldname in table.fields or table[fieldname].type=='id':
|
||||||
|
del newfields[fieldname]
|
||||||
|
table._db(table._id==id,ignore_common_filters=True).update(**newfields)
|
||||||
|
colset.update(newfields)
|
||||||
|
|
||||||
|
class RecordDeleter(object):
|
||||||
|
def __init__(self, table, id):
|
||||||
|
self.table, self.id = table,id
|
||||||
|
def __call__(self):
|
||||||
|
return self.table._db(self.table._id==self.id).delete()
|
||||||
|
|
||||||
|
|
||||||
class VirtualCommand(object):
|
class VirtualCommand(object):
|
||||||
def __init__(self,method,row):
|
def __init__(self,method,row):
|
||||||
|
|||||||
Reference in New Issue
Block a user