77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Run cleanup_files workflow once for manual testing.
|
|
|
|
This script starts the Temporal workflow `cleanup_files` a single time,
|
|
using the same Temporal namespace and task queue as the main worker.
|
|
|
|
It is intended only for local/manual testing; scheduling (cron) must be
|
|
configured separately in Temporal.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
import os
|
|
import sys
|
|
from datetime import timedelta
|
|
from typing import Any
|
|
|
|
from temporalio.client import Client
|
|
|
|
# Ensure project root is on PYTHONPATH when running directly
|
|
ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
if ROOT_DIR not in sys.path:
|
|
sys.path.insert(0, ROOT_DIR)
|
|
|
|
from model_manager.workflows.cleanup_files import CleanupFiles # noqa: E402
|
|
|
|
|
|
async def main(argv: list[str]) -> None:
|
|
"""Entry point for manual cleanup workflow execution.
|
|
|
|
Args:
|
|
argv: Command-line arguments (excluding program name).
|
|
"""
|
|
|
|
# Config from environment / defaults
|
|
temporal_host = os.getenv('TEMPORAL_HOST', 'localhost:37463')
|
|
temporal_namespace = os.getenv('TEMPORAL_NAMESPACE', 'model-manager')
|
|
task_queue = 'cleanup-queue'
|
|
|
|
default_bucket = os.getenv('DEFAULT_CLEANUP_BUCKET', 'model-training')
|
|
|
|
# Optional CLI: bucket name override
|
|
bucket_name = default_bucket
|
|
if argv:
|
|
bucket_name = argv[0]
|
|
|
|
print(f"Connecting to Temporal at {temporal_host} (namespace={temporal_namespace})...")
|
|
client = await Client.connect(temporal_host, namespace=temporal_namespace)
|
|
|
|
input_data: dict[str, Any] = {
|
|
'bucket_name': bucket_name,
|
|
}
|
|
|
|
workflow_id = f"cleanup-files-manual-{int(asyncio.get_event_loop().time())}"
|
|
|
|
print(f"Starting cleanup_files workflow once...\n"
|
|
f" workflow_id = {workflow_id}\n"
|
|
f" task_queue = {task_queue}\n"
|
|
f" bucket_name = {bucket_name}")
|
|
|
|
handle = await client.start_workflow(
|
|
CleanupFiles.run,
|
|
input_data,
|
|
id=workflow_id,
|
|
task_queue=task_queue,
|
|
run_timeout=timedelta(minutes=10),
|
|
)
|
|
|
|
print("Workflow started, waiting for completion...")
|
|
await handle.result()
|
|
print("cleanup_files workflow completed successfully.")
|
|
|
|
|
|
if __name__ == '__main__': # pragma: no cover - manual utility script
|
|
asyncio.run(main(sys.argv[1:]))
|