Simple RPC with Protobuf Services
Project description
hyper-rpc
Simple RPC with Protobuf Services
Uses grpcio_tools and purerpc under the hood.
Install
$ pip install hyper-rpc
Example
TLDR; See the example directory
Define an RPC service in a greeter.proto.
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
rpc SayHelloGoodbye (HelloRequest) returns (stream HelloReply) {}
rpc SayHelloToMany (stream HelloRequest) returns (stream HelloReply) {}
rpc SayHelloToManyAtOnce (stream HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Then generate the services and stubs with hyper-rpc.
$ pip install hyper-rpc
$ hrpc greeter.proto
This creates greeter_gprc.py (services) and greeter_pb2.py (stubs) files.
You can then write an async-ready server.
"""Greeter server."""
from greeter_grpc import GreeterServicer
from greeter_pb2 import HelloReply, HelloRequest
from purerpc import Server
class Greeter(GreeterServicer):
async def SayHello(self, message):
return HelloReply(message=f"Hello {message.name}")
async def SayHelloToMany(self, input_messages):
async for message in input_messages:
yield HelloReply(message=f"Hello, {message.name}")
if __name__ == "__main__":
server = Server(50055)
server.add_service(Greeter().service)
server.serve(backend="trio")
And a client.
"""Greeter client."""
import anyio
import purerpc
from greeter_grpc import GreeterStub
from greeter_pb2 import HelloReply, HelloRequest
async def gen():
for i in range(5):
yield HelloRequest(name=str(i))
async def main():
async with purerpc.insecure_channel("localhost", 50055) as channel:
stub = GreeterStub(channel)
reply = await stub.SayHello(HelloRequest(name="World"))
print(reply.message)
async for reply in stub.SayHelloToMany(gen()):
print(reply.message)
if __name__ == "__main__":
anyio.run(main, backend="trio")
And run them in separate terminals to see the output.
$ python server.py # terminal 1
$ python client.py # terminal 2
Output:
Hello, World
Hello, 0
Hello, 1
Hello, 2
Hello, 3
Hello, 4
Go forth and Remote Procedure Call.
Project details
Release history Release notifications | RSS feed
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 hyper-rpc-0.0.1a4.tar.gz.
File metadata
- Download URL: hyper-rpc-0.0.1a4.tar.gz
- Upload date:
- Size: 15.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.9 CPython/3.8.0 Linux/4.9.0-13-amd64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c5434d8711fd590ecd5b902171517661d8ca6302f16c9962f7d758841936ac97
|
|
| MD5 |
2d39cf1c35c3152f1132d026533a3884
|
|
| BLAKE2b-256 |
a5f256dd97c7c10dbdc7bce5939bbd59ceb4985f0b4a94a260a1a5fd229066a9
|
File details
Details for the file hyper_rpc-0.0.1a4-py3-none-any.whl.
File metadata
- Download URL: hyper_rpc-0.0.1a4-py3-none-any.whl
- Upload date:
- Size: 15.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.0.9 CPython/3.8.0 Linux/4.9.0-13-amd64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37dcb611dee7536e11c62560df85bda57a4f0998e0be013bf7ad08c26865fbcb
|
|
| MD5 |
6b18eeac538a3c7737f7edf08dca6284
|
|
| BLAKE2b-256 |
f9c783157fd2de0da54af75d267a482996d53358e2b893c0f0a3b91093b088e1
|