from utils.exceptions import NotFound, Forbidden, BadRequest class CampaignNotFound(NotFound): detail = "Campaign not found." code = "campaign_not_found" class NotEditableField(Forbidden): detail = "Field editing restricted." code = "field_editing_restricted" class CampaignPlatformNotFound(NotFound): detail = "Campaign platform not found." code = "campaign_platform_not_found" class CampaignPlatformsGroupMismatch(BadRequest): detail = "Campaign platforms should be from the same group" code = "campaign_platforms_should_be_from_the_same_group" class PlacementNameNotUnique(BadRequest): detail = "Placement name not unique." code = "placement_name_not_unique" class InvalidPlacement(BadRequest): detail = "Invalid placement" code = "invalid_placement" class InvalidActionDSPCampaign(Forbidden): detail = "Invalid action for DSP campaign" code = "invalid_action_for_dsp_campaign" class InvalidActionManualCampaign(Forbidden): detail = "Invalid action for manual campaign" code = "invalid_action_for_manual_campaign" class EndDateGreaterThanStartDate(BadRequest): detail = "End date must be greater than or equal to the start date" code = "end_date_must_be_greater_start_date" class InvalidTargetStatus(BadRequest): detail = "Invalid target status" code = "invalid_target_status" class CampaignAlreadyAssigned(BadRequest): detail = "Campaign already assigned" code = "campaign_already_assigned" class CampaignAlreadyUnassigned(BadRequest): detail = "Campaign already unassigned" code = "campaign_already_unassigned" class CampaignAssignedToAnotherProject(BadRequest): detail = "Campaign assigned to another project" code = "campaign_assigned_to_another_project"