Python SDK
The Python SDK provides a Pythonic interface for interacting with Terragnos Core. It's generated from the OpenAPI specification and supports Python 3.9+.
Installation
pip install terragnos-admin-client
Or with poetry:
poetry add terragnos-admin-client
Requirements
- Python 3.9+
requestslibrary (included as dependency)
Basic Usage
Creating a Client
from terragnos_admin_client import TerragnosAdminClient
client = TerragnosAdminClient(
base_url="https://core.example.com/v1",
token="Bearer your-jwt-token"
)
Listing Objects
response = client.list_objects(type_id="traffic-signal", limit=25)
print(f"Found {len(response['items'])} objects")
for obj in response['items']:
print(f"{obj['publicId']}: {obj['typeId']}")
Creating Objects
object_data = client.create_object(
type_id="traffic-signal",
attributes={
"signalType": "standard",
"intersectionId": "INT-001"
},
geometry={
"type": "Point",
"coordinates": [19.04, 47.49]
}
)
print(f"Created object: {object_data['id']}")
Updating Objects
updated = client.update_object(
object_id="object-id",
version=1, # Optimistic locking
attributes={
"signalType": "pedestrian"
}
)
Workflow Transitions
client.transition_workflow(
object_id="object-id",
target_state="approved",
metadata={
"reason": "Meets all requirements"
}
)
Query Service
results = client.run_query(
filters=[
{
"field": "typeId",
"operator": "equals",
"value": "traffic-signal"
},
{
"field": "attributes.status",
"operator": "equals",
"value": "active"
}
],
sorts=[
{
"field": "createdAt",
"order": "desc"
}
],
limit=50
)
Error Handling
from terragnos_admin_client.exceptions import TerragnosError
try:
obj = client.get_object(object_id="object-id")
except TerragnosError as e:
if e.status_code == 401:
print("Authentication failed")
elif e.status_code == 403:
print("Permission denied")
elif e.status_code == 404:
print("Object not found")
elif e.status_code == 409:
print("Optimistic locking conflict")
else:
print(f"API error: {e.message}")
Custom HTTP Configuration
import requests
from terragnos_admin_client import TerragnosAdminClient
session = requests.Session()
session.mount('https://', requests.adapters.HTTPAdapter(
max_retries=3
))
client = TerragnosAdminClient(
base_url="https://core.example.com/v1",
token="Bearer your-token",
session=session
)
Available Operations
The SDK exposes all API operations. View available operations:
print(client.AVAILABLE_OPERATIONS)
Best Practices
- Use virtual environments – Isolate dependencies
- Handle exceptions – Always catch
TerragnosError - Reuse client instances – Create one client per application
- Environment variables – Store tokens securely
- Type hints – Use type hints for better IDE support
- Async support – Use async/await for concurrent operations (if supported)