From 18190b4ca1ca78f0d4f76b3cdadb426e95aa7ded Mon Sep 17 00:00:00 2001
From: David Raila <raila@illinois.edu>
Date: Fri, 18 Jul 2008 16:35:38 +0000
Subject: [PATCH] Fix Python service CallMethod() implementation.

Patch from Johan Euphrosine <proppy@aminche.com>
---
 .../internal/service_reflection_test.py        | 18 ++++++++++++++++++
 python/google/protobuf/service_reflection.py   |  4 ++--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/python/google/protobuf/internal/service_reflection_test.py b/python/google/protobuf/internal/service_reflection_test.py
index 895d24d..d43ed64 100755
--- a/python/google/protobuf/internal/service_reflection_test.py
+++ b/python/google/protobuf/internal/service_reflection_test.py
@@ -64,6 +64,24 @@ class FooUnitTest(unittest.TestCase):
     self.assertEqual('Method Bar not implemented.',
                      rpc_controller.failure_message)
     self.assertEqual(None, self.callback_response)
+    
+    class MyServiceImpl(unittest_pb2.TestService):
+      def Foo(self, rpc_controller, request, done):
+        self.foo_called = True
+      def Bar(self, rpc_controller, request, done):
+        self.bar_called = True
+
+    srvc = MyServiceImpl()
+    rpc_controller.failure_message = None
+    srvc.Foo(rpc_controller, unittest_pb2.FooRequest(), MyCallback)
+    self.assertEqual(None, rpc_controller.failure_message)
+    self.assertEqual(True, srvc.foo_called)
+
+    rpc_controller.failure_message = None
+    srvc.CallMethod(service_descriptor.methods[1], rpc_controller,
+                    unittest_pb2.BarRequest(), MyCallback)
+    self.assertEqual(None, rpc_controller.failure_message)
+    self.assertEqual(True, srvc.bar_called)
 
   def testServiceStub(self):
     class MockRpcChannel(service.RpcChannel):
diff --git a/python/google/protobuf/service_reflection.py b/python/google/protobuf/service_reflection.py
index 6e3bf14..6439eaa 100755
--- a/python/google/protobuf/service_reflection.py
+++ b/python/google/protobuf/service_reflection.py
@@ -160,8 +160,8 @@ class _ServiceBuilder(object):
     if method_descriptor.containing_service != self.descriptor:
       raise RuntimeError(
           'CallMethod() given method descriptor for wrong service type.')
-    method = getattr(self.cls, method_descriptor.name)
-    method(srvc, rpc_controller, request, callback)
+    method = getattr(srvc, method_descriptor.name)
+    method(rpc_controller, request, callback)
 
   def _GetRequestClass(self, method_descriptor):
     """Returns the class of the request protocol message.
-- 
GitLab