From 7b5beba813b40a6994cd671d0aaa7d69d10b70d2 Mon Sep 17 00:00:00 2001 From: Erin <121973038+erinysong@users.noreply.github.com> Date: Tue, 19 Mar 2024 10:36:14 -0700 Subject: [PATCH] Add initial federal agency model migration --- src/registrar/admin.py | 3 +- .../migrations/0077_federalagency.py | 26 +++++++++ src/registrar/models/__init__.py | 3 + src/registrar/models/federal_agency.py | 55 +++++++++---------- 4 files changed, 56 insertions(+), 31 deletions(-) create mode 100644 src/registrar/migrations/0077_federalagency.py diff --git a/src/registrar/admin.py b/src/registrar/admin.py index 4968da527..82f010692 100644 --- a/src/registrar/admin.py +++ b/src/registrar/admin.py @@ -15,7 +15,7 @@ from django.contrib.contenttypes.models import ContentType from django.urls import reverse from dateutil.relativedelta import relativedelta # type: ignore from epplibwrapper.errors import ErrorCode, RegistryError -from registrar.models import Contact, Domain, DomainRequest, DraftDomain, User, Website +from registrar.models import Contact, Domain, DomainRequest, DraftDomain, User, Website, FederalAgency from registrar.utility import csv_export from registrar.utility.errors import FSMApplicationError, FSMErrorCodes from registrar.views.utility.mixins import OrderableFieldsMixin @@ -1839,6 +1839,7 @@ admin.site.register(models.DomainInvitation, DomainInvitationAdmin) admin.site.register(models.DomainInformation, DomainInformationAdmin) admin.site.register(models.Domain, DomainAdmin) admin.site.register(models.DraftDomain, DraftDomainAdmin) +admin.site.register(FederalAgency) # Host and HostIP removed from django admin because changes in admin # do not propagate to registry and logic not applied admin.site.register(models.Host, MyHostAdmin) diff --git a/src/registrar/migrations/0077_federalagency.py b/src/registrar/migrations/0077_federalagency.py new file mode 100644 index 000000000..3913fbde3 --- /dev/null +++ b/src/registrar/migrations/0077_federalagency.py @@ -0,0 +1,26 @@ +# Generated by Django 4.2.10 on 2024-03-19 05:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("registrar", "0076_alter_domainrequest_current_websites_and_more"), + ] + + operations = [ + migrations.CreateModel( + name="FederalAgency", + fields=[ + ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ("agency", models.CharField(blank=True, help_text="Federal agency", null=True)), + ], + options={ + "verbose_name": "Federal agency", + "verbose_name_plural": "Federal agencies", + }, + ), + ] diff --git a/src/registrar/models/__init__.py b/src/registrar/models/__init__.py index d203421ac..d3bbb3ae5 100644 --- a/src/registrar/models/__init__.py +++ b/src/registrar/models/__init__.py @@ -4,6 +4,7 @@ from .domain_request import DomainRequest from .domain_information import DomainInformation from .domain import Domain from .draft_domain import DraftDomain +from .federal_agency import FederalAgency from .host_ip import HostIP from .host import Host from .domain_invitation import DomainInvitation @@ -22,6 +23,7 @@ __all__ = [ "Domain", "DraftDomain", "DomainInvitation", + "FederalAgency", "HostIP", "Host", "UserDomainRole", @@ -39,6 +41,7 @@ auditlog.register(Domain) auditlog.register(DraftDomain) auditlog.register(DomainInvitation) auditlog.register(DomainInformation) +auditlog.register(FederalAgency) auditlog.register(HostIP) auditlog.register(Host) auditlog.register(UserDomainRole) diff --git a/src/registrar/models/federal_agency.py b/src/registrar/models/federal_agency.py index b6e72f58d..544f00a9b 100644 --- a/src/registrar/models/federal_agency.py +++ b/src/registrar/models/federal_agency.py @@ -1,22 +1,30 @@ -from django.contrib.auth.models import Group +from .utility.time_stamped_model import TimeStampedModel +from django.db import models import logging logger = logging.getLogger(__name__) # TODO: Update param model -class FederalAgency(Group): +class FederalAgency(TimeStampedModel): class Meta: verbose_name = "Federal agency" verbose_name_plural = "Federal agencies" + + agency = models.CharField( + null=True, + blank=True, + help_text="Federal agency", + ) # TODO: Update parameters to put in def create_federal_agencies(apps, schema_editor): """This method gets run from a data migration.""" - + # Hard to pass self to these methods as the calls from migrations # are only expecting apps and schema_editor, so we'll just define # apps, schema_editor in the local scope instead + AGENCIES = [ "Administrative Conference of the United States", "Advisory Council on Historic Preservation", @@ -202,30 +210,17 @@ class FederalAgency(Group): "Woodrow Wilson International Center for Scholars", "World War I Centennial Commission", ] - - # TODO: Get apps back here - FederalAgency = apps.get_model("registrar", "FederalAgency") - - try: - federal_agencies_list, _ = FederalAgency.objects.get_or_create( - name="cisa_analysts_group", - ) - - federal_agencies_list.federal_agency.clear() - - # TODO: Why is AGENCIES not loading here? - for agency in AGENCIES: - - # Assign the permissions to the group - federal_agencies_list.agency.add(*agency) - - # TODO: Maybe remove? - # Convert the permissions QuerySet to a list of codenames - agency_list = list(agency.values_list("codename", flat=True)) - - logger.debug(agency + " added to group " + federal_agencies_list.name) - - federal_agencies_list.save() - logger.debug("Federal agency added to table " + federal_agencies_list.name) - except Exception as e: - logger.error(f"Error creating fedearl agency: {e}") + + FederalAgency = apps.get_model("registrar", "FederalAgency") + logger.info("Creating federal agency table.") + + try: + for agency in AGENCIES: + federal_agencies_list, _ = FederalAgency.objects.get_or_create( + agency=agency, + ) + logger.debug(agency + " added to record " + federal_agencies_list.agency) + federal_agencies_list.save() + logger.debug("Federal agency added to table " + federal_agencies_list.agency) + except Exception as e: + logger.error(f"Error creating federal agency: {e}")