| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- """Storage handler."""
- from __future__ import annotations
- from abc import ABC, abstractmethod
- from typing import TYPE_CHECKING, Final
- from wandb.sdk.lib.paths import FilePathStr, URIStr
- if TYPE_CHECKING:
- from urllib.parse import ParseResult
- from wandb.sdk.artifacts.artifact import Artifact
- from wandb.sdk.artifacts.artifact_manifest_entry import ArtifactManifestEntry
- DEFAULT_MAX_OBJECTS: Final[int] = 10_000_000 # 10**7
- class _BaseStorageHandler(ABC):
- @abstractmethod
- def load_path(
- self,
- manifest_entry: ArtifactManifestEntry,
- local: bool = False,
- ) -> URIStr | FilePathStr:
- """Load a file or directory given the corresponding index entry.
- Args:
- manifest_entry: The index entry to load
- local: Whether to load the file locally or not
- Returns:
- A path to the file represented by `index_entry`
- """
- raise NotImplementedError
- @abstractmethod
- def store_path(
- self,
- artifact: Artifact,
- path: URIStr | FilePathStr,
- name: str | None = None,
- checksum: bool = True,
- max_objects: int | None = None,
- ) -> list[ArtifactManifestEntry]:
- """Store the file or directory at the given path to the specified artifact.
- Args:
- path: The path to store
- name: If specified, the logical name that should map to `path`
- checksum: Whether to compute the checksum of the file
- max_objects: The maximum number of objects to store
- Returns:
- A list of manifest entries to store within the artifact
- """
- raise NotImplementedError
- class StorageHandler(_BaseStorageHandler, ABC): # Handles a single storage protocol
- @abstractmethod
- def can_handle(self, parsed_url: ParseResult) -> bool:
- """Checks whether this handler can handle the given url.
- Returns:
- Whether this handler can handle the given url.
- """
- raise NotImplementedError
|