jamtur01's picture
Upload folder using huggingface_hub
9c6594c verified
# ruff: noqa: UP007 # Avoid using `X | Y` for union fields, as this can cause issues with pydantic < 2.6
from __future__ import annotations
from datetime import datetime
from typing import Optional
from pydantic import Field
from typing_extensions import Annotated
from wandb._pydantic import GQLBase, GQLId
from ._generated import TriggerFields
from .actions import InputAction, SavedAction
from .events import InputEvent, SavedEvent
from .scopes import AutomationScope
# ------------------------------------------------------------------------------
# Saved types: for parsing response data from saved automations
class Automation(TriggerFields):
"""A local instance of a saved W&B automation."""
id: GQLId
created_at: Annotated[datetime, Field(repr=False, frozen=True, alias="createdAt")]
"""The date and time when this automation was created."""
updated_at: Annotated[
Optional[datetime], Field(repr=False, frozen=True, alias="updatedAt")
] = None
"""The date and time when this automation was last updated, if applicable."""
name: str
"""The name of this automation."""
description: Optional[str]
"""An optional description of this automation."""
enabled: bool
"""Whether this automation is enabled. Only enabled automations will trigger."""
event: SavedEvent
"""The event that will trigger this automation."""
scope: AutomationScope
"""The scope in which the triggering event must occur."""
action: SavedAction
"""The action that will execute when this automation is triggered."""
class NewAutomation(GQLBase, extra="forbid", validate_default=False):
"""A new automation to be created."""
name: Optional[str] = None
"""The name of this automation."""
description: Optional[str] = None
"""An optional description of this automation."""
enabled: Optional[bool] = None
"""Whether this automation is enabled. Only enabled automations will trigger."""
event: Optional[InputEvent] = None
"""The event that will trigger this automation."""
# Ensure that the event and its scope are always consistent, if the event is set.
@property
def scope(self) -> Optional[AutomationScope]:
"""The scope in which the triggering event must occur."""
return self.event.scope if self.event else None
@scope.setter
def scope(self, value: AutomationScope) -> None:
if self.event is None:
raise ValueError("Cannot set `scope` for an automation with no `event`")
self.event.scope = value
action: Optional[InputAction] = None
"""The action that will execute when this automation is triggered."""
__all__ = [
"Automation",
"NewAutomation",
]