如何使用 grpc 修复 python 中的“类型错误:不允许位置参数”

Alb*_*pez 6 python protocol-buffers grpc

我正在使用 Ubuntu 18.04.3 (LTS) x64 在 python 中使用 grpc 设置微服务。

我尝试更改分配参数的方式从我的协议文件重新生成代码

客户代码

class Cliente():

    def IniciarCliente(self):
        id = uuid.uuid1() 
        channel = grpc.insecure_channel('localhost:50051')
        try:
            grpc.channel_ready_future(channel).result(timeout=10)
        except grpc.FutureTimeoutError:
            sys.exit('Error al conectar con el servidor')
        else:
            conn = grpc_chat.ChatAdminStub(channel)
            metadata = [('ip', '127.0.0.1')]
            respuestaServidor = conn.Subscribirse(
                structure.CrearUsuarioRequest(
                 structure.Usuario(
                     id.hex,
                     "coso",
                     True
                 )
                )                
            )
            if respuestaServidor:
                print("Usuario subscrito:", respuestaServidor)
Run Code Online (Sandbox Code Playgroud)

服务器代码

class Servidor(grpc_chat.ChatAdminServicer):

    def Subscribirse(self, request, context):
        metadata = dict(context.invocation_metadata())
        print(metadata)
        usuario = structure.Usuario(
            id = request.id,
            username = request.usuario,
            estado = request.estado
        )
        usuario_server = Usuario(
            id = request.id,
            username = request.username,
            estado = request.estado
        )
        self.clientes.append(usuario_server)
        EXITO = "Usuario agregado"
        return structure.Respuesta(respuesta = EXITO) 
Run Code Online (Sandbox Code Playgroud)

协议文件

//Se agrega al servidor
rpc Subscribirse(CrearUsuarioRequest) returns (Respuesta);

message Usuario {
  string id = 1;
  string username = 2;
  bool estado = 3;
}

message CrearUsuarioRequest{ 
  Usuario usuario = 1; 
}

message Respuesta{
  string respuesta = 1;
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,即使我更改参数的顺序,我似乎也没有改变。

(grpcenv) root@merixo-grpc-development:/grpc/chat# python Cliente.py
Traceback (most recent call last):
  File "Cliente.py", line 34, in <module>
    cliente.IniciarCliente()
  File "Cliente.py", line 25, in IniciarCliente
    True
TypeError: No positional arguments allowed
Run Code Online (Sandbox Code Playgroud)