"""Workspace entity shared between server and stores."""
from __future__ import annotations
from dataclasses import dataclass
from typing import Any
from mlflow.protos.service_pb2 import Workspace as ProtoWorkspace
[docs]@dataclass(frozen=True, slots=True)
class Workspace:
"""Minimal metadata describing a workspace."""
name: str
description: str | None = None
default_artifact_root: str | None = None
[docs] def to_dict(self) -> dict[str, str | None]:
return {
"name": self.name,
"description": self.description,
"default_artifact_root": self.default_artifact_root,
}
[docs] @classmethod
def from_dict(cls, payload: dict[str, Any]) -> "Workspace":
return cls(
name=payload["name"],
description=payload.get("description"),
default_artifact_root=payload.get("default_artifact_root"),
)
[docs] def to_proto(self) -> ProtoWorkspace:
workspace = ProtoWorkspace()
workspace.name = self.name
if self.description is not None:
workspace.description = self.description
if self.default_artifact_root is not None:
workspace.default_artifact_root = self.default_artifact_root
return workspace
[docs] @classmethod
def from_proto(cls, proto: ProtoWorkspace) -> "Workspace":
description = proto.description if proto.HasField("description") else None
default_artifact_root = (
proto.default_artifact_root if proto.HasField("default_artifact_root") else None
)
return cls(
name=proto.name,
description=description,
default_artifact_root=default_artifact_root,
)