summaryrefslogtreecommitdiff
path: root/net/py-kenosis/patches/patch-aa
blob: 1fffb0e0c0efc52fa332a90f664f94fd39b47993 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
$NetBSD: patch-aa,v 1.1 2005/02/04 17:24:16 drochner Exp $

--- kenosis/node.py.orig	2005-02-04 17:40:36.000000000 +0100
+++ kenosis/node.py
@@ -309,7 +309,8 @@ class NullHandler:
 class NodeRpcFrontend:
     def __init__(self, nodeKernel):
         self.nodeKernel_ = nodeKernel
-        self.kenosis = RpcServerAdapter(
+	self.services = {}
+        self.services["kenosis"] = RpcServerAdapter(
             adaptee=NodeRpcFilter(nodeKernel=nodeKernel),
             nodeKernel=self.nodeKernel_, serviceName="kenosis")
 
@@ -319,22 +320,28 @@ class NodeRpcFrontend:
     def registerNamedHandler(self, name, handler):
         if nameIsPrivate(name=name):
             raise Exception("invalid handler: %s" % name)
-        setattr(
-            self, name,
-            RpcServerAdapter(adaptee=handler, nodeKernel=self.nodeKernel_, serviceName=name))
+        self.services[name] = \
+            RpcServerAdapter(adaptee=handler, nodeKernel=self.nodeKernel_, serviceName=name)
+
+    def _dispatch(self, name, args):
+	(sname, rest) = name.split('.', 1)
+	fn = SimpleXMLRPCServer.resolve_dotted_attribute(
+		self.services[sname], rest)
+	return fn(*args)
+
 
     def _listMethods(self):
         ret = []
-        for attrName in dir(self):
-            attr = getattr(self, attrName)
+        for attrName in keys(self.services):
+            attr = self.services[attrName]
             if isinstance(attr, RpcServerAdapter): 
                 for methodName in attr._listPublicMethod():
                     ret.append("%s.%s" % (attrName, methodName))
         return ret
 
     def _methodHelp(self, method):
-        for attrName in dir(self):
-            attr = getattr(self, attrName)
+        for attrName in keys(self.services):
+            attr = self.services[attrName]
             if isinstance(attr, RpcServerAdapter): 
                 for methodName in attr._listPublicMethod():
                     n = "%s.%s" % (attrName, methodName)