projects.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import json
  2. from typing import Optional, Union
  3. from pydantic import BaseModel
  4. from fastapi import APIRouter, Depends, HTTPException, status
  5. from open_webui.apps.webui.models.projects import (
  6. Projects,
  7. ProjectModel,
  8. ProjectForm,
  9. ProjectResponse,
  10. )
  11. from open_webui.constants import ERROR_MESSAGES
  12. from open_webui.utils.utils import get_admin_user, get_verified_user
  13. router = APIRouter()
  14. ############################
  15. # GetProjects
  16. ############################
  17. @router.get("/", response_model=Optional[Union[list[ProjectResponse], ProjectResponse]])
  18. async def get_projects(id: Optional[str] = None, user=Depends(get_verified_user)):
  19. if id:
  20. project = Projects.get_project_by_id(id=id)
  21. if project:
  22. return project
  23. else:
  24. raise HTTPException(
  25. status_code=status.HTTP_401_UNAUTHORIZED,
  26. detail=ERROR_MESSAGES.NOT_FOUND,
  27. )
  28. else:
  29. return [
  30. ProjectResponse(**project.model_dump())
  31. for project in Projects.get_projects()
  32. ]
  33. ############################
  34. # CreateNewProject
  35. ############################
  36. @router.post("/create", response_model=Optional[ProjectResponse])
  37. async def create_new_project(form_data: ProjectForm, user=Depends(get_admin_user)):
  38. project = Projects.get_project_by_id(form_data.id)
  39. if project is None:
  40. project = Projects.insert_new_project(user.id, form_data)
  41. if project:
  42. return project
  43. else:
  44. raise HTTPException(
  45. status_code=status.HTTP_400_BAD_REQUEST,
  46. detail=ERROR_MESSAGES.FILE_EXISTS,
  47. )
  48. else:
  49. raise HTTPException(
  50. status_code=status.HTTP_400_BAD_REQUEST,
  51. detail=ERROR_MESSAGES.ID_TAKEN,
  52. )
  53. ############################
  54. # UpdateProjectById
  55. ############################
  56. @router.post("/update", response_model=Optional[ProjectResponse])
  57. async def update_project_by_id(
  58. form_data: ProjectForm,
  59. user=Depends(get_admin_user),
  60. ):
  61. project = Projects.update_project_by_id(form_data)
  62. if project:
  63. return project
  64. else:
  65. raise HTTPException(
  66. status_code=status.HTTP_400_BAD_REQUEST,
  67. detail=ERROR_MESSAGES.ID_TAKEN,
  68. )
  69. ############################
  70. # DeleteProjectById
  71. ############################
  72. @router.delete("/delete", response_model=bool)
  73. async def delete_project_by_id(id: str, user=Depends(get_admin_user)):
  74. result = Projects.delete_project_by_id(id=id)
  75. return result