Spaces:
Paused
Paused
| import os | |
| from pathlib import Path | |
| from typing import Optional | |
| import logging | |
| from open_webui.models.users import Users | |
| from open_webui.models.groups import ( | |
| Groups, | |
| GroupForm, | |
| GroupUpdateForm, | |
| GroupResponse, | |
| ) | |
| from open_webui.config import CACHE_DIR | |
| from open_webui.constants import ERROR_MESSAGES | |
| from fastapi import APIRouter, Depends, HTTPException, Request, status | |
| from open_webui.utils.auth import get_admin_user, get_verified_user | |
| from open_webui.env import SRC_LOG_LEVELS | |
| log = logging.getLogger(__name__) | |
| log.setLevel(SRC_LOG_LEVELS["MAIN"]) | |
| router = APIRouter() | |
| ############################ | |
| # GetFunctions | |
| ############################ | |
| async def get_groups(user=Depends(get_verified_user)): | |
| if user.role == "admin": | |
| return Groups.get_groups() | |
| else: | |
| return Groups.get_groups_by_member_id(user.id) | |
| ############################ | |
| # CreateNewGroup | |
| ############################ | |
| async def create_new_group(form_data: GroupForm, user=Depends(get_admin_user)): | |
| try: | |
| group = Groups.insert_new_group(user.id, form_data) | |
| if group: | |
| return group | |
| else: | |
| raise HTTPException( | |
| status_code=status.HTTP_400_BAD_REQUEST, | |
| detail=ERROR_MESSAGES.DEFAULT("Error creating group"), | |
| ) | |
| except Exception as e: | |
| log.exception(f"Error creating a new group: {e}") | |
| raise HTTPException( | |
| status_code=status.HTTP_400_BAD_REQUEST, | |
| detail=ERROR_MESSAGES.DEFAULT(e), | |
| ) | |
| ############################ | |
| # GetGroupById | |
| ############################ | |
| async def get_group_by_id(id: str, user=Depends(get_admin_user)): | |
| group = Groups.get_group_by_id(id) | |
| if group: | |
| return group | |
| else: | |
| raise HTTPException( | |
| status_code=status.HTTP_401_UNAUTHORIZED, | |
| detail=ERROR_MESSAGES.NOT_FOUND, | |
| ) | |
| ############################ | |
| # UpdateGroupById | |
| ############################ | |
| async def update_group_by_id( | |
| id: str, form_data: GroupUpdateForm, user=Depends(get_admin_user) | |
| ): | |
| try: | |
| if form_data.user_ids: | |
| form_data.user_ids = Users.get_valid_user_ids(form_data.user_ids) | |
| group = Groups.update_group_by_id(id, form_data) | |
| if group: | |
| return group | |
| else: | |
| raise HTTPException( | |
| status_code=status.HTTP_400_BAD_REQUEST, | |
| detail=ERROR_MESSAGES.DEFAULT("Error updating group"), | |
| ) | |
| except Exception as e: | |
| log.exception(f"Error updating group {id}: {e}") | |
| raise HTTPException( | |
| status_code=status.HTTP_400_BAD_REQUEST, | |
| detail=ERROR_MESSAGES.DEFAULT(e), | |
| ) | |
| ############################ | |
| # DeleteGroupById | |
| ############################ | |
| async def delete_group_by_id(id: str, user=Depends(get_admin_user)): | |
| try: | |
| result = Groups.delete_group_by_id(id) | |
| if result: | |
| return result | |
| else: | |
| raise HTTPException( | |
| status_code=status.HTTP_400_BAD_REQUEST, | |
| detail=ERROR_MESSAGES.DEFAULT("Error deleting group"), | |
| ) | |
| except Exception as e: | |
| log.exception(f"Error deleting group {id}: {e}") | |
| raise HTTPException( | |
| status_code=status.HTTP_400_BAD_REQUEST, | |
| detail=ERROR_MESSAGES.DEFAULT(e), | |
| ) | |