Python SDK for Entangle Matrix API - Create and manage AI-powered digital twins
Project description
Entangle Matrix SDK for Python
A Python SDK for the Entangle Matrix API, enabling developers to easily integrate Matrix messaging capabilities into their applications. Send messages, share files, manage rooms, and more with a simple, async-first API.
🚀 Features
- Async/Await Support: Built with
aiohttpfor high-performance async operations - Type Safety: Full type hints and data validation using dataclasses
- File Upload Support: Send images, audio, and files with automatic type detection
- Room Management: Create, join, and manage Matrix rooms programmatically
- Error Handling: Comprehensive exception hierarchy for robust error handling
- Authentication: Support for API key authentication
- Validation: Built-in validation for Matrix room IDs, file types, and sizes
📦 Installation
pip install entangle-matrix
Development Installation
git clone https://github.com/qbit-codes/entangle-python-client.git
cd entangle-python-client
pip install -e .[dev]
🔧 Quick Start
Basic Message Sending
import asyncio
from entangle_matrix import EntangleMatrixClient
async def main():
async with EntangleMatrixClient(
base_url="http://localhost:8000",
api_key="your-api-key" # Optional
) as client:
# Send a simple message
message = await client.send_message(
room_id="!roomid:example.com",
message="Hello, Matrix! 👋"
)
print(f"Message sent! Event ID: {message.event_id}")
asyncio.run(main())
File Sharing
async with EntangleMatrixClient("http://localhost:8000") as client:
# Send an image with caption
upload = await client.send_image(
room_id="!roomid:example.com",
image_path="/path/to/image.png",
caption="Check out this image! 📸"
)
# Send an audio file
await client.send_audio(
room_id="!roomid:example.com",
audio_path="/path/to/audio.mp3",
caption="🎵 Here's an audio message"
)
Room Management
async with EntangleMatrixClient("http://localhost:8000") as client:
# Create a new room
room = await client.create_room(
name="My SDK Room",
topic="Created with Entangle SDK",
is_public=False
)
# List all rooms
rooms = await client.list_rooms()
for room in rooms:
print(f"Room: {room.name} ({room.member_count} members)")
# Join a room
joined_room = await client.join_room("#example:matrix.org")
📖 API Reference
EntangleMatrixClient
The main client class for interacting with the Entangle Matrix API.
Constructor
EntangleMatrixClient(
base_url: str,
api_key: Optional[str] = None,
timeout: int = 30,
max_file_size_mb: int = 10
)
base_url: Base URL of your Entangle API serverapi_key: Optional API key for authenticationtimeout: Request timeout in seconds (default: 30)max_file_size_mb: Maximum file size for uploads in MB (default: 10)
Methods
Messaging
-
send_message(room_id, message, formatted_body=None, format_type=None)- Send a text message to a Matrix room
- Returns:
MatrixMessage
-
send_image(room_id, image_path, caption=None)- Send an image file to a Matrix room
- Returns:
MatrixUpload
-
send_audio(room_id, audio_path, caption=None)- Send an audio file to a Matrix room
- Returns:
MatrixUpload
-
send_file(room_id, file_path, caption=None)- Send a generic file to a Matrix room
- Returns:
MatrixUpload
Room Management
-
create_room(name, topic=None, is_public=False, is_direct=False, invite_users=None)- Create a new Matrix room
- Returns:
MatrixRoom
-
join_room(room_id_or_alias)- Join an existing Matrix room
- Returns:
MatrixRoom
-
list_rooms()- Get list of all joined rooms
- Returns:
List[MatrixRoom]
-
get_room_info(room_id)- Get detailed information about a room
- Returns:
MatrixRoom
Utility
health_check()- Check API server health status
- Returns:
Dict[str, Any]
Data Models
MatrixMessage
@dataclass
class MatrixMessage:
event_id: str
room_id: str
timestamp: str
message: str
metadata: Optional[Dict[str, Any]] = None
MatrixUpload
@dataclass
class MatrixUpload:
event_id: str
room_id: str
mxc_uri: str
file_name: str
file_size: int
content_type: str
metadata: Optional[Dict[str, Any]] = None
MatrixRoom
@dataclass
class MatrixRoom:
room_id: str
name: Optional[str]
topic: Optional[str]
avatar_url: Optional[str]
member_count: int
is_encrypted: bool
is_direct: bool
metadata: Optional[Dict[str, Any]] = None
🔧 Error Handling
The SDK provides a comprehensive exception hierarchy:
from entangle_matrix import (
EntangleMatrixError, # Base exception
AuthenticationError, # HTTP 401
ValidationError, # HTTP 400
NotFoundError, # HTTP 404
RateLimitError, # HTTP 429
ServerError, # HTTP 500+
NetworkError # Network issues
)
try:
message = await client.send_message(room_id, "Hello!")
except AuthenticationError:
print("Invalid API key")
except ValidationError as e:
print(f"Invalid input: {e.message}")
except NetworkError as e:
print(f"Network problem: {e.message}")
except EntangleMatrixError as e:
print(f"Matrix API error: {e.message}")
🧪 Examples
Check out the examples directory for more detailed usage examples:
basic_usage.py- Basic messaging and room listingfile_sharing.py- Image, audio, and file uploadsroom_management.py- Creating and managing rooms
🛠️ Development
Setup Development Environment
# Clone the repository
git clone https://github.com/qbit-codes/entangle-python-client.git
cd entangle-python-client
# Install in development mode
pip install -e .[dev]
Running Tests
# Run tests
pytest
# Run tests with coverage
pytest --cov=entangle_matrix --cov-report=html
# Run type checking
mypy entangle_matrix/
# Format code
black entangle_matrix/
isort entangle_matrix/
Building the Package
# Build source and wheel distributions
python -m build
# Upload to PyPI (maintainers only)
twine upload dist/*
📋 Requirements
- Python 3.9+
- aiohttp >= 3.8.0
- aiofiles >= 23.2.1
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- 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
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🔗 Links
🙏 Acknowledgments
Built with ❤️ by QBit Codes for the Entangle Matrix API platform.
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 entangle_matrix-0.1.0.tar.gz.
File metadata
- Download URL: entangle_matrix-0.1.0.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2481dc09b4824edf5c9b8e42764ce4f5b3601299bc31fe41a1801d605001dbb9
|
|
| MD5 |
0406a0f8d140ab439596de085ab8a18a
|
|
| BLAKE2b-256 |
c142abeaced666c3fca9f9fd0b431460721b0e545607287092e529cdf16bbf14
|
File details
Details for the file entangle_matrix-0.1.0-py3-none-any.whl.
File metadata
- Download URL: entangle_matrix-0.1.0-py3-none-any.whl
- Upload date:
- Size: 13.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a829ae52b4d591bf88f0758ac223d71aa5cbc0e15d4cd33a1bab882c3fe748d
|
|
| MD5 |
9349d2dccd443f1493753ef10523b270
|
|
| BLAKE2b-256 |
aa59db18364100d727a3cc5a912ec58aa3a6f6f64dded2dd9211d77a0c413d8b
|