def _new_(self, name):
'''Overwrite the hook ``name`` with a priorityhook.'''
if not hasattr(self.object, name):
cls = self.__class__
raise AttributeError("{:s}._new_({!r}) : Unable to create a hook for unknown method.".format('.'.join(('internal',__name__,cls.__name__)), name))
def method(hookinstance, *args):
if name in self.__cache and name not in self.__disabled:
hookq = self.__cache[name][:]
for _,func in heapq.nsmallest(len(hookq), hookq):
try:
res = func(*args)
except:
cls = self.__class__
message = functools.partial("{:s}.callback : {:s}".format, '.'.join(('internal',__name__,cls.__name__)))
logging.fatal("{:s}.callback : Callback for {:s} raised an exception.".format('.'.join(('internal',__name__,cls.__name__)), '.'.join((self.__type__.__name__,name))))
res = map(message, traceback.format_exception(*sys.exc_info()))
map(logging.fatal, res)
logging.warn("{:s}.callback : Hook originated from -> ".format('.'.join(('internal',__name__,cls.__name__))))
res = map(message, traceback.format_list(self.__traceback[name,func]))
map(logging.warn, res)
res = self.STOP
if not isinstance(res, self.result) or res == self.CONTINUE:
continue
elif res == self.STOP:
break
cls = self.__class__
raise TypeError("{:s}.callback : Unable to determine result type. : {!r}".format('.'.join(('internal',__name__,cls.__name__)), res))
supermethod = getattr(super(hookinstance.__class__, hookinstance), name)
return supermethod(*args)
return types.MethodType(method, self.object, self.object.__class__)
评论列表
文章目录