from flask import g from sqlalchemy.orm.exc import NoResultFound from campaigns.exceptions import CampaignNotFound from campaigns.repositories.campaigns_repository import CampaignsRepository from campaign_ads.permissions.exceptions import AdSetViewRestricted from services.permission_role_service import PermissionsByRoleService from campaign_ads.permissions.repository import CampaignAdsPermissionsRepository from services.users_repository import UsersRepository class CampaignAdsPermissions: permission_role_service = PermissionsByRoleService() campaign_repository = CampaignsRepository() repository = CampaignAdsPermissionsRepository() users_repository = UsersRepository() def can_view_campaign_ads(self, campaign_uuid: str): try: campaign = self.campaign_repository.get_campaign_by_uuid(campaign_uuid) if not campaign: raise CampaignNotFound() can_view_campaign = self.permission_role_service.can_view_campaign(g.user_id, campaign.project) campaign_not_approved = campaign.project_id is not None can_view_campaign = can_view_campaign and not campaign.is_deleted has_access_to_gras_project = self.repository.has_access_to_gras_campaign(campaign.id) if campaign_not_approved and not has_access_to_gras_project and not can_view_campaign: raise AdSetViewRestricted() if not campaign_not_approved and not self.users_repository.get_user_label(g.user_id, campaign.label_id): raise AdSetViewRestricted() except NoResultFound: raise AdSetViewRestricted()