workflow
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
from collections.abc import Mapping
|
||||
from dataclasses import dataclass
|
||||
|
||||
DEFAULT_POLL_INTERVAL_SECONDS = 0.25
|
||||
DEFAULT_WAIT_TIMEOUT_SECONDS = 10.0
|
||||
DEFAULT_WORKFLOW_DB_PATH = "workflows/workflows.sqlite3"
|
||||
|
||||
POLL_INTERVAL_ENV = "WORKFLOW_POLL_INTERVAL_SECONDS"
|
||||
WAIT_TIMEOUT_ENV = "WORKFLOW_WAIT_TIMEOUT_SECONDS"
|
||||
DB_PATH_ENV = "WORKFLOW_DB_PATH"
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class WorkflowConfig:
|
||||
poll_interval_seconds: float = DEFAULT_POLL_INTERVAL_SECONDS
|
||||
wait_timeout_seconds: float = DEFAULT_WAIT_TIMEOUT_SECONDS
|
||||
db_path: str = DEFAULT_WORKFLOW_DB_PATH
|
||||
|
||||
|
||||
def load_config(env: Mapping[str, str] | None = None) -> WorkflowConfig:
|
||||
values = env or os.environ
|
||||
return WorkflowConfig(
|
||||
poll_interval_seconds=_parse_float(
|
||||
values.get(POLL_INTERVAL_ENV),
|
||||
default=DEFAULT_POLL_INTERVAL_SECONDS,
|
||||
),
|
||||
wait_timeout_seconds=_parse_float(
|
||||
values.get(WAIT_TIMEOUT_ENV),
|
||||
default=DEFAULT_WAIT_TIMEOUT_SECONDS,
|
||||
),
|
||||
db_path=values.get(DB_PATH_ENV) or DEFAULT_WORKFLOW_DB_PATH,
|
||||
)
|
||||
|
||||
|
||||
def _parse_float(value: str | None, *, default: float) -> float:
|
||||
if value is None:
|
||||
return default
|
||||
try:
|
||||
parsed = float(value)
|
||||
except ValueError:
|
||||
return default
|
||||
return parsed if parsed >= 0 else default
|
||||
Reference in New Issue
Block a user