Практикум: из исключений Python в коды статуса gRPC¶
Один внутренний ValueError проходит через три настоящих gRPC-сервера: без интерцептора (UNKNOWN с внутренним текстом), со стандартными настройками библиотеки (INVALID_ARGUMENT с безопасным описанием) и с явной таблицей приложения (INTERNAL, internal_error).
Другие проверки охватывают семь прикладных и внутренних ошибок, успешную выдачу счёта, явный context.abort(), статус в метриках и исходные ошибки в диагностике. Ожидаемые прикладные отказы не считаются серверными сбоями. Отдельная проверка ставит приёмник диагностики снаружи обработчика ошибок и подтверждает, что исходное исключение до него не доходит.
Хранение данных, метрики и приёмник ошибок заменены локальными имитаторами; ни база данных, ни внешние сервисы не используются. Тестовая закрытая строка помогает обнаружить утечку деталей в ответе. Логи ожидаемых исключений подавлены, чтобы были видны результаты проверок.
Нужен uv. Запустите из каталога docs/blog/lab/2026-09-07-python-exceptions-to-grpc-status-codes:
Версии закреплены в requirements.txt: grpc-server-kit 0.2.0, servicewright 0.13.1, grpcio 1.84.0, FastAPI 0.141.1, Uvicorn 0.53.0, HTTPX 0.28.1 и cryptography 50.0.1.
Сохраните соседний каталог 2026-09-07-production-grpc-server: практикум использует его прикладной код, имитаторы и зависимости.