Spaces:
Sleeping
Sleeping
| from typing import List, Optional, Dict, Union | |
| from httpx import Response | |
| from phi.api.api import api, invalid_response | |
| from phi.api.routes import ApiRoutes | |
| from phi.api.schemas.user import UserSchema | |
| from phi.api.schemas.workspace import ( | |
| WorkspaceSchema, | |
| WorkspaceCreate, | |
| WorkspaceUpdate, | |
| WorkspaceEvent, | |
| ) | |
| from phi.api.schemas.team import TeamIdentifier | |
| from phi.cli.settings import phi_cli_settings | |
| from phi.utils.log import logger | |
| def create_workspace_for_user( | |
| user: UserSchema, workspace: WorkspaceCreate, team: Optional[TeamIdentifier] = None | |
| ) -> Optional[WorkspaceSchema]: | |
| logger.debug("--**-- Creating workspace") | |
| with api.AuthenticatedClient() as api_client: | |
| try: | |
| payload = { | |
| "user": user.model_dump(include={"id_user", "email"}), | |
| "workspace": workspace.model_dump(exclude_none=True), | |
| } | |
| if team is not None: | |
| payload["team"] = team.model_dump(exclude_none=True) | |
| r: Response = api_client.post( | |
| ApiRoutes.WORKSPACE_CREATE, | |
| json=payload, | |
| timeout=2.0, | |
| ) | |
| if invalid_response(r): | |
| try: | |
| error_msg = r.json().get("detail", "Permission denied") | |
| except Exception: | |
| error_msg = f"Could not create workspace: {r.text}" | |
| logger.error(error_msg) | |
| return None | |
| response_json: Union[Dict, List] = r.json() | |
| if response_json is None: | |
| return None | |
| created_workspace: WorkspaceSchema = WorkspaceSchema.model_validate(response_json) | |
| if created_workspace is not None: | |
| return created_workspace | |
| except Exception as e: | |
| logger.debug(f"Could not create workspace: {e}") | |
| return None | |
| def update_workspace_for_user(user: UserSchema, workspace: WorkspaceUpdate) -> Optional[WorkspaceSchema]: | |
| logger.debug("--**-- Updating workspace for user") | |
| with api.AuthenticatedClient() as api_client: | |
| try: | |
| payload = { | |
| "user": user.model_dump(include={"id_user", "email"}), | |
| "workspace": workspace.model_dump(exclude_none=True), | |
| } | |
| r: Response = api_client.post( | |
| ApiRoutes.WORKSPACE_UPDATE, | |
| json=payload, | |
| ) | |
| if invalid_response(r): | |
| try: | |
| error_msg = r.json().get("detail", "Could not update workspace") | |
| except Exception: | |
| error_msg = f"Could not update workspace: {r.text}" | |
| logger.error(error_msg) | |
| return None | |
| response_json: Union[Dict, List] = r.json() | |
| if response_json is None: | |
| return None | |
| updated_workspace: WorkspaceSchema = WorkspaceSchema.model_validate(response_json) | |
| if updated_workspace is not None: | |
| return updated_workspace | |
| except Exception as e: | |
| logger.debug(f"Could not update workspace: {e}") | |
| return None | |
| def update_workspace_for_team( | |
| user: UserSchema, workspace: WorkspaceUpdate, team: TeamIdentifier | |
| ) -> Optional[WorkspaceSchema]: | |
| logger.debug("--**-- Updating workspace for team") | |
| with api.AuthenticatedClient() as api_client: | |
| try: | |
| payload = { | |
| "user": user.model_dump(include={"id_user", "email"}), | |
| "team_workspace": workspace.model_dump(exclude_none=True).update({"id_team": team.id_team}), | |
| } | |
| r: Response = api_client.post( | |
| ApiRoutes.WORKSPACE_UPDATE, | |
| json=payload, | |
| ) | |
| if invalid_response(r): | |
| try: | |
| error_msg = r.json().get("detail", "Could not update workspace") | |
| except Exception: | |
| error_msg = f"Could not update workspace: {r.text}" | |
| logger.error(error_msg) | |
| return None | |
| response_json: Union[Dict, List] = r.json() | |
| if response_json is None: | |
| return None | |
| updated_workspace: WorkspaceSchema = WorkspaceSchema.model_validate(response_json) | |
| if updated_workspace is not None: | |
| return updated_workspace | |
| except Exception as e: | |
| logger.debug(f"Could not update workspace: {e}") | |
| return None | |
| def log_workspace_event(user: UserSchema, workspace_event: WorkspaceEvent) -> bool: | |
| if not phi_cli_settings.api_enabled: | |
| return False | |
| logger.debug("--**-- Log workspace event") | |
| with api.AuthenticatedClient() as api_client: | |
| try: | |
| r: Response = api_client.post( | |
| ApiRoutes.WORKSPACE_EVENT_CREATE, | |
| json={ | |
| "user": user.model_dump(include={"id_user", "email"}), | |
| "event": workspace_event.model_dump(exclude_none=True), | |
| }, | |
| ) | |
| if invalid_response(r): | |
| return False | |
| response_json: Union[Dict, List] = r.json() | |
| if response_json is None: | |
| return False | |
| if isinstance(response_json, dict) and response_json.get("status") == "success": | |
| return True | |
| return False | |
| except Exception as e: | |
| logger.debug(f"Could not log workspace event: {e}") | |
| return False | |