flexmeasures.data.services.automation_copies

Copying automations along with the asset subtree they belong to (see copy_asset).

Functions

flexmeasures.data.services.automation_copies.copy_automations(asset_id_map: dict[int, int], sensor_id_map: dict[int, int], destination_account_id: int | None) → list[SkippedAutomation]

Copy the automations of a freshly copied asset subtree, leaving each copy inactive.

Every automation on a copied asset is copied onto the corresponding new asset, with its references to sensors inside the subtree pointed at the new sensors. A copy keeps its name, type, cron expression and timezone, but starts inactive and with a fresh cursor, so that it inherits neither the original’s run history nor its queued jobs.

An automation that cannot be copied safely is skipped rather than failing the asset copy: the copied asset, its sensors and the other automations are kept. Each skipped automation is logged and returned, so that the caller can report it.

Parameters:
  • asset_id_map – Mapping of every original asset ID in the copied subtree to its new asset ID.

  • sensor_id_map – Mapping of every original sensor ID in the copied subtree to its new sensor ID.

  • destination_account_id – The account the copy belongs to, or None if the copy is public.

Returns:

The automations that were skipped, in the order they were considered.

Classes

class flexmeasures.data.services.automation_copies.SkippedAutomation(automation_id: int, name: str, asset_id: int, reason: str)

One automation that was left out of an asset copy, and why.

__init__(automation_id: int, name: str, asset_id: int, reason: str) → None
to_dict() → dict[str, Any]

Render for an API response.

Exceptions

exception flexmeasures.data.services.automation_copies.AutomationNotCopyable

Raised when one automation cannot be copied safely.

The asset copy goes ahead without it, so the message is shown to whoever asked for the copy; phrase it as a complete sentence that says what stood in the way.