Eazy gRPC: dynamic protobuf generation from Python type hints
Project description
egrpc (eazy gRPC)
egrpc is a Python framework for transparent inter-process communication over gRPC.
It generates protobuf definitions and gRPC services automatically from Python type hints at import time, eliminating the need for .proto files or manual code generation.
Just add decorators and your functions and classes become callable across process boundaries.
Installation
pip install egrpc
Usage
Remote functions
@egrpc.function makes a function callable over gRPC.
Arguments and return values are serialized automatically based on type hints.
import egrpc
@egrpc.function
def add(x: int, y: int) -> int:
return x + y
Supported types include int, float, str, bool, None, list, dict, tuple, Union, Optional, slice, and nested combinations.
Dataclasses
@egrpc.dataclass defines a value type that is passed by value (serialized by field) across the RPC boundary.
@egrpc.dataclass
class Point:
x: float
y: float
@egrpc.function
def distance(p1: Point, p2: Point) -> float:
return ((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2) ** 0.5
Remote classes
@egrpc.remoteclass defines a stateful object that lives on the server.
The client holds a lightweight reference and calls methods via gRPC.
@egrpc.remoteclass
class Counter:
@egrpc.method
def __init__(self, initial: int = 0):
self._count = initial
@egrpc.property
def count(self) -> int:
return self._count
@egrpc.method
def increment(self) -> None:
self._count += 1
Server / Client
Server:
egrpc.serve(port=12345)
Client:
egrpc.connect("localhost", 12345)
print(add(1, 2)) # 3
print(distance(Point(0, 0), Point(3, 4))) # 5.0
c = Counter(10)
c.increment()
print(c.count) # 11
egrpc.disconnect()
Development
This project is managed using uv.
Test:
uv run pytest
Type check:
uv run mypy --strict src/ test/
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Copyright 2025 TOYOTA MOTOR CORPORATION.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file egrpc-0.0.1.tar.gz.
File metadata
- Download URL: egrpc-0.0.1.tar.gz
- Upload date:
- Size: 44.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ffa9ad736fa38e8f2a28c898fcb6f144ca3e0bec9d529700796823418477f7a5
|
|
| MD5 |
42b6433af4ace23c1ef685c4c61cf82a
|
|
| BLAKE2b-256 |
9e739fb5fddcc69db642f1eb2d64bb688b824294d395b1d09e38ea09fac43701
|
File details
Details for the file egrpc-0.0.1-py3-none-any.whl.
File metadata
- Download URL: egrpc-0.0.1-py3-none-any.whl
- Upload date:
- Size: 25.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.1 {"installer":{"name":"uv","version":"0.11.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efee248249e1fb73d65fe31920832f2db52dd0cd7f413ddaa33ccddacfe180d9
|
|
| MD5 |
0821403947b6b1e18da81c818649e089
|
|
| BLAKE2b-256 |
4d2e2efb9782397760fdb726e4dde30a6ab7708c82dcb52fc3d2b8772591db0b
|