GRPC support for Muffin framework.
Project description
Muffin-GRPC is a plugin for the Muffin framework that brings gRPC support to your application.
Features
📦 Automatically compiles .proto files to Python
⚙️ Simplified gRPC server and client integration
🔁 CLI commands to manage proto compilation and server lifecycle
🧩 Automatically handles proto dependencies and import fixes
🧪 Designed with asyncio and modern Python standards
Requirements
Python >= 3.10
grpcio
grpcio-tools
protobuf
muffin
Installation
Install via pip:
pip install muffin-grpc
Usage
Set up the plugin and attach it to your Muffin application:
from muffin import Application
from muffin_grpc import Plugin as GRPC
app = Application("example")
grpc = GRPC(default_channel="localhost:50051")
grpc.setup(app)
Create a helloworld.proto:
syntax = "proto3";
package helloworld;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Register the file:
grpc.add_proto("project_name/proto/helloworld.proto")
Compile proto files:
muffin project_name grpc_build
This generates:
helloworld_pb2.py — messages
helloworld_pb2_grpc.py — gRPC services
helloworld.py — bundled import helper
__init__.py — so the folder is importable
Now implement the Greeter service:
from .proto.helloworld import GreeterServicer, HelloReply, HelloRequest
import grpc.aio as grpc_aio
@grpc.add_to_server
class Greeter(GreeterServicer):
async def SayHello(
self, request: HelloRequest, context: grpc_aio.ServicerContext
) -> HelloReply:
return HelloReply(message=f"Hello, {request.name}!")
Run the gRPC server:
muffin project_name grpc_server
Client example:
from .proto.helloworld import GreeterStub, HelloRequest
from aiohttp.web import Application, Response
@app.route("/")
async def index(request):
name = request.url.query.get("name", "anonymous")
try:
async with grpc.get_channel() as channel:
stub = GreeterStub(channel)
response = await stub.SayHello(HelloRequest(name=name), timeout=10)
return Response(text=response.message)
except grpc_aio.AioRpcError as exc:
return Response(text=exc.details())
Configuration
You can configure the plugin either via setup() or using GRPC_ prefixed settings in the Muffin app config.
Available options:
Name |
Default value |
Description |
|---|---|---|
build_dir |
None |
Directory to store compiled files |
server_listen |
“[::]:50051” |
gRPC server address |
ssl_server |
False |
Enable SSL for server |
ssl_server_params |
None |
Tuple of credentials for SSL server |
ssl_client |
False |
Enable SSL for client |
ssl_client_params |
None |
Tuple of credentials for SSL client |
default_channel |
“localhost:50051” |
Default gRPC client target |
default_channel_options |
{} |
Additional gRPC options |
Via setup():
grpc.setup(app, server_listen="localhost:40000")
Or from config:
GRPC_SERVER_LISTEN = "localhost:40000"
CLI Commands
Build registered proto files:
muffin project_name grpc_build
Start the gRPC server:
muffin project_name grpc_server
Bug Tracker
Found a bug or have a suggestion? Submit an issue here: https://github.com/klen/muffin-grpc/issues
Contributing
Want to contribute? Pull requests are welcome! Development happens at: https://github.com/klen/muffin-grpc
License
Licensed under the MIT license.
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 muffin_grpc-0.9.1.tar.gz.
File metadata
- Download URL: muffin_grpc-0.9.1.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.3 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf80bfc506fd887c78b047acbd2ebad7ef37c2ab5f3d15202bb90d0c4279fc1b
|
|
| MD5 |
dd899aa44bfb0ffc16d516658b334b75
|
|
| BLAKE2b-256 |
a559439d0af07ba1eb995594b485a84c68d7e2ff5d7850764f16d3a0536b7eeb
|
File details
Details for the file muffin_grpc-0.9.1-py3-none-any.whl.
File metadata
- Download URL: muffin_grpc-0.9.1-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.3 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9a5e78a5ca6a34f8906a44667e654dd5d53a102cf308c9349973f4f44628902
|
|
| MD5 |
47b4fc873e70c081ed10a5372fe7fb78
|
|
| BLAKE2b-256 |
723e9e8371047c606537c87ba995fa673e3ba9b39125132e0e4ca5ca393954ba
|