This repository contains the gRPC model definitions (protobuf files) and generated Python code for Python microservices.
This package provides:
- Protocol Buffer definitions for gRPC services
- Generated Python gRPC stubs and type hints
- Code generation scripts for easy updates
py-micro-model/
├── proto/ # Protocol Buffer definitions
├── src/py_micro/model # Generated Python code (auto-generated)
├── scripts/ # Code generation scripts
│ └── generate.py # Main generation script
├── Makefile # Build automation
├── pyproject.toml # Poetry configuration
└── README.md # This file
- Python 3.8+
- Poetry
- Install dependencies:
make install
# or
poetry install- Generate gRPC code:
make generate
# or
poetry run python scripts/generate.py- Create a new
.protofile in theproto/directory - Define your service and message types following Protocol Buffer v3 syntax
- Run code generation:
make generateThe code generation script (scripts/generate.py) will:
- Clean the
src/directory - Generate Python gRPC stubs from all
.protofiles - Create proper Python package structure with
__init__.pyfiles - Fix import statements for proper module resolution
- Generate type stubs (
.pyifiles) for better IDE support
syntax = "proto3";
package my_service.v1;
service MyService {
rpc GetItem(GetItemRequest) returns (GetItemResponse);
}
message GetItemRequest {
string id = 1;
}
message GetItemResponse {
string id = 1;
string name = 2;
}make format
# or
poetry run black scripts/
poetry run isort scripts/make lint
# or
poetry run flake8 scripts/
poetry run mypy scripts/To use the generated models in your service:
- Add this package as a dependency in your service's
pyproject.toml:
[tool.poetry.dependencies]
py-micro-models = "^1.0.0"- Import and use the generated classes:
from py_micro.model.template_service_pb2 import HealthCheckRequest
from py_micro.model.template_service_pb2_grpc import TemplateServiceServicer- Versioning: Use package versioning in your proto definitions (e.g.,
my_service.v1) - Backwards Compatibility: Follow protobuf best practices for field numbering and evolution
- Documentation: Document your services and messages with comments
- Validation: Consider adding validation rules using proto annotations
- Testing: Write tests for your proto definitions and generated code
- Import Errors: Make sure you've run
make generateafter modifying proto files - Module Not Found: Ensure the
src/py_micro/modeldirectory has proper__init__.pyfiles - Type Checking: Use the generated
.pyifiles for better IDE support
If you encounter issues with generated code:
make clean
make generate- Add or modify
.protofiles in theproto/directory - Run tests to ensure everything works
- Update documentation if needed
- Regenerate code before committing