1from zope.interface.advice import addClassAdvisor 2 3def method_factory_factory(method): 4 def factory(regex): 5 _f = {} 6 def decorator(f): 7 _f[f.__name__] = f 8 return f 9 def advisor(cls): 10 def wrapped(f): 11 def __init__(self, *args, **kwargs): 12 f(self, *args, **kwargs) 13 for func_name in _f: 14 orig = _f[func_name] 15 func = getattr(self, func_name) 16 if func.im_func==orig: 17 self.register(method, regex, func) 18 return __init__ 19 cls.__init__ = wrapped(cls.__init__) 20 return cls 21 addClassAdvisor(advisor) 22 return decorator 23 return factory 24 25ALL = method_factory_factory('ALL') 26GET = method_factory_factory('GET') 27POST = method_factory_factory('POST') 28PUT = method_factory_factory('PUT') 29DELETE = method_factory_factory('DELETE') 30