Skip to main content

GRPC support for Muffin framework.

Project description

Tests Status PyPI Version

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

muffin_grpc-0.9.1.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

muffin_grpc-0.9.1-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

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

Hashes for muffin_grpc-0.9.1.tar.gz
Algorithm Hash digest
SHA256 bf80bfc506fd887c78b047acbd2ebad7ef37c2ab5f3d15202bb90d0c4279fc1b
MD5 dd899aa44bfb0ffc16d516658b334b75
BLAKE2b-256 a559439d0af07ba1eb995594b485a84c68d7e2ff5d7850764f16d3a0536b7eeb

See more details on using hashes here.

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

Hashes for muffin_grpc-0.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a9a5e78a5ca6a34f8906a44667e654dd5d53a102cf308c9349973f4f44628902
MD5 47b4fc873e70c081ed10a5372fe7fb78
BLAKE2b-256 723e9e8371047c606537c87ba995fa673e3ba9b39125132e0e4ca5ca393954ba

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page