mirror of
https://github.com/EDeev/api_processor.git
synced 2026-10-07 20:49:34 +03:00
Путь к сгенерированным модулям считался на уровень выше репозитория, импорт всегда падал, и вместо gRPC работала заглушка с поддельным success: true. Путь исправлен, заглушка убрана; адрес и таймаут — GRPC_SERVER и GRPC_TIMEOUT (пусто — шаг пропускается), недоступный сервер даёт success: false. proto/*_pb2*.py пересобраны под актуальный protobuf.
38 lines
1.7 KiB
Python
38 lines
1.7 KiB
Python
import logging
|
||
import os
|
||
import sys
|
||
|
||
import grpc
|
||
from django.conf import settings
|
||
|
||
# сгенерированные модули лежат в proto/ в корне репозитория (раньше путь считался на уровень
|
||
# выше репозитория — импорт всегда падал, и вместо настоящего gRPC работала заглушка
|
||
# с поддельным success: true)
|
||
PROTO_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), "proto")
|
||
if PROTO_DIR not in sys.path:
|
||
sys.path.append(PROTO_DIR)
|
||
|
||
import text_service_pb2 # noqa: E402
|
||
import text_service_pb2_grpc # noqa: E402
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
def send_to_grpc_server(text: str):
|
||
"""Отправляет текст на gRPC-сервер TextProcessor. Если адрес сервера не задан
|
||
(GRPC_SERVER пустой), шаг пропускается и возвращается None"""
|
||
if not settings.GRPC_SERVER:
|
||
return None
|
||
|
||
try:
|
||
with grpc.insecure_channel(settings.GRPC_SERVER) as channel:
|
||
stub = text_service_pb2_grpc.TextProcessorStub(channel)
|
||
response = stub.ProcessText(text_service_pb2.TextRequest(text=text), timeout=settings.GRPC_TIMEOUT)
|
||
return {
|
||
'processed_text': response.processed_text,
|
||
'success': response.success,
|
||
'error': response.error or None,
|
||
}
|
||
except grpc.RpcError as e:
|
||
logger.warning("gRPC-сервер %s недоступен: %s", settings.GRPC_SERVER, e.code())
|
||
return {'processed_text': None, 'success': False, 'error': f"gRPC: {e.code().name}"}
|