mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-05-19 10:59:21 +02:00
update to allow DomainRequest to import properly
This commit is contained in:
parent
011a974a1e
commit
780504c9f2
2 changed files with 29 additions and 48 deletions
|
@ -1,13 +1,10 @@
|
||||||
from datetime import date
|
from datetime import date
|
||||||
import logging
|
import logging
|
||||||
import copy
|
import copy
|
||||||
import traceback
|
|
||||||
import warnings
|
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.db.models import Value, CharField, Q
|
from django.db.models import Value, CharField, Q
|
||||||
from django.db.models.functions import Concat, Coalesce
|
from django.db.models.functions import Concat, Coalesce
|
||||||
from django.db.transaction import TransactionManagementError
|
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django_fsm import get_available_FIELD_transitions, FSMField
|
from django_fsm import get_available_FIELD_transitions, FSMField
|
||||||
|
@ -15,7 +12,6 @@ from django.contrib import admin, messages
|
||||||
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.core.exceptions import ValidationError
|
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from dateutil.relativedelta import relativedelta # type: ignore
|
from dateutil.relativedelta import relativedelta # type: ignore
|
||||||
from epplibwrapper.errors import ErrorCode, RegistryError
|
from epplibwrapper.errors import ErrorCode, RegistryError
|
||||||
|
@ -32,8 +28,7 @@ from django.utils.safestring import mark_safe
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.contrib.auth.forms import UserChangeForm, UsernameField
|
from django.contrib.auth.forms import UserChangeForm, UsernameField
|
||||||
from django_admin_multiple_choice_list_filter.list_filters import MultipleChoiceListFilter
|
from django_admin_multiple_choice_list_filter.list_filters import MultipleChoiceListFilter
|
||||||
from import_export import resources, widgets
|
from import_export import resources
|
||||||
from import_export.results import RowResult
|
|
||||||
from import_export.admin import ImportExportModelAdmin
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
@ -44,8 +39,6 @@ logger = logging.getLogger(__name__)
|
||||||
class FsmModelResource(resources.ModelResource):
|
class FsmModelResource(resources.ModelResource):
|
||||||
|
|
||||||
def init_instance(self, row=None):
|
def init_instance(self, row=None):
|
||||||
logger.info("Initializing instance")
|
|
||||||
logger.info(f"Row: {row}")
|
|
||||||
|
|
||||||
# Get fields which are fsm fields
|
# Get fields which are fsm fields
|
||||||
fsm_fields = []
|
fsm_fields = []
|
||||||
|
@ -55,8 +48,6 @@ class FsmModelResource(resources.ModelResource):
|
||||||
if row and f.name in row:
|
if row and f.name in row:
|
||||||
fsm_fields.append((f.name, row[f.name]))
|
fsm_fields.append((f.name, row[f.name]))
|
||||||
|
|
||||||
logger.info(f"Fsm fields: {fsm_fields}")
|
|
||||||
|
|
||||||
# Convert fields_and_values to kwargs
|
# Convert fields_and_values to kwargs
|
||||||
kwargs = dict(fsm_fields)
|
kwargs = dict(fsm_fields)
|
||||||
|
|
||||||
|
@ -64,25 +55,12 @@ class FsmModelResource(resources.ModelResource):
|
||||||
return self._meta.model(**kwargs)
|
return self._meta.model(**kwargs)
|
||||||
|
|
||||||
def import_field(self, field, obj, data, is_m2m=False, **kwargs):
|
def import_field(self, field, obj, data, is_m2m=False, **kwargs):
|
||||||
# logger.info(f"import_field: ${field}")
|
|
||||||
# logger.info(field.attribute)
|
|
||||||
# logger.info(field.widget)
|
|
||||||
# logger.info(type(obj))
|
|
||||||
# logger.info(obj._meta.fields)
|
|
||||||
is_fsm = False
|
is_fsm = False
|
||||||
for f in obj._meta.fields:
|
for f in obj._meta.fields:
|
||||||
# logger.info(f.name)
|
|
||||||
# logger.info(type(f))
|
|
||||||
if field.attribute == f.name and isinstance(f, FSMField):
|
if field.attribute == f.name and isinstance(f, FSMField):
|
||||||
is_fsm = True
|
is_fsm = True
|
||||||
# if field.attribute in sorted(obj._meta.fields):
|
|
||||||
# logger.info("in fields")
|
|
||||||
# if not isinstance(obj._meta.fields[field.attribute], FSMField):
|
|
||||||
if not is_fsm:
|
if not is_fsm:
|
||||||
# logger.info("not fsm field")
|
|
||||||
#if (field.attribute != 'state'):
|
|
||||||
super().import_field(field, obj, data, is_m2m, **kwargs)
|
super().import_field(field, obj, data, is_m2m, **kwargs)
|
||||||
# logger.info("finished importing")
|
|
||||||
|
|
||||||
|
|
||||||
class UserResource(resources.ModelResource):
|
class UserResource(resources.ModelResource):
|
||||||
|
|
|
@ -102,34 +102,37 @@ class CreateOrUpdateOrganizationTypeHelper:
|
||||||
|
|
||||||
def _handle_existing_instance(self, force_update_when_no_are_changes_found=False):
|
def _handle_existing_instance(self, force_update_when_no_are_changes_found=False):
|
||||||
# == Init variables == #
|
# == Init variables == #
|
||||||
# Instance is already in the database, fetch its current state
|
try:
|
||||||
current_instance = self.sender.objects.get(id=self.instance.id)
|
# Instance is already in the database, fetch its current state
|
||||||
|
current_instance = self.sender.objects.get(id=self.instance.id)
|
||||||
|
|
||||||
# Check the new and old values
|
# Check the new and old values
|
||||||
generic_org_type_changed = self.instance.generic_org_type != current_instance.generic_org_type
|
generic_org_type_changed = self.instance.generic_org_type != current_instance.generic_org_type
|
||||||
is_election_board_changed = self.instance.is_election_board != current_instance.is_election_board
|
is_election_board_changed = self.instance.is_election_board != current_instance.is_election_board
|
||||||
organization_type_changed = self.instance.organization_type != current_instance.organization_type
|
organization_type_changed = self.instance.organization_type != current_instance.organization_type
|
||||||
|
|
||||||
# == Check for invalid conditions before proceeding == #
|
# == Check for invalid conditions before proceeding == #
|
||||||
if organization_type_changed and (generic_org_type_changed or is_election_board_changed):
|
if organization_type_changed and (generic_org_type_changed or is_election_board_changed):
|
||||||
# Since organization type is linked with generic_org_type and election board,
|
# Since organization type is linked with generic_org_type and election board,
|
||||||
# we have to update one or the other, not both.
|
# we have to update one or the other, not both.
|
||||||
# This will not happen in normal flow as it is not possible otherwise.
|
# This will not happen in normal flow as it is not possible otherwise.
|
||||||
raise ValueError("Cannot update organization_type and generic_org_type simultaneously.")
|
raise ValueError("Cannot update organization_type and generic_org_type simultaneously.")
|
||||||
elif not organization_type_changed and (not generic_org_type_changed and not is_election_board_changed):
|
elif not organization_type_changed and (not generic_org_type_changed and not is_election_board_changed):
|
||||||
# No changes found
|
# No changes found
|
||||||
if force_update_when_no_are_changes_found:
|
if force_update_when_no_are_changes_found:
|
||||||
# If we want to force an update anyway, we can treat this record like
|
# If we want to force an update anyway, we can treat this record like
|
||||||
# its a new one in that we check for "None" values rather than changes.
|
# its a new one in that we check for "None" values rather than changes.
|
||||||
self._handle_new_instance()
|
self._handle_new_instance()
|
||||||
else:
|
else:
|
||||||
# == Update the linked values == #
|
# == Update the linked values == #
|
||||||
# Find out which field needs updating
|
# Find out which field needs updating
|
||||||
organization_type_needs_update = generic_org_type_changed or is_election_board_changed
|
organization_type_needs_update = generic_org_type_changed or is_election_board_changed
|
||||||
generic_org_type_needs_update = organization_type_changed
|
generic_org_type_needs_update = organization_type_changed
|
||||||
|
|
||||||
# Update the field
|
# Update the field
|
||||||
self._update_fields(organization_type_needs_update, generic_org_type_needs_update)
|
self._update_fields(organization_type_needs_update, generic_org_type_needs_update)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def _update_fields(self, organization_type_needs_update, generic_org_type_needs_update):
|
def _update_fields(self, organization_type_needs_update, generic_org_type_needs_update):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue