File size: 2,163 Bytes
105b369
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from typing import Optional
from pathlib import Path

from phi.utils.log import logger


def get_workspace_dir_from_env() -> Optional[Path]:
    from os import getenv
    from phi.constants import WORKSPACE_DIR_ENV_VAR

    logger.debug(f"Reading {WORKSPACE_DIR_ENV_VAR} from environment variables")
    workspace_dir = getenv(WORKSPACE_DIR_ENV_VAR, None)
    if workspace_dir is not None:
        return Path(workspace_dir)
    return None


def get_workspace_dir_path(ws_root_path: Path) -> Path:
    """
    Get the workspace directory path from the given workspace root path.
    Phidata workspace dir can be found at:
        1. subdirectory: workspace
        2. In a folder defined by the pyproject.toml file
    """
    from phi.utils.pyproject import read_pyproject_phidata

    logger.debug(f"Searching for a workspace directory in {ws_root_path}")

    # Case 1: Look for a subdirectory with name: workspace
    ws_workspace_dir = ws_root_path.joinpath("workspace")
    logger.debug(f"Searching {ws_workspace_dir}")
    if ws_workspace_dir.exists() and ws_workspace_dir.is_dir():
        return ws_workspace_dir

    # Case 2: Look for a folder defined by the pyproject.toml file
    ws_pyproject_toml = ws_root_path.joinpath("pyproject.toml")
    if ws_pyproject_toml.exists() and ws_pyproject_toml.is_file():
        phidata_conf = read_pyproject_phidata(ws_pyproject_toml)
        if phidata_conf is not None:
            phidata_conf_workspace_dir_str = phidata_conf.get("workspace", None)
            phidata_conf_workspace_dir_path = ws_root_path.joinpath(phidata_conf_workspace_dir_str)
            logger.debug(f"Searching {phidata_conf_workspace_dir_path}")
            if phidata_conf_workspace_dir_path.exists() and phidata_conf_workspace_dir_path.is_dir():
                return phidata_conf_workspace_dir_path

    logger.error(f"Could not find a workspace dir at {ws_root_path}")
    exit(0)


def generate_workspace_name(ws_dir_name: str) -> str:
    import uuid

    formatted_ws_name = ws_dir_name.replace(" ", "-").replace("_", "-").lower()
    random_suffix = str(uuid.uuid4())[:4]
    return f"{formatted_ws_name}-{random_suffix}"