def call_method(self, method_descriptor, message): try: message_data = Serializer.serialize(message) request = _RpcRequest('', method_descriptor.name, message_data) serialized = _RpcRequestSerializer.serialize(request) self.connect() self.send(serialized) if method_descriptor.response_class: response = self.receive() if Serializer.can_deserialize(response, ErrorMessage): deserialized = Serializer.deserialize(response, ErrorMessage) raise ServerException(deserialized.message) else: return Serializer.deserialize(response, method_descriptor.response_class) finally: self.close()
def handle(self, method, data): method_descriptor = getattr(self._service, method)._descriptor message = Serializer.deserialize(data, method_descriptor.request_class) return method_descriptor.method(self._service, message)