feat: implement project launch script run.sh and update README
This commit is contained in:
@@ -66,10 +66,29 @@ async def get_environments(config_manager: ConfigManager = Depends(get_config_ma
|
||||
# @RETURN: Environment - The added environment.
|
||||
@router.post("/environments", response_model=Environment)
|
||||
async def add_environment(
|
||||
env: Environment,
|
||||
env: Environment,
|
||||
config_manager: ConfigManager = Depends(get_config_manager)
|
||||
):
|
||||
logger.info(f"[add_environment][Entry] Adding environment {env.id}")
|
||||
|
||||
# Validate connection before adding
|
||||
try:
|
||||
superset_config = SupersetConfig(
|
||||
env=env.name,
|
||||
base_url=env.url,
|
||||
auth={
|
||||
"provider": "db",
|
||||
"username": env.username,
|
||||
"password": env.password,
|
||||
"refresh": "true"
|
||||
}
|
||||
)
|
||||
client = SupersetClient(config=superset_config)
|
||||
client.get_dashboards(query={"page_size": 1})
|
||||
except Exception as e:
|
||||
logger.error(f"[add_environment][Coherence:Failed] Connection validation failed: {e}")
|
||||
raise HTTPException(status_code=400, detail=f"Connection validation failed: {e}")
|
||||
|
||||
config_manager.add_environment(env)
|
||||
return env
|
||||
# [/DEF:add_environment]
|
||||
@@ -86,6 +105,32 @@ async def update_environment(
|
||||
config_manager: ConfigManager = Depends(get_config_manager)
|
||||
):
|
||||
logger.info(f"[update_environment][Entry] Updating environment {id}")
|
||||
|
||||
# If password is masked, we need the real one for validation
|
||||
env_to_validate = env.copy(deep=True)
|
||||
if env_to_validate.password == "********":
|
||||
old_env = next((e for e in config_manager.get_environments() if e.id == id), None)
|
||||
if old_env:
|
||||
env_to_validate.password = old_env.password
|
||||
|
||||
# Validate connection before updating
|
||||
try:
|
||||
superset_config = SupersetConfig(
|
||||
env=env_to_validate.name,
|
||||
base_url=env_to_validate.url,
|
||||
auth={
|
||||
"provider": "db",
|
||||
"username": env_to_validate.username,
|
||||
"password": env_to_validate.password,
|
||||
"refresh": "true"
|
||||
}
|
||||
)
|
||||
client = SupersetClient(config=superset_config)
|
||||
client.get_dashboards(query={"page_size": 1})
|
||||
except Exception as e:
|
||||
logger.error(f"[update_environment][Coherence:Failed] Connection validation failed: {e}")
|
||||
raise HTTPException(status_code=400, detail=f"Connection validation failed: {e}")
|
||||
|
||||
if config_manager.update_environment(id, env):
|
||||
return env
|
||||
raise HTTPException(status_code=404, detail=f"Environment {id} not found")
|
||||
@@ -152,34 +197,22 @@ async def test_environment_connection(
|
||||
# @PARAM: path (str) - The path to validate.
|
||||
# @RETURN: dict - Validation result.
|
||||
@router.post("/validate-path")
|
||||
async def validate_backup_path(path_data: dict):
|
||||
async def validate_backup_path(
|
||||
path_data: dict,
|
||||
config_manager: ConfigManager = Depends(get_config_manager)
|
||||
):
|
||||
path = path_data.get("path")
|
||||
if not path:
|
||||
raise HTTPException(status_code=400, detail="Path is required")
|
||||
|
||||
logger.info(f"[validate_backup_path][Entry] Validating path: {path}")
|
||||
|
||||
p = os.path.abspath(path)
|
||||
exists = os.path.exists(p)
|
||||
writable = os.access(p, os.W_OK) if exists else os.access(os.path.dirname(p), os.W_OK)
|
||||
valid, message = config_manager.validate_path(path)
|
||||
|
||||
if not exists:
|
||||
# Try to create it
|
||||
try:
|
||||
os.makedirs(p, exist_ok=True)
|
||||
exists = True
|
||||
writable = os.access(p, os.W_OK)
|
||||
logger.info(f"[validate_backup_path][Action] Created directory: {p}")
|
||||
except Exception as e:
|
||||
logger.error(f"[validate_backup_path][Coherence:Failed] Failed to create directory: {e}")
|
||||
return {"status": "error", "message": f"Path does not exist and could not be created: {e}"}
|
||||
|
||||
if not writable:
|
||||
logger.warning(f"[validate_backup_path][Coherence:Failed] Path not writable: {p}")
|
||||
return {"status": "error", "message": "Path is not writable"}
|
||||
if not valid:
|
||||
return {"status": "error", "message": message}
|
||||
|
||||
logger.info(f"[validate_backup_path][Coherence:OK] Path valid: {p}")
|
||||
return {"status": "success", "message": "Path is valid and writable"}
|
||||
return {"status": "success", "message": message}
|
||||
# [/DEF:validate_backup_path]
|
||||
|
||||
# [/DEF:SettingsRouter]
|
||||
|
||||
Reference in New Issue
Block a user