Source code for woger.workspace

import os

from .base_path_structure import BasePathStructure
from .action_tracker import ActionTracker
from .base_data import BaseData


[docs]class Workspace: """Wrapper interface to store path and data Attributes ---------- id: int or str root: str path: BasePathStructure data: BaseData Examples -------- :ref:`basic-workspace` :ref:`workspace-with-chained-loaders` """ def __init__(self, data): """Creates a Workspace object""" assert isinstance(data, BaseData) self.data = data @property def path(self) -> BasePathStructure: """Bound path structure object""" return self.data._path @property def root(self) -> str: """Workspace root""" return self.path._root def __repr__(self): return '<{}({})>'.format(self.__class__.__name__, self.root) @property def id(self): """Workspace id Id is used to sort workspaces from oldest to latest """ dirname = os.path.split(self.root)[-1] try: return int(dirname) except ValueError: return str(dirname)
[docs] def track(self, action: str) -> ActionTracker: """Creates an ActionTracker object to manage action `action` It's a shortcut to avoid creating ActionTracker directly Attributes ---------- action: str Action to track """ return self.path.track(action)
def __eq__(self, other): return self.root == other.root
[docs] @classmethod def construct(cls, root, path_structure_cls=None, data_cls=None): """Creates a Workspace object Convinient alternative constructor """ if not path_structure_cls: path_structure_cls = BasePathStructure if not data_cls: data_cls = BaseData return Workspace(data_cls(path_structure_cls(root)))