Skip to main content

hexastack-grpc

hexastack-grpc

High-performance gRPC presentation adapter, interceptors, and CQRS service integration for Hexastack.

PyPI: hexastack-grpc Python 3.13+ Coverage License: Apache 2.0

1. Overview & Capabilities

hexastack-grpc provides a binary RPC presentation adapter for Hexastack applications:

  • Declarative Service Registration (@grpc_service): Mounts generated protobuf RPC servicers onto the grpc.Server with automatic DI resolution.
  • gRPC Health Checking Protocol: Standard grpc.health.v1.Health servicer (GrpcHealthServicer) supporting Kubernetes liveness, readiness, and stream health probes.
  • Bidirectional & Server-Streaming RPC Dispatch: dispatch_rpc_stream_query and dispatch_rpc_bidirectional_stream streaming CQRS command and query pipelines over HTTP/2.
  • Cross-Cutting Interceptor Pipeline:
    • CorrelationServerInterceptor: Propagates x-correlation-id from incoming metadata into ContextVar.
    • LoggingServerInterceptor: Structured telemetry for RPC method invocations.
    • TimingServerInterceptor: Measures RPC execution latency in milliseconds.
    • MetricsServerInterceptor: Records RPC request rates, statuses, and handling durations to MetricsPort.
  • Single-Pass Reflection: Automatically discovers and registers decorated servicers in Phase 3 module scanning via create_grpc_visitor.
  • gRPC Server Reflection: Automatically enables gRPC Server Reflection Protocol when grpcio-reflection is installed.

2. Package Anatomy & Key Components

hexastack_grpc/
├── domain/          # GrpcError, ServiceRegistrationError, RpcExecutionError
├── adapters/        # create_async_grpc_server, run_grpc_server, GrpcHealthServicer
└── infra/
    ├── bootstrap.py # GrpcBootstrapper (order=40)
    ├── config.py    # HexastackGrpcConfig
    ├── decorators.py# @grpc_service
    ├── dispatch.py  # dispatch_rpc_command, dispatch_rpc_query, dispatch_rpc_stream_query, dispatch_rpc_bidirectional_stream
    ├── autodiscovery.py # create_grpc_visitor, autodiscover_grpc_services
    ├── interceptors/# correlation, logging, timing interceptors
    └── registries/  # service.py (GrpcServiceRegistry)

3. Monorepo & Sibling Relationships

graph TD
    subgraph Clients ["gRPC Clients (Microservices, Mobile, Gateway)"]
        CLIENT["gRPC Protobuf Client"]
    end

    subgraph GrpcAdapter ["hexastack-grpc"]
        SERVER["grpc.Server"]
        INTERCEPTORS["Interceptors (Correlation, Logging, Timing)"]
        REG["GrpcServiceRegistry"]
        SERVICER["CQRS Protobuf Servicer"]
    end

    subgraph CQRSExecution ["hexastack-cqrs"]
        CBUS["CommandBusPort"]
        QBUS["QueryBusPort"]
    end

    CLIENT --> SERVER
    SERVER --> INTERCEPTORS
    INTERCEPTORS --> SERVICER
    SERVICER -->|dispatches commands| CBUS
    SERVICER -->|dispatches queries| QBUS

Explicit Dependencies (Direct)

  • hexastack-core: DI container (rodi), configuration registry, context variables.
  • hexastack-cqrs: CommandBusPort and QueryBusPort.
  • grpcio>=1.68.0, protobuf>=5.29.0.

Optional Integrations (Extras)

  • [reflection]: Installs grpcio-reflection>=1.68.0 for runtime service reflection tools (grpcurl, Postman).

4. Installation

# Standalone installation
pip install hexastack-grpc

# With Server Reflection support
pip install "hexastack-grpc[reflection]"

# Via umbrella package
pip install "hexastack[grpc]"

5. Configuration Reference

[hexastack.grpc]
host = "0.0.0.0"
port = 50051
max_workers = 10
enable_reflection = true
auto_start = false

6. Quickstart Example

from hexastack_core.infra.bootstrap import bootstrap
from hexastack_grpc.infra.decorators import grpc_service


# 1. Define Servicer implementing generated protobuf class
class GreeterServicer:
    def SayHello(self, request, context):
        return HelloReply(message=f"Hello, {request.name}!")


# 2. Register Servicer with generated add hook
@grpc_service(add_GreeterServicer_to_server)
class GreeterService(GreeterServicer):
    pass


# 3. Bootstrap Runtime and Start Server
runtime = bootstrap(packages_to_scan=[__name__])
grpc_server = runtime.get("grpc_server")
grpc_server.start()

Metadata

Release files for hexastack-grpc 0.4.0

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

Source distribution (sdist)

Source distribution for hexastack-grpc 0.4.0
File Size Uploaded
hexastack_grpc-0.4.0.tar.gz 14.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hexastack-grpc 0.4.0
File Interpreter ABI Platform
hexastack_grpc-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 38.8 kB

Release files / hexastack_grpc-0.4.0.tar.gz

Download URL hexastack_grpc-0.4.0.tar.gz
Size 14.6 kB
Tags Source
SHA-256 checksum
How to use checksums
58a0efa52746cc03b235460dd99421f8a9d99ad3e0d93b3e7fb2632b2bee629e
BLAKE2b-256 checksum
How to use checksums
8c715c58e2f0cc281e408f9266024d626e011ba4a0525c5fde6de29c8108e996
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / hexastack_grpc-0.4.0-py3-none-any.whl

Download URL hexastack_grpc-0.4.0-py3-none-any.whl
Size 24.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b75d0985eb5cc420fda413b5677fbc25751f8a1770954a37f01ac90cfc7efd93
BLAKE2b-256 checksum
How to use checksums
6349d8241184391c494fc38be2990e6e09f5727f850cf9e47cc237f9ba59209b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

This release

0.4.0 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.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