Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions python-sdk/exospherehost/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ async def execute(self, inputs: Inputs) -> Outputs:
from .node.BaseNode import BaseNode
from .statemanager import StateManager
from .signals import PruneSignal, ReQueueAfterSignal
from .models import UnitesStrategyEnum, UnitesModel, GraphNodeModel, RetryStrategyEnum, RetryPolicyModel, StoreConfigModel
from .models import UnitesStrategyEnum, UnitesModel, GraphNodeModel, RetryStrategyEnum, RetryPolicyModel, StoreConfigModel, CronTrigger

VERSION = __version__

__all__ = ["Runtime", "BaseNode", "StateManager", "VERSION", "PruneSignal", "ReQueueAfterSignal", "UnitesStrategyEnum", "UnitesModel", "GraphNodeModel", "RetryStrategyEnum", "RetryPolicyModel", "StoreConfigModel"]
__all__ = ["Runtime", "BaseNode", "StateManager", "VERSION", "PruneSignal", "ReQueueAfterSignal", "UnitesStrategyEnum", "UnitesModel", "GraphNodeModel", "RetryStrategyEnum", "RetryPolicyModel", "StoreConfigModel", "CronTrigger"]
2 changes: 1 addition & 1 deletion python-sdk/exospherehost/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
version = "0.0.3b0"
version = "0.0.3b1"
5 changes: 4 additions & 1 deletion python-sdk/exospherehost/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,4 +157,7 @@ def validate_default_values(cls, v: dict[str, str]) -> dict[str, str]:

if len(errors) > 0:
raise ValueError("\n".join(errors))
return normalized_dict
return normalized_dict

class CronTrigger(BaseModel):
expression: str = Field(..., description="Cron expression")
14 changes: 12 additions & 2 deletions python-sdk/exospherehost/statemanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import asyncio
import time

from .models import GraphNodeModel, RetryPolicyModel, StoreConfigModel
from .models import GraphNodeModel, RetryPolicyModel, StoreConfigModel, CronTrigger


class StateManager:
Expand Down Expand Up @@ -125,7 +125,7 @@ async def get_graph(self, graph_name: str):
raise Exception(f"Failed to get graph: {response.status} {await response.text()}")
return await response.json()

async def upsert_graph(self, graph_name: str, graph_nodes: list[GraphNodeModel], secrets: dict[str, str], retry_policy: RetryPolicyModel | None = None, store_config: StoreConfigModel | None = None, validation_timeout: int = 60, polling_interval: int = 1):
async def upsert_graph(self, graph_name: str, graph_nodes: list[GraphNodeModel], secrets: dict[str, str], retry_policy: RetryPolicyModel | None = None, store_config: StoreConfigModel | None = None, triggers: list[CronTrigger] | None = None, validation_timeout: int = 60, polling_interval: int = 1):
"""
Create or update a graph definition.

Expand Down Expand Up @@ -165,6 +165,16 @@ async def upsert_graph(self, graph_name: str, graph_nodes: list[GraphNodeModel],
body["retry_policy"] = retry_policy.model_dump()
if store_config is not None:
body["store_config"] = store_config.model_dump()
if triggers is not None:
body["triggers"] = [
{
"type": "CRON",
"value": {
"expression": trigger.expression
}
}
for trigger in triggers
]

async with aiohttp.ClientSession() as session:
async with session.put(endpoint, json=body, headers=headers) as response: # type: ignore
Expand Down
2 changes: 1 addition & 1 deletion python-sdk/tests/test_package_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def test_package_all_imports():
"""Test that __all__ contains all expected exports."""
from exospherehost import __all__

expected_exports = ["Runtime", "BaseNode", "StateManager", "VERSION", "PruneSignal", "ReQueueAfterSignal", "UnitesStrategyEnum", "UnitesModel", "GraphNodeModel", "RetryStrategyEnum", "RetryPolicyModel", "StoreConfigModel"]
expected_exports = ["Runtime", "BaseNode", "StateManager", "VERSION", "PruneSignal", "ReQueueAfterSignal", "UnitesStrategyEnum", "UnitesModel", "GraphNodeModel", "RetryStrategyEnum", "RetryPolicyModel", "StoreConfigModel", "CronTrigger"]

for export in expected_exports:
assert export in __all__, f"{export} should be in __all__"
Expand Down