Allow individual hook registration to override ID
[ikiwiki.git] / plugins / proxy.py
index ea0ca96462c500e790b19dfb2d869eb803845e46..b4758b06059cc60ca5e33c257ad95cf9c2feea7a 100644 (file)
@@ -178,13 +178,16 @@ class IkiWikiProcedureProxy(object):
             ret = None
         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:
             raise IkiWikiProcedureProxy.AlreadyImported
 
         if name is None:
             name = function.__name__
 
+        if id is None:
+            id = self._id
+
         def hook_proxy(*args):
 #            curpage = args[0]
 #            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
             return ret
 
-        self._hooks.append((type, name, last))
+        self._hooks.append((id, type, name, last))
         self._xmlrpc_handler.register_function(hook_proxy, name=name)
 
     def inject(self, rname, function, name=None, memoize=True):
@@ -258,9 +261,9 @@ class IkiWikiProcedureProxy(object):
 
     def _importme(self):
         self._debug_fn('importing...')
-        for type, function, last in self._hooks:
-            self._debug_fn('hooking %s into %s chain...' % (function, type))
-            self.rpc('hook', id=self._id, type=type, call=function, last=last)
+        for id, type, function, last in self._hooks:
+            self._debug_fn('hooking %s/%s into %s chain...' % (id, function, type))
+            self.rpc('hook', id=id, type=type, call=function, last=last)
         for rname, function, memoize in self._functions:
             self._debug_fn('injecting %s as %s...' % (function, rname))
             self.rpc('inject', name=rname, call=function, memoize=memoize)