Spaces:
Running
Running
| from uuid import UUID | |
| from fastapi import APIRouter, HTTPException | |
| from sqlalchemy.exc import NoResultFound | |
| from langflow.api.utils import CurrentActiveUser, DbSession | |
| from langflow.services.database.models.variable import VariableCreate, VariableRead, VariableUpdate | |
| from langflow.services.deps import get_variable_service | |
| from langflow.services.variable.constants import GENERIC_TYPE | |
| from langflow.services.variable.service import DatabaseVariableService | |
| router = APIRouter(prefix="/variables", tags=["Variables"]) | |
| async def create_variable( | |
| *, | |
| session: DbSession, | |
| variable: VariableCreate, | |
| current_user: CurrentActiveUser, | |
| ): | |
| """Create a new variable.""" | |
| variable_service = get_variable_service() | |
| if not variable.name and not variable.value: | |
| raise HTTPException(status_code=400, detail="Variable name and value cannot be empty") | |
| if not variable.name: | |
| raise HTTPException(status_code=400, detail="Variable name cannot be empty") | |
| if not variable.value: | |
| raise HTTPException(status_code=400, detail="Variable value cannot be empty") | |
| if variable.name in await variable_service.list_variables(user_id=current_user.id, session=session): | |
| raise HTTPException(status_code=400, detail="Variable name already exists") | |
| try: | |
| return await variable_service.create_variable( | |
| user_id=current_user.id, | |
| name=variable.name, | |
| value=variable.value, | |
| default_fields=variable.default_fields or [], | |
| type_=variable.type or GENERIC_TYPE, | |
| session=session, | |
| ) | |
| except Exception as e: | |
| if isinstance(e, HTTPException): | |
| raise | |
| raise HTTPException(status_code=500, detail=str(e)) from e | |
| async def read_variables( | |
| *, | |
| session: DbSession, | |
| current_user: CurrentActiveUser, | |
| ): | |
| """Read all variables.""" | |
| variable_service = get_variable_service() | |
| if not isinstance(variable_service, DatabaseVariableService): | |
| msg = "Variable service is not an instance of DatabaseVariableService" | |
| raise TypeError(msg) | |
| try: | |
| return await variable_service.get_all(user_id=current_user.id, session=session) | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) from e | |
| async def update_variable( | |
| *, | |
| session: DbSession, | |
| variable_id: UUID, | |
| variable: VariableUpdate, | |
| current_user: CurrentActiveUser, | |
| ): | |
| """Update a variable.""" | |
| variable_service = get_variable_service() | |
| if not isinstance(variable_service, DatabaseVariableService): | |
| msg = "Variable service is not an instance of DatabaseVariableService" | |
| raise TypeError(msg) | |
| try: | |
| return await variable_service.update_variable_fields( | |
| user_id=current_user.id, | |
| variable_id=variable_id, | |
| variable=variable, | |
| session=session, | |
| ) | |
| except NoResultFound as e: | |
| raise HTTPException(status_code=404, detail="Variable not found") from e | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) from e | |
| async def delete_variable( | |
| *, | |
| session: DbSession, | |
| variable_id: UUID, | |
| current_user: CurrentActiveUser, | |
| ) -> None: | |
| """Delete a variable.""" | |
| variable_service = get_variable_service() | |
| try: | |
| await variable_service.delete_variable_by_id(user_id=current_user.id, variable_id=variable_id, session=session) | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) from e | |