From 492110882b6d5e883decba346cca4eaf7570780e Mon Sep 17 00:00:00 2001 From: mpeltriaux Date: Mon, 1 Aug 2022 14:07:48 +0200 Subject: [PATCH] Fixes + enhancements * minor fixes and enhancements --- .../management/commands/kspMigrater/base_migrater.py | 12 +++++++----- .../commands/kspMigrater/eco_account_migrater.py | 12 +++++++----- .../management/commands/kspMigrater/user_migrater.py | 4 +++- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/konova/management/commands/kspMigrater/base_migrater.py b/konova/management/commands/kspMigrater/base_migrater.py index 630a3077..8a89ab1e 100644 --- a/konova/management/commands/kspMigrater/base_migrater.py +++ b/konova/management/commands/kspMigrater/base_migrater.py @@ -10,6 +10,7 @@ from django.utils.timezone import make_aware from konova.models import Geometry from konova.settings import DEFAULT_GROUP from user.models import User, UserActionLogEntry, UserAction, Team +from konova.tasks import celery_update_parcels class BaseMigrater: @@ -62,7 +63,7 @@ class BaseMigrater: geom = instance.geometry or Geometry() geom.geom = db_result_geom geom.save() - # celery_update_parcels.delay(geom.id) + celery_update_parcels.delay(geom.id) instance.geometry = geom return instance @@ -143,9 +144,10 @@ class BaseMigrater: ) fetch_results = tmp_cursor.fetchall() - instance.log.all().delete() + migrated_identifier = "(migriert)" + instance.log.filter(comment__contains=migrated_identifier).delete() for result in fetch_results: - comment = result[0] + comment = f"{result[0]} {migrated_identifier}" timestamp = make_aware(result[1]) user_name = result[2] user = self._get_migrate_user(user_name) @@ -172,11 +174,11 @@ class BaseMigrater: first_entry = instance.log.order_by("timestamp").first() last_entry = instance.log.order_by("-timestamp").first() - if first_entry is not None: + if first_entry is not None and instance.created is None: instance.created = UserActionLogEntry.get_created_action(first_entry.user) instance.created.timestamp = first_entry.timestamp instance.created.save() - if last_entry is not None: + if last_entry is not None and instance.modified != last_entry: instance.modified = last_entry tmp_cursor.close() diff --git a/konova/management/commands/kspMigrater/eco_account_migrater.py b/konova/management/commands/kspMigrater/eco_account_migrater.py index 9a3b5e90..fa815880 100644 --- a/konova/management/commands/kspMigrater/eco_account_migrater.py +++ b/konova/management/commands/kspMigrater/eco_account_migrater.py @@ -1,6 +1,6 @@ import datetime -from django.contrib.auth.models import Group +from django.contrib.gis.gdal import GDALException from django.contrib.gis.geos import MultiPolygon, Polygon from django.core.exceptions import ObjectDoesNotExist from django.db import transaction @@ -13,8 +13,8 @@ from compensation.utils.quality import EcoAccountQualityChecker from intervention.models import Responsibility, Handler, Intervention, Legal from konova.management.commands.kspMigrater.compensation_migrater import CompensationMigrater from konova.models import Geometry -from konova.sub_settings.lanis_settings import DEFAULT_SRID_RLP, DEFAULT_SRID -from user.models import User, UserActionLogEntry +from konova.sub_settings.lanis_settings import DEFAULT_SRID_RLP +from user.models import UserActionLogEntry class EcoAccountMigrater(CompensationMigrater): @@ -104,7 +104,7 @@ class EcoAccountMigrater(CompensationMigrater): if db_result_geom is not None: deductions_db_result_geom = MultiPolygon.from_ewkt(deduction_db_results[0][0]) else: - deductions_db_result_geom = MultiPolygon(srid=DEFAULT_SRID) + deductions_db_result_geom = MultiPolygon(srid=DEFAULT_SRID_RLP) tmp_cursor.execute( 'select ' @@ -121,7 +121,7 @@ class EcoAccountMigrater(CompensationMigrater): db_result_geom = account_db_result_geom.union(deductions_db_result_geom) if isinstance(db_result_geom, Polygon): - db_result_geom = MultiPolygon(db_result_geom, srid=DEFAULT_SRID) + db_result_geom = MultiPolygon(db_result_geom, srid=DEFAULT_SRID_RLP) instance.geometry = instance.geometry or Geometry() try: # Calculate area by transforming @@ -146,6 +146,8 @@ class EcoAccountMigrater(CompensationMigrater): instance.geometry.save() except TypeError: raise TypeError(f"{identifier}, {db_result_geom}") + except GDALException as e: + raise GDALException(f"{identifier}, {e}") tmp_cursor.close() return instance diff --git a/konova/management/commands/kspMigrater/user_migrater.py b/konova/management/commands/kspMigrater/user_migrater.py index 362e491d..408c5321 100644 --- a/konova/management/commands/kspMigrater/user_migrater.py +++ b/konova/management/commands/kspMigrater/user_migrater.py @@ -1,5 +1,5 @@ from django.contrib.auth.models import Group -from django.core.exceptions import ObjectDoesNotExist +from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned from codelist.models import KonovaCode from codelist.settings import CODELIST_CONSERVATION_OFFICE_ID, CODELIST_REGISTRATION_OFFICE_ID @@ -84,6 +84,8 @@ class UserMigrater(BaseMigrater): except ObjectDoesNotExist: # organisation code might not be valid anymore continue + except MultipleObjectsReturned as e: + raise MultipleObjectsReturned(f"{_org}: {e}") if company_team is not None and len(user_teams) == 0: # Only team is the company team company_team.users.add(user)