from typing import List from flask import g from services.permissions.exceptions import ( UserNotFound, UserHasNoAccessToLabel, LabelNotFound, UsersValidationError ) from services.users_repository import UsersRepository from utils.exceptions import Forbidden from utils.list_utils import diff class UsersValidator: users_repository = UsersRepository() def validate_request_user_admin(self): if not g.is_admin: raise Forbidden() def validate_user_exist(self, user_id: int): if not self.users_repository.is_user_exists(user_id): raise UserNotFound() def validate_users_exists_and_from_label(self, label_id: int, users_ids: List[int]): users = self.users_repository.get_users_with_label(label_id, users_ids) unmatched_users = diff(users_ids, [user.id for user in users]) if unmatched_users: raise UsersValidationError(f"Users with id {unmatched_users} not found or not have label {label_id}") def validate_user_has_label(self, user_id: int, label_id: int): if not self.users_repository.is_user_has_label(user_id, label_id): raise UserHasNoAccessToLabel() def validate_label_exist(self, label_id: int): if not self.users_repository.is_label_exists(label_id): raise LabelNotFound()