projects.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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.insert_new_project(user.id, form_data)
  39. if project:
  40. return project
  41. else:
  42. raise HTTPException(
  43. status_code=status.HTTP_400_BAD_REQUEST,
  44. detail=ERROR_MESSAGES.FILE_EXISTS,
  45. )
  46. ############################
  47. # GetProjectById
  48. ############################
  49. @router.get("/{id}", response_model=Optional[ProjectResponse])
  50. async def get_projects(id: str, user=Depends(get_verified_user)):
  51. project = Projects.get_project_by_id(id=id)
  52. if project:
  53. return project
  54. else:
  55. raise HTTPException(
  56. status_code=status.HTTP_401_UNAUTHORIZED,
  57. detail=ERROR_MESSAGES.NOT_FOUND,
  58. )
  59. ############################
  60. # UpdateProjectById
  61. ############################
  62. @router.post("/{id}/update", response_model=Optional[ProjectResponse])
  63. async def update_project_by_id(
  64. id: str,
  65. form_data: ProjectForm,
  66. user=Depends(get_admin_user),
  67. ):
  68. project = Projects.update_project_by_id(form_data)
  69. if project:
  70. return project
  71. else:
  72. raise HTTPException(
  73. status_code=status.HTTP_400_BAD_REQUEST,
  74. detail=ERROR_MESSAGES.ID_TAKEN,
  75. )
  76. ############################
  77. # DeleteProjectById
  78. ############################
  79. @router.delete("/{id}/delete", response_model=bool)
  80. async def delete_project_by_id(id: str, user=Depends(get_admin_user)):
  81. result = Projects.delete_project_by_id(id=id)
  82. return result