Allow individual hook registration to override ID

The preprocessor hooks need to specify IDs different from the ID used to
initialise the proxy. Thus, the hook function now takes an optional id
keyword argument and uses the ID used during initialisation if none is
provided.

Signed-off-by: martin f. krafft <madduck@madduck.net>
master
martin f. krafft 2008-03-21 19:12:16 +01:00 committed by Joey Hess
parent 86ec72c826
commit 17dc5df1f5
1 changed files with 8 additions and 5 deletions

View File

@ -178,13 +178,16 @@ class IkiWikiProcedureProxy(object):
ret = None ret = None
return ret return ret
def hook(self, type, function, name=None, last=False): def hook(self, type, function, name=None, id=None, last=False):
if self._imported: if self._imported:
raise IkiWikiProcedureProxy.AlreadyImported raise IkiWikiProcedureProxy.AlreadyImported
if name is None: if name is None:
name = function.__name__ name = function.__name__
if id is None:
id = self._id
def hook_proxy(*args): def hook_proxy(*args):
# curpage = args[0] # curpage = args[0]
# kwargs = dict([args[i:i+2] for i in xrange(1, len(args), 2)]) # kwargs = dict([args[i:i+2] for i in xrange(1, len(args), 2)])
@ -198,7 +201,7 @@ class IkiWikiProcedureProxy(object):
ret = IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL ret = IkiWikiProcedureProxy._IKIWIKI_NIL_SENTINEL
return ret return ret
self._hooks.append((type, name, last)) self._hooks.append((id, type, name, last))
self._xmlrpc_handler.register_function(hook_proxy, name=name) self._xmlrpc_handler.register_function(hook_proxy, name=name)
def inject(self, rname, function, name=None, memoize=True): def inject(self, rname, function, name=None, memoize=True):
@ -258,9 +261,9 @@ class IkiWikiProcedureProxy(object):
def _importme(self): def _importme(self):
self._debug_fn('importing...') self._debug_fn('importing...')
for type, function, last in self._hooks: for id, type, function, last in self._hooks:
self._debug_fn('hooking %s into %s chain...' % (function, type)) self._debug_fn('hooking %s/%s into %s chain...' % (id, function, type))
self.rpc('hook', id=self._id, type=type, call=function, last=last) self.rpc('hook', id=id, type=type, call=function, last=last)
for rname, function, memoize in self._functions: for rname, function, memoize in self._functions:
self._debug_fn('injecting %s as %s...' % (function, rname)) self._debug_fn('injecting %s as %s...' % (function, rname))
self.rpc('inject', name=rname, call=function, memoize=memoize) self.rpc('inject', name=rname, call=function, memoize=memoize)