diff -r 2a5a19185288 -r 06807984e610 vregistry.py --- a/vregistry.py Tue Feb 17 21:42:33 2009 +0100 +++ b/vregistry.py Tue Feb 17 21:46:46 2009 +0100 @@ -638,6 +638,19 @@ return NotImplementedError("selector %s must implement its logic " "in its __call__ method" % self.__class__) + +def objectify_selector(selector_func): + """convenience decorator for simple selectors where a class definition + would be overkill:: + + @objectify_selector + def yes(cls, *args, **kwargs): + return 1 + + """ + return type(selector_func.__name__, (Selector,), + {'__call__': lambda self, *args: selector_func(*args)}) + class AndSelector(Selector): """and-chained selectors (formerly known as chainall)"""