Inter-Process Communication (IPC) library for Python with type safety
Project description
🌟 Features
- ✨ Simple and intuitive API for IPC communication
- 🔒 Type-safe request/response handling with Pydantic models
- 🪶 Lightweight and efficient
- 📦 Efficient data serialization
- 🔌 Easy integration with any Python application
📦 Installation
Choose your preferred installation method:
# Using pip (recommended)
pip install ipcx-typed
# Using poetry
poetry add ipcx-typed
# Using pipenv
pipenv install ipcx-typed
Requirements
- Python 3.9 or higher
- aiohttp >= 3.11.16
- pydantic >= 2.11.3
🚀 Quick Start
Here's a minimal example to get you started:
from pydantic import BaseModel
from ipcx import Server, Client
# Define your data model
class Message(BaseModel):
content: str
# Server
async def run_server():
server = Server(host="localhost", port=8080)
@server.route(param_model=Message, return_model=Message)
async def echo(request: Message) -> Message:
return Message(content=f"Echo: {request.content}")
await server.start()
# Client
async def run_client():
client = Client(host="localhost", port=8080)
response = await client.request(
"echo",
Message(content="Hello, World!"),
Message
)
print(response.content) # Output: Echo: Hello, World!
Basic Usage
Here's a simple calculator example demonstrating the usage of ipcx:
from pydantic import BaseModel
from ipcx import Server, Client
from typing import List
# Define your data models
class AddRequest(BaseModel):
numbers: List[float]
class AddResponse(BaseModel):
sum: float
# Server
async def run_server():
server = Server(host="localhost", port=8080)
@server.route(param_model=AddRequest, return_model=AddResponse)
async def add(request: AddRequest) -> AddResponse:
result = sum(request.numbers)
return AddResponse(sum=result)
await server.start()
# Client
async def run_client():
client = Client(host="localhost", port=8080)
# Make a request
numbers = [1.5, 2.5, 3.5, 4.5]
response = await client.request(
"add",
AddRequest(numbers=numbers),
AddResponse
)
print(f"Sum: {response.sum}") # Output: Sum: 12.0
Advanced Usage
Type-Safe Routes with Pydantic
from pydantic import BaseModel
class StatsRequest(BaseModel):
numbers: List[float]
class StatsResponse(BaseModel):
min: float
max: float
average: float
@server.route(param_model=StatsRequest, return_model=StatsResponse)
async def stats(request: StatsRequest) -> StatsResponse:
if not request.numbers:
raise ValueError("Empty list provided")
return StatsResponse(
min=min(request.numbers),
max=max(request.numbers),
average=sum(request.numbers) / len(request.numbers)
)
Error Handling
try:
response = await client.request("stats", StatsRequest(numbers=[]), StatsResponse)
except Exception as e:
print(f"Error: {e}")
Example Use Cases
-
Microservices Architecture
- Communication between different service components
- Load balancing and service discovery
-
Distributed Computing
- Task distribution and result collection
- Worker pool management
-
Application Integration
- Connecting different parts of your application
- Plugin systems and extensions
-
Real-time Data Processing
- Stream processing
- Event-driven architectures
🤝 Contributing
We welcome contributions! Here's how you can help:
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please read our Contributing Guidelines for more details.
📄 License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
💬 Support
Need help? Here are some ways to get support:
- 🐛 Found a bug? Open an issue
- 💡 Have a feature request? Submit it here
- 💌 Contact: Create a discussion
🔗 Links
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 ipcx_typed-0.1.5.tar.gz.
File metadata
- Download URL: ipcx_typed-0.1.5.tar.gz
- Upload date:
- Size: 8.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.3 Linux/6.11.0-1012-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa4639f499ffd31148c23bc6a6315dc701e5d95183154d772650ef6ac33965bd
|
|
| MD5 |
805f8833aea2323d36c95fe34805babb
|
|
| BLAKE2b-256 |
fdb0bdba397422e696708ab8f2ab28ec6aed9d1505e2cee2abea9bf68356a9f6
|
File details
Details for the file ipcx_typed-0.1.5-py3-none-any.whl.
File metadata
- Download URL: ipcx_typed-0.1.5-py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.3 Linux/6.11.0-1012-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ca990998205dbc7c3764a88ec59eb8cd10f83db4b39f944e14e19cb04d04019
|
|
| MD5 |
eacba0eec9e3a7fd6ce6969a77db194f
|
|
| BLAKE2b-256 |
2e81bfd60ec6e542de032535b1c44be521281829ca058265f4510be60f8dbe1b
|