| from __future__ import annotations |
|
|
| import os |
| from pathlib import Path |
|
|
| from autogpt.config import Config |
|
|
| CFG = Config() |
|
|
| |
| WORKSPACE_PATH = Path(os.getcwd()) / "auto_gpt_workspace" |
|
|
| |
| if not os.path.exists(WORKSPACE_PATH): |
| os.makedirs(WORKSPACE_PATH) |
|
|
|
|
| def path_in_workspace(relative_path: str | Path) -> Path: |
| """Get full path for item in workspace |
| |
| Parameters: |
| relative_path (str | Path): Path to translate into the workspace |
| |
| Returns: |
| Path: Absolute path for the given path in the workspace |
| """ |
| return safe_path_join(WORKSPACE_PATH, relative_path) |
|
|
|
|
| def safe_path_join(base: Path, *paths: str | Path) -> Path: |
| """Join one or more path components, asserting the resulting path is within the workspace. |
| |
| Args: |
| base (Path): The base path |
| *paths (str): The paths to join to the base path |
| |
| Returns: |
| Path: The joined path |
| """ |
| joined_path = base.joinpath(*paths).resolve() |
|
|
| if CFG.restrict_to_workspace and not joined_path.is_relative_to(base): |
| raise ValueError( |
| f"Attempted to access path '{joined_path}' outside of workspace '{base}'." |
| ) |
|
|
| return joined_path |
|
|