fjage Gateway in Python
Project description
fjåge Gateway in Python (fjagepy)
fjagepy is a Python gateway for the fjåge multi-agent system framework. It enables Python applications to seamlessly communicate with fjåge agents over TCP connections, providing a Pythonic interface to the fjåge ecosystem.
Features
- Agent Communication: Send and receive messages to/from fjåge agents
- Request-Response Pattern: Built-in support for synchronous request-response interactions
- Message Filtering: Flexible message filtering by type, sender, or custom predicates
- Agent Discovery: Find and communicate with agents by name or service
- NumPy Integration: Automatic serialization/deserialization of NumPy arrays
- Connection Management: Automatic reconnection and robust error handling
- Type Safety: Full type hints for better IDE support and code reliability
Installation
From PyPI
pip install fjagepy
From Source
git clone https://github.com/org-arl/fjage.git
cd fjage/gateways/python
pip install -e .
Development Installation
For development with testing dependencies:
pip install -e ".[dev]"
Quick Start
Basic Connection and Communication
from fjagepy import Gateway, Message, AgentID
# Connect to fjåge container
gw = Gateway('localhost', 1100)
# Get reference to an agent
shell = gw.agent('shell')
# Send a message
msg = Message()
msg.data = "Hello from Python!"
shell << msg
# Close connection when done
gw.close()
Request-Response Pattern
from fjagepy import Gateway, ShellExecReq
# Connect and get shell agent
gw = Gateway()
shell = gw.agent('shell')
# Create and send a shell command request
req = ShellExecReq()
req.command = 'ps'
req.ans = True
# Send request and wait for response
rsp = shell.request(req, timeout=5000) # 5 second timeout
if rsp:
print(f"Command output: {rsp.output}")
gw.close()
Message Filtering and Reception
from fjagepy import Gateway, Message
gw = Gateway()
# Receive any message
msg = gw.receive(timeout=1000)
# Receive messages of specific type
from fjagepy import ParameterRsp
param_msg = gw.receive(ParameterRsp, timeout=1000)
# Receive with custom filter
def my_filter(msg):
return hasattr(msg, 'data') and 'important' in str(msg.data)
important_msg = gw.receive(my_filter, timeout=1000)
gw.close()
Advanced Usage
Custom Connectors
Implement custom connectors by extending the Connector base class:
from fjagepy import Connector
class MyCustomConnector(Connector):
def connect(self):
# Implementation
pass
def disconnect(self):
# Implementation
pass
def send(self, msg: str):
# Implementation
pass
# Use custom connector
gw = Gateway(connector=MyCustomConnector)
Logging and Debugging
This library uses the standard Python logging system.
By default, the library does not emit logs to the console. To see logs, configure Python’s logging in your application:
import logging
# Show all logs on stdout
logging.basicConfig(level=logging.DEBUG)
# Or, enable only logs from this library
logging.getLogger("fjagepy").setLevel(logging.DEBUG)
For troubleshooting, you can also send logs to a file:
logging.basicConfig(filename="debug.log", level=logging.DEBUG)
Context Manager Support
Use Gateway as a context manager for automatic cleanup:
from fjagepy import Gateway
with Gateway('localhost', 5081) as gw:
shell = gw.agent('shell')
req = ShellExecReq()
req.command = 'help'
req.ans = True
rsp = shell.request(req)
print(rsp.output)
# Gateway automatically closed
iPython / Jupyter Notebook Support
In Jupyter notebooks, AgentIDs and Messages are displayed in a human-readable format
In [1]: from fjagepy import *
In [2]: gw = Gateway("localhost", 5081)
In [3]: gw.agentForService(Services.SHELL)
Out[3]:
<<< websh >>>
Interactive Groovy shell
[org.arl.fjage.shell.ShellParam]
language => Groovy
Testing
Run the test suite:
# Install test dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run specific test file
pytest test/test_gateway.py
# Run with coverage
pytest --cov=fjagepy
Test Requirements
Tests require a running fjåge container on localhost:5081. You can start one using:
# In the main fjåge directory
./gradlew --info -PmanualPyTest=true test --tests="org.arl.fjage.test.fjagepyTest"
Examples
See the examples/ directory an example of how to use the fjagepy gateway.
Documentation
To build the documentation locally:
# Install documentation dependencies
pip install -e ".[docs]"
# Build docs
sphinx-build -b html docs/ ../../docs/pydocs/
# View in browser
open ../../docs/pydocs/index.html
Compatibility
- Python: 3.9 or higher
- fjåge: Compatible with fjåge 1.7.x and 2.x
- NumPy: Optional dependency for array support
- Operating Systems: Linux, macOS, Windows
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add tests for new functionality
- Run the test suite (
pytest) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the BSD 3-Clause License. See the LICENSE file for details.
Support
- Documentation: fjåge Documentation
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Related Projects
- fjåge: Main fjåge framework
- fjåge.js: JavaScript gateway
- Fjåge.jl: Julia gateway
- fjåge-c: C gateway
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 fjagepy-2.0.0.tar.gz.
File metadata
- Download URL: fjagepy-2.0.0.tar.gz
- Upload date:
- Size: 26.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e01395b73a305e736fcda2de83e3942739a4a17b2041f4fbe0b771ec42bded8
|
|
| MD5 |
68fa4019181efd4ebecc5cc2421433af
|
|
| BLAKE2b-256 |
346d8a46e0a41a10fe02b29eddd2e28e32ceff7eaf4152f4cd0dc9e17b243090
|
File details
Details for the file fjagepy-2.0.0-py3-none-any.whl.
File metadata
- Download URL: fjagepy-2.0.0-py3-none-any.whl
- Upload date:
- Size: 22.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
68e84879d2d6a7782b4cc75ed7fd2441b811d86abb2d33cb6692a3dc803df3c9
|
|
| MD5 |
9de86df9113a4b7b6a09f2c2ffff958c
|
|
| BLAKE2b-256 |
3a0de0ac0796d610da157e240922f33cbae444b938c0a823f9af0aa0a6385767
|