jamtur01's picture
Upload folder using huggingface_hub
9c6594c verified
"""Scopes in which a W&B Automation can be triggered."""
from __future__ import annotations
from typing import Literal, Union
from pydantic import BeforeValidator, Field
from typing_extensions import Annotated, TypeAlias, get_args
from wandb._pydantic import GQLBase
from wandb.automations._generated import (
ArtifactPortfolioScopeFields,
ArtifactSequenceScopeFields,
ProjectScopeFields,
)
from ._validators import LenientStrEnum, to_scope
# NOTE: Re-defined publicly with a more readable name for easier access
class ScopeType(LenientStrEnum):
"""The kind of scope that triggers an automation."""
PROJECT = "PROJECT"
ARTIFACT_COLLECTION = "ARTIFACT_COLLECTION"
class _BaseScope(GQLBase):
scope_type: Annotated[ScopeType, Field(frozen=True)]
class _ArtifactSequenceScope(_BaseScope, ArtifactSequenceScopeFields):
"""An automation scope defined by a specific `ArtifactSequence`."""
scope_type: Literal[ScopeType.ARTIFACT_COLLECTION] = ScopeType.ARTIFACT_COLLECTION
class _ArtifactPortfolioScope(_BaseScope, ArtifactPortfolioScopeFields):
"""An automation scope defined by a specific `ArtifactPortfolio` (e.g. a registry collection)."""
scope_type: Literal[ScopeType.ARTIFACT_COLLECTION] = ScopeType.ARTIFACT_COLLECTION
# for type annotations
ArtifactCollectionScope = Annotated[
Union[_ArtifactSequenceScope, _ArtifactPortfolioScope],
BeforeValidator(to_scope),
Field(discriminator="typename__"),
]
"""An automation scope defined by a specific `ArtifactCollection`."""
# for runtime type checks
ArtifactCollectionScopeTypes: tuple[type, ...] = get_args(
ArtifactCollectionScope.__origin__ # type: ignore[attr-defined]
)
class ProjectScope(_BaseScope, ProjectScopeFields):
"""An automation scope defined by a specific `Project`."""
scope_type: Literal[ScopeType.PROJECT] = ScopeType.PROJECT
# for type annotations
AutomationScope: TypeAlias = Annotated[
Union[_ArtifactSequenceScope, _ArtifactPortfolioScope, ProjectScope],
BeforeValidator(to_scope),
Field(discriminator="typename__"),
]
# for runtime type checks
AutomationScopeTypes: tuple[type, ...] = get_args(AutomationScope.__origin__) # type: ignore[attr-defined]
__all__ = [
"ScopeType",
"ArtifactCollectionScope",
"ProjectScope",
]