def callback(frm, name, value, old_locals): import inspect funcname = value.__name__ args, varargs, kwargs, defaults = inspect.getargspec(value) if argument_name not in args: raise NameError("%r does not have an argument named %r" % (value, argument_name)) argpos = args.index(argument_name) func = value def when(cond): """Add following function to this GF, using 'cond' as a guard""" def callback(frm, name, value, old_locals): core.when(func, (object, ) * argpos + (cond, ))(value) if old_locals.get(name) is func: return func return value return decorate_assignment(callback) def clone(): raise AssertionError("PEAK-Rules can't clone() generic functions") func.when = when func.clone = clone return core.abstract(func)
def callback(frm,name,value,old_locals): import inspect funcname = value.__name__ args, varargs, kwargs, defaults = inspect.getargspec(value) if argument_name not in args: raise NameError("%r does not have an argument named %r" % (value, argument_name)) argpos = args.index(argument_name) func = value def when(cond): """Add following function to this GF, using 'cond' as a guard""" def callback(frm,name,value,old_locals): core.when(func, (object,)*argpos + (cond,))(value) if old_locals.get(name) is func: return func return value return decorate_assignment(callback) def clone(): raise AssertionError("PEAK-Rules can't clone() generic functions") func.when = when func.clone = clone return core.abstract(func)
def callback(frm,name,value,old_locals): value.when = core.when.__get__(value) value.around = core.around.__get__(value) value.before = core.before.__get__(value) value.after = core.after.__get__(value) def clear(): core.rules_for(value).clear() value.clear = clear return core.abstract(value)
def callback(frm, name, value, old_locals): value.when = core.when.__get__(value) value.around = core.around.__get__(value) value.before = core.before.__get__(value) value.after = core.after.__get__(value) def clear(): core.rules_for(value).clear() value.clear = clear return core.abstract(value)
def callback(frame, name, func, old_locals): if core.Dispatching.exists_for(func) and list(core.rules_for(func)): raise RuntimeError("Methods already defined for", func) if is_abstract: func = abstract(func) r = core.Dispatching(func).rules if r.default_actiontype is not core.Method: raise RuntimeError("Method type already defined for", func) r.default_actiontype = core.MethodList.make r.methodlist_wrappers = wrappers[::-1] if not is_abstract: r.add(core.Rule(core.clone_function(func))) return func