Код: Выделить всё
message GetServiceResponse {
string service_name = 1;
string service_ip = 2;
string service_port = 3;
string proto_file = 4; # protofile in base64
}
Я пытался создайте модуль таким образом. Файлы gRPC генерируются в /app/generated/{service_name, а затем я пытаюсь сгенерировать модуль.
Код: Выделить всё
def _create_grpc_stub(self, service_name: str, service_ip: str, service_port: str):
module = __import__(f'generated.{service_name}')
service_class = getattr(module, service_name)
channel = grpc.insecure_channel(f'{service_ip}:{service_port}')
config.logger.debug(f"Stub created for '{service_name}'")
return service_class(channel)
def select_tool(self, query: str):
#...
config.logger.debug("Creating service STUB...")
stub = self._create_grpc_stub(
service_name=result.service_name,
service_ip=result.service_ip,
service_port=result.service_port
)
Код: Выделить всё
2024-11-05 13:15:28 2024-11-05 12:15:28,980 [ERROR] Error processing selection of tool: 'module' object is not callable
2024-11-05 13:15:28 2024-11-05 12:15:28,980 [ERROR] Exception serializing message!
2024-11-05 13:15:28 Traceback (most recent call last):
2024-11-05 13:15:28 File "/usr/local/lib/python3.12/site-packages/grpc/_common.py", line 89, in _transform
2024-11-05 13:15:28 return transformer(message)
2024-11-05 13:15:28 ^^^^^^^^^^^^^^^^^^^^
2024-11-05 13:15:28 TypeError: descriptor 'SerializeToString' for 'google._upb._message.Message' objects doesn't apply to a 'NoneType' object
РЕДАКТИРОВАТЬ:
После некоторой проверки этого клиента gRPC с отражением я думаю, что его можно использовать для этого конкретного случая, единственное, что мне нужно, это способ вызова указанных методов, потому что я не знаю, как это сделать, как в примере. не сделано, и проверка документов тоже не помогла. Я нашел интерфейс командной строки gRPC, который делает это, но мне нужен способ сделать это с помощью кода Python. Использование CLI кажется мне слишком сложным.
Подробнее здесь: https://stackoverflow.com/questions/791 ... -in-python
Мобильная версия