flexmeasures.data.services.automations

Logic for running automations (see also the CLI command flexmeasures jobs run-automations).

Functions

flexmeasures.data.services.automations.describe_cronstr(cronstr: str) str

Describe a cron string in natural language, e.g. “At 06:00”.

Explicitly renders times in 24-hour format, as cron-descriptor otherwise picks a format based on the system locale.

flexmeasures.data.services.automations.floor_to_minute(dt: datetime) datetime

Floor a datetime to the minute, in the FLEXMEASURES_TIMEZONE.

flexmeasures.data.services.automations.get_automation_job_stats(automation: Automation) dict[str, int]

Count the jobs created by this automation, per job status.

Note that jobs in Redis have a limited TTL, so this only counts fairly recent jobs.

flexmeasures.data.services.automations.get_due_automations(now: datetime | None = None) list[Automation]

Return active automations whose cron string matches the given (or current) minute.

Cron strings are interpreted in the FLEXMEASURES_TIMEZONE.

flexmeasures.data.services.automations.get_due_automations_in_window(start: datetime, end: datetime) list[tuple[Automation, list[datetime]]]

Return active automations due at any minute from start through end (both inclusive), together with the minutes at which they are due.

Each automation is listed at most once, even if its cron string matches several minutes within the window (callers are expected to run it only once per invocation). Cron strings are interpreted in the FLEXMEASURES_TIMEZONE.

flexmeasures.data.services.automations.run_automation(automation: Automation) dict[str, Any] | None

Queue the jobs for one run of an automation.

Returns:

the data generator’s return value, e.g. {“job_id”: <uuid>, “n_jobs”: <int>} for forecasting jobs.