Skip to main content

asyncgrpcclient

Async gRPC client wrapper над grpc.aio — callable URL и Metadata, error mapping (StatusCode → exceptions), endpoint-aliasing, чистый API в стиле async REST-клиента.

Установка

pip install asyncgrpcclient

Возможности

  • ✅ Тонкая обёртка над grpc.aio.insecure_channel / secure_channel
  • ✅ Endpoints как именованные алиасы методов на gRPC stub
  • ✅ Per-call metadata override (поверх default)
  • ✅ Error mapping: grpc.aio.AioRpcError → GrpcQueryError
  • ✅ Options с clone() / merge() для гибкой настройки timeout / status codes / extra kwargs
  • ✅ full_response режим (вернуть GrpcResponse или сам proto)

Быстрый старт

from asyncgrpcclient import AsyncGrpcClient

# stub сгенерирован из proto (grpc_tools.protoc → my_service_pb2_grpc.py)
from my_service_pb2_grpc import MyServiceStub
from my_service_pb2 import GetUserRequest

client = AsyncGrpcClient(
    stub=MyServiceStub,
    address="my-service:50051",
    endpoints={
        "get_user": "GetUser",
        "list_users": "ListUsers",
    },
    metadata={"x-tenant-id": "default"},
    timeout=5.0,
)

# через alias
user = await client("get_user", GetUserRequest(id=1))

# или напрямую через имя метода stub
user = await client("GetUser", GetUserRequest(id=1))

# с per-call metadata
user = await client(
    "get_user",
    GetUserRequest(id=1),
    metadata={"x-trace-id": "abc-123"},
)

# полный response объект
response = await client("get_user", GetUserRequest(id=1), full_response=True)
print(response.status_code, response.metadata)

await client.close()

Secure channel

import grpc

creds = grpc.ssl_channel_credentials(root_certificates=ca_pem)

client = AsyncGrpcClient(
    stub=MyServiceStub,
    address="my-service.example.com:443",
    secure=True,
    credentials=creds,
)

Error handling

from asyncgrpcclient import GrpcQueryError

try:
    user = await client("get_user", GetUserRequest(id=999))
except GrpcQueryError as exc:
    print(exc.code)   # grpc.StatusCode (NOT_FOUND, UNAVAILABLE, ...)
    print(exc.name)
    print(exc.message)

Options через ok_statuses

По умолчанию OK-статус: (grpc.StatusCode.OK,). Если нужно принять NOT_FOUND как валидный ответ:

import grpc

response = await client(
    "get_user",
    GetUserRequest(id=999),
    ok_statuses=[grpc.StatusCode.OK, grpc.StatusCode.NOT_FOUND],
    full_response=True,
)
if response.status_code == grpc.StatusCode.NOT_FOUND:
    user = None

API

Класс Описание
AsyncGrpcClient Основной клиент. __call__(endpoint, request, **opts)
BaseGrpcClient База с output() / parse_response_error()
GrpcURL host:port + endpoint alias mapping
GrpcMetadata Callable metadata, мерджит default + per-call
GrpcResponse Wrapper над proto response с status_code / metadata
ErrorResponse Для timeout / unavailable cases
GrpcQueryError Базовое исключение

Аналог

API параллелен sync REST-клиентам. Idiomatic для команд, у которых REST и gRPC живут вместе и хочется одинаковый стиль вызова.

License

MIT

Metadata

Release files for asyncgrpcclient 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for asyncgrpcclient 1.0.1
File Size Uploaded
asyncgrpcclient-1.0.1.tar.gz 7.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for asyncgrpcclient 1.0.1
File Interpreter ABI Platform
asyncgrpcclient-1.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 17.3 kB

Release files / asyncgrpcclient-1.0.1.tar.gz

Download URL asyncgrpcclient-1.0.1.tar.gz
Size 7.1 kB
Tags Source
SHA-256 checksum
How to use checksums
3a5923da04fe04877f2a7a4567c3457089570192234cac36bdd6bf38157a481f
BLAKE2b-256 checksum
How to use checksums
dbbed90411095b514817e7954318bfbac36677c22a84c0cae8a994b2d2cf48f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.0

Release files / asyncgrpcclient-1.0.1-py3-none-any.whl

Download URL asyncgrpcclient-1.0.1-py3-none-any.whl
Size 10.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
209267fa3cd47d6760791d78c4231f4b6d03e5d2f0fb7ed77a3aa8ce88bcefdd
BLAKE2b-256 checksum
How to use checksums
3c83f4b7be17c115c0ed55afcfdae5237b20f0d7198610b664f4af7b517ccce4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.0

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page