浏览代码

Fix Python service CallMethod() implementation.

Patch from Johan Euphrosine <proppy@aminche.com>
temporal 17 年之前
父节点
当前提交
e8564291e2

+ 18 - 0
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):

+ 2 - 2
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.