mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-05-28 07:10:04 +02:00
58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
"""Generates current-full.csv and current-federal.csv then uploads them to the desired URL."""
|
|
|
|
import logging
|
|
import os
|
|
|
|
from django.core.management import BaseCommand
|
|
from registrar.utility import csv_export
|
|
from registrar.utility.s3_bucket import S3ClientHelper
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = (
|
|
"Generates and uploads a current-full.csv file to our S3 bucket " "which is based off of all existing Domains."
|
|
)
|
|
|
|
def add_arguments(self, parser):
|
|
"""Add our two filename arguments."""
|
|
parser.add_argument("--directory", default="migrationdata", help="Desired directory")
|
|
parser.add_argument(
|
|
"--checkpath",
|
|
default=True,
|
|
help="Flag that determines if we do a check for os.path.exists. Used for test cases",
|
|
)
|
|
|
|
def handle(self, **options):
|
|
"""Grabs the directory then creates current-full.csv in that directory"""
|
|
file_name = "current-full.csv"
|
|
# Ensures a slash is added
|
|
directory = os.path.join(options.get("directory"), "")
|
|
check_path = options.get("checkpath")
|
|
|
|
logger.info("Generating report...")
|
|
try:
|
|
self.generate_current_full_report(directory, file_name, check_path)
|
|
except Exception as err:
|
|
# TODO - #1317: Notify operations when auto report generation fails
|
|
raise err
|
|
else:
|
|
logger.info(f"Success! Created {file_name}")
|
|
|
|
def generate_current_full_report(self, directory, file_name, check_path):
|
|
"""Creates a current-full.csv file under the specified directory,
|
|
then uploads it to a AWS S3 bucket"""
|
|
s3_client = S3ClientHelper()
|
|
file_path = os.path.join(directory, file_name)
|
|
|
|
# Generate a file locally for upload
|
|
with open(file_path, "w") as file:
|
|
csv_export.DomainDataFull.export_data_to_csv(file)
|
|
|
|
if check_path and not os.path.exists(file_path):
|
|
raise FileNotFoundError(f"Could not find newly created file at '{file_path}'")
|
|
|
|
# Upload this generated file for our S3 instance
|
|
s3_client.upload_file(file_path, file_name)
|