AmmarFahmy
adding all files
105b369
from pathlib import Path
from importlib import metadata
from pydantic import field_validator, Field
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic_core.core_schema import FieldValidationInfo
PHI_CLI_DIR: Path = Path.home().resolve().joinpath(".phi")
class PhiCliSettings(BaseSettings):
app_name: str = "phi"
app_version: str = metadata.version("phidata")
tmp_token_path: Path = PHI_CLI_DIR.joinpath("tmp_token")
config_file_path: Path = PHI_CLI_DIR.joinpath("config.json")
credentials_path: Path = PHI_CLI_DIR.joinpath("credentials.json")
ai_conversations_path: Path = PHI_CLI_DIR.joinpath("ai_conversations.json")
auth_token_cookie: str = "__phi_session"
auth_token_header: str = "X-PHIDATA-AUTH-TOKEN"
api_runtime: str = "prd"
api_enabled: bool = True
api_url: str = Field("https://api.phidata.com", validate_default=True)
signin_url: str = Field("https://phidata.app/login", validate_default=True)
model_config = SettingsConfigDict(env_prefix="PHI_")
@field_validator("api_runtime", mode="before")
def validate_runtime_env(cls, v):
"""Validate api_runtime."""
valid_api_runtimes = ["dev", "stg", "prd"]
if v not in valid_api_runtimes:
raise ValueError(f"Invalid api_runtime: {v}")
return v
@field_validator("signin_url", mode="before")
def update_signin_url(cls, v, info: FieldValidationInfo):
api_runtime = info.data["api_runtime"]
if api_runtime == "dev":
return "http://localhost:3000/login"
elif api_runtime == "stg":
return "https://stgphi.com/login"
else:
return "https://phidata.app/login"
@field_validator("api_url", mode="before")
def update_api_url(cls, v, info: FieldValidationInfo):
api_runtime = info.data["api_runtime"]
if api_runtime == "dev":
from os import getenv
if getenv("PHI_RUNTIME") == "docker":
return "http://host.docker.internal:7070"
return "http://localhost:7070"
elif api_runtime == "stg":
return "https://api.stgphi.com"
else:
return "https://api.phidata.com"
phi_cli_settings = PhiCliSettings()