@db.table.add_method.name, thanks Vinicius
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user