@db.table.add_method.name, thanks Vinicius

This commit is contained in:
mdipierro
2013-05-03 22:15:01 -05:00
parent 1b260c4b84
commit 1383d13334
3 changed files with 33 additions and 1 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.4.6-stable+timestamp.2013.05.03.21.47.09
Version 2.4.6-stable+timestamp.2013.05.03.22.14.19
+18
View File
@@ -8091,6 +8091,22 @@ def Reference_pickler(data):
copyreg.pickle(Reference, Reference_pickler, Reference_unpickler)
class MethodAdder(object):
def __init__(self,table):
self.table = table
def __call__(self):
return self.register()
def __getattr__(self,method_name):
return self.register(method_name)
def register(self,method_name=None):
def _decorated(f):
instance = self.table
import types
method = types.MethodType(f, instance, instance.__class__)
name = method_name or f.func_name
setattr(instance, name, method)
return f
return _decorated
class Table(object):
@@ -8145,6 +8161,8 @@ class Table(object):
self._after_update = []
self._after_delete = []
self.add_method = MethodAdder(self)
fieldnames,newfields=set(),[]
if hasattr(self,'_primarykey'):
if not isinstance(self._primarykey,list):
+14
View File
@@ -275,6 +275,20 @@ class TestSelect(unittest.TestCase):
self.assertEqual(db(~(db.tt.aa > '1') & (db.tt.aa > '2')).count(), 0)
db.tt.drop()
class TestAddMethod(unittest.TestCase):
def testRun(self):
db = DAL(DEFAULT_URI, check_reserved=['all'])
db.define_table('tt', Field('aa'))
@db.tt.add_method.all
def select_all(table,orderby=None):
return table._db(table).select(orderby=orderby)
self.assertEqual(db.tt.insert(aa='1'), 1)
self.assertEqual(db.tt.insert(aa='2'), 2)
self.assertEqual(db.tt.insert(aa='3'), 3)
self.assertEqual(len(db.tt.all()), 3)
db.tt.drop()
class TestBelongs(unittest.TestCase):