Spaces:
Runtime error
Runtime error
from pathlib import Path | |
from typing import Optional, List, Any, Dict | |
from pydantic import BaseModel, ConfigDict | |
from phi.workspace.settings import WorkspaceSettings | |
class PhiBase(BaseModel): | |
name: Optional[str] = None | |
group: Optional[str] = None | |
version: Optional[str] = None | |
env: Optional[str] = None | |
enabled: bool = True | |
# -*- Resource Control | |
skip_create: bool = False | |
skip_read: bool = False | |
skip_update: bool = False | |
skip_delete: bool = False | |
recreate_on_update: bool = False | |
# Skip create if resource with the same name is active | |
use_cache: bool = True | |
# Force create/update/delete implementation | |
force: Optional[bool] = None | |
# -*- Debug Mode | |
debug_mode: bool = False | |
# -*- Resource Environment | |
# Add env variables to resource where applicable | |
env_vars: Optional[Dict[str, Any]] = None | |
# Read env from a file in yaml format | |
env_file: Optional[Path] = None | |
# Add secret variables to resource where applicable | |
# secrets_dict: Optional[Dict[str, Any]] = None | |
# Read secrets from a file in yaml format | |
secrets_file: Optional[Path] = None | |
# Read secret variables from AWS Secrets | |
aws_secrets: Optional[Any] = None | |
# -*- Waiter Control | |
wait_for_create: bool = True | |
wait_for_update: bool = True | |
wait_for_delete: bool = True | |
waiter_delay: int = 30 | |
waiter_max_attempts: int = 50 | |
# -*- Save to output directory | |
# If True, save output to json files | |
save_output: bool = False | |
# The directory for the input files in the workspace directory | |
input_dir: Optional[str] = None | |
# The directory for the output files in the workspace directory | |
output_dir: Optional[str] = None | |
# -*- Dependencies | |
depends_on: Optional[List[Any]] = None | |
# -*- Workspace Settings | |
workspace_settings: Optional[WorkspaceSettings] = None | |
# -*- Cached Data | |
cached_env_file_data: Optional[Dict[str, Any]] = None | |
cached_secret_file_data: Optional[Dict[str, Any]] = None | |
model_config = ConfigDict(arbitrary_types_allowed=True, populate_by_name=True) | |
def get_group_name(self) -> Optional[str]: | |
return self.group or self.name | |
def workspace_root(self) -> Optional[Path]: | |
return self.workspace_settings.ws_root if self.workspace_settings is not None else None | |
def workspace_name(self) -> Optional[str]: | |
return self.workspace_settings.ws_name if self.workspace_settings is not None else None | |
def workspace_dir(self) -> Optional[Path]: | |
if self.workspace_root is not None: | |
workspace_dir = self.workspace_settings.workspace_dir if self.workspace_settings is not None else None | |
if workspace_dir is not None: | |
return self.workspace_root.joinpath(workspace_dir) | |
return None | |
def set_workspace_settings(self, workspace_settings: Optional[WorkspaceSettings] = None) -> None: | |
if workspace_settings is not None: | |
self.workspace_settings = workspace_settings | |
def get_env_file_data(self) -> Optional[Dict[str, Any]]: | |
if self.cached_env_file_data is None: | |
from phi.utils.yaml_io import read_yaml_file | |
self.cached_env_file_data = read_yaml_file(file_path=self.env_file) | |
return self.cached_env_file_data | |
def get_secret_file_data(self) -> Optional[Dict[str, Any]]: | |
if self.cached_secret_file_data is None: | |
from phi.utils.yaml_io import read_yaml_file | |
self.cached_secret_file_data = read_yaml_file(file_path=self.secrets_file) | |
return self.cached_secret_file_data | |
def get_secret_from_file(self, secret_name: str) -> Optional[str]: | |
secret_file_data = self.get_secret_file_data() | |
if secret_file_data is not None: | |
return secret_file_data.get(secret_name) | |
return None | |
def set_aws_env_vars(self, env_dict: Dict[str, str], aws_region: Optional[str] = None) -> None: | |
from phi.constants import ( | |
AWS_REGION_ENV_VAR, | |
AWS_DEFAULT_REGION_ENV_VAR, | |
) | |
if aws_region is not None: | |
# logger.debug(f"Setting AWS Region to {aws_region}") | |
env_dict[AWS_REGION_ENV_VAR] = aws_region | |
env_dict[AWS_DEFAULT_REGION_ENV_VAR] = aws_region | |
elif self.workspace_settings is not None and self.workspace_settings.aws_region is not None: | |
# logger.debug(f"Setting AWS Region to {aws_region} using workspace_settings") | |
env_dict[AWS_REGION_ENV_VAR] = self.workspace_settings.aws_region | |
env_dict[AWS_DEFAULT_REGION_ENV_VAR] = self.workspace_settings.aws_region | |