Client library for Signal Fabric
Project description
Signal Fabric Client
Official Python client library for Signal Fabric - a lightweight handler-based framework for generating market signals on demand.
Installation
pip install signal-fabric-client
Quick Start
from signal_fabric import GrpcClient, SignalOutcome
import json
with GrpcClient(host='127.0.0.1', port=9090,
ca_cert_path='./fabric-client.pem') as client:
outcome : SignalOutcome = client.process_signal(
target='spot:BTC/USDT',
signal_name='binance_rsi',
signal_op='compute_rsi',
handler_request={
"period": 14,
"timeframe": "1h"
}
)
try:
raw_result = outcome.result
resultObj = json.loads(raw_result)
print(f"""market: {resultObj['market']}
symbol: {resultObj['symbol']}
latest_rsi: {resultObj['rsi']}
regime: {resultObj['regime']}
""")
except (json.JSONDecodeError, TypeError):
print(f"error: {raw_result}")
Usage
Basic Connection
from signal_fabric import GrpcClient, SignalOutcome
# Create client
client = GrpcClient(host='localhost', port=50051, timeout=30)
client.connect()
# Process signal
outcome = client.process_signal(
target='ETH',
signal_name='hello',
signal_op='greet'
)
print(f"Result: {outcome.result}")
# Cleanup
client.disconnect()
Context Manager (Recommended)
from signal_fabric import GrpcClient
with GrpcClient(host='localhost', port=50051) as client:
outcome = client.process_signal(
target='BTC',
signal_name='trend',
signal_op='analyze',
handler_request={'period': 14}
)
print(f"Result: {outcome.result}")
With Request Parameters
with GrpcClient() as client:
outcome = client.process_signal(
target='BTC',
signal_name='composite_strategy',
signal_op='analyze',
handler_request={
'period': 14,
'threshold': 0.5,
'timeframe': '1h'
}
)
Error Handling
from signal_fabric import GrpcClient
try:
with GrpcClient(host='localhost', port=50051, timeout=10) as client:
outcome = client.process_signal(
target='BTC',
signal_name='trend',
signal_op='analyze'
)
if outcome.has_errors():
print("Signal processing failed:")
for error in outcome.errors:
print(f" - {error}")
else:
print(f"Success: {outcome.result}")
# Access detailed results
if outcome.is_detailed():
print(f"Details: {outcome.details}")
except Exception as e:
print(f"Connection failed: {e}")
API Reference
GrpcClient
Constructor
GrpcClient(host: str = 'localhost', port: int = 50051, timeout: int = 30)
Parameters:
host(str): Server hostname or IP address (default: 'localhost')port(int): Server port number (default: 50051)timeout(int): Request timeout in seconds (default: 30)
Methods
connect()
Establish connection to the server.
disconnect()
Close the connection to the server.
is_connected() -> bool
Check if client is currently connected.
process_signal(target, signal_name, signal_op, handler_request=None) -> SignalOutcome
Process a signal request.
Parameters:
target(str): Target for signal computation (e.g., 'BTC', 'ETH', 'AAPL')signal_name(str): Signal handler name or profile namesignal_op(str): Operation to perform (e.g., 'analyze', 'greet')handler_request(dict, optional): Request parameters as dictionary
Returns: SignalOutcome object
SignalOutcome
Result object containing the signal computation outcome.
Attributes
result(str): Signal result valuecomputation(str): Description of computation performedcomputed_at(float): Unix timestamp when computederrors(List[str]): List of error messages (empty if no errors)details(Dict[str, str]): Additional computation details (empty if none)
Methods
has_errors() -> bool
Returns True if the outcome contains errors.
is_detailed() -> bool
Returns True if the outcome has errors or additional details.
Requirements
- Python 3.8+
- grpcio >= 1.76.0
- protobuf >= 4.0.0
Server Setup
This client requires a running Signal Fabric server. To set up the server:
-
Clone the Signal Fabric repository:
git clone https://github.com/phasequant/signal-fabric.git cd signal-fabric
-
Install dependencies:
pip install -r requirements.txt
-
Start the server:
python src/server/server.py --config config.yaml
Examples
Multiple Signals
from signal_fabric import GrpcClient
signals = [
('BTC', 'trend', 'analyze'),
('ETH', 'volume', 'check'),
('SOL', 'momentum', 'calculate')
]
with GrpcClient() as client:
for target, signal, operation in signals:
outcome = client.process_signal(target, signal, operation)
print(f"{target} {signal}: {outcome.result}")
Remote Server
from signal_fabric import GrpcClient
# Connect to remote server
with GrpcClient(host='signals.example.com', port=50051) as client:
outcome = client.process_signal(
target='BTC',
signal_name='trend',
signal_op='analyze'
)
print(f"Result: {outcome.result}")
Version
Current version: 0.1.4
License
See LICENSE file for details.
Links
Support
For questions, issues, or contributions, please visit the GitHub repository.
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 signal_fabric_client-0.1.4.tar.gz.
File metadata
- Download URL: signal_fabric_client-0.1.4.tar.gz
- Upload date:
- Size: 11.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d5a9abdb70a6496a3780c0158eddfd2f9bc2b7f161546f28087a100ade4c937
|
|
| MD5 |
5750cbcc7a831b139de78a5e39f6bb1c
|
|
| BLAKE2b-256 |
5b4d2d43e2cefc7d6d5e367aa82a55a7eac4da0ebcf36d1c0686dd2cca5bd732
|
File details
Details for the file signal_fabric_client-0.1.4-py3-none-any.whl.
File metadata
- Download URL: signal_fabric_client-0.1.4-py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98aa839aa0136f5b68bfd2b0838d975d191fdeb44babeb9bc8f72a3c0d622936
|
|
| MD5 |
d13f05120b60a0ff59a6f17390ed22d8
|
|
| BLAKE2b-256 |
dde58eeb6bc9c47a98c7a532ee2c8e41bb9c76d9586b96e5d411eeaed044f8b0
|