from flask import Response from datetime import datetime from auth.auth_view import AuthorizedView from campaign_ads.services.campaign_ads_exporter import CampaignAdsExporter from campaign_ads.permissions.campaign_ads_permissions import CampaignAdsPermissions from shared.validators import validate_UUID from utils.handlers import get_request_query_model from campaign_ads.schemas import CampaignAdsExportParams from dateutil.tz import gettz class ExportCampaignAdsView(AuthorizedView): permissions = CampaignAdsPermissions() def get(self, campaign_uuid: str): validate_UUID(campaign_uuid) params = get_request_query_model(CampaignAdsExportParams) service = CampaignAdsExporter() csv_content = service.export_campaign_ads_csv(campaign_uuid, params) response = Response(csv_content, mimetype="text/csv") response.headers["Content-Disposition"] = "attachment; filename={} Ad Sets.csv".format( datetime.now(gettz(params.timeZone)).strftime("%Y-%m-%d %H-%M-%S") ) return response