From f651dede90eb5c6dbade35b0362e9b4f18b90ec8 Mon Sep 17 00:00:00 2001 From: Sushil Tiwari Date: Thu, 4 Jun 2026 13:46:45 +0545 Subject: [PATCH 1/3] fix(project): null relation when delete aoi_geometry - add fields on while updating the aoi geometry --- apps/project/serializers.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/project/serializers.py b/apps/project/serializers.py index 1df4e0b6..9fe71efe 100644 --- a/apps/project/serializers.py +++ b/apps/project/serializers.py @@ -383,12 +383,22 @@ def update(self, instance: Project, validated_data: dict[typing.Any, typing.Any] proj_aoi_geometry = proj.aoi_geometry if proj_aoi_geometry: proj_aoi_geometry.delete() + proj.aoi_geometry = None # FIXME(tnagorra): remove these later proj.total_area = total_area proj.bbox = bbox proj.centroid = centroid - proj.save(update_fields=["aoi_geometry", "aoi_geometry_input_asset", "total_area"]) + proj.save( + update_fields=[ + "total_area", + "bbox", + "centroid", + "aoi_geometry", + "aoi_geometry_input_asset", + "total_area", + ], + ) return proj From 6b710fd53043187ee0761f0e2e7bf294f74f6d64 Mon Sep 17 00:00:00 2001 From: Sushil Tiwari Date: Mon, 8 Jun 2026 15:46:23 +0545 Subject: [PATCH 2/3] feat(project): add new migration file to backfill project geometry metadata --- .../migrations/0012_migrate_aoi_geometry.py | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 apps/project/migrations/0012_migrate_aoi_geometry.py diff --git a/apps/project/migrations/0012_migrate_aoi_geometry.py b/apps/project/migrations/0012_migrate_aoi_geometry.py new file mode 100644 index 00000000..36e757db --- /dev/null +++ b/apps/project/migrations/0012_migrate_aoi_geometry.py @@ -0,0 +1,38 @@ +# Generated by Django 5.2.5 on 2026-06-08 15:00 + +from django.db import migrations + + +def backfill_project_geometry_data(apps, schema_editor): + Project = apps.get_model("project", "Project") + + qs = ( + Project.objects.filter(aoi_geometry__isnull=False) + .select_related("aoi_geometry",) + .only("id", "aoi_geometry_id",) + ) + + for project in qs.iterator(): + aoi_geometry = project.aoi_geometry + if not aoi_geometry: + continue + + Project.objects.filter(id=project.id).update( + centroid=aoi_geometry.centroid, + bbox=aoi_geometry.bbox, + total_area=aoi_geometry.total_area, + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ("project", "0011_alter_project_project_type"), + ] + + operations = [ + migrations.RunPython( + backfill_project_geometry_data, + reverse_code=migrations.RunPython.noop, + ), + ] From b6dee48a6e5181ab7ce31c0a7e9947674e9ab1ab Mon Sep 17 00:00:00 2001 From: Sushil Tiwari Date: Mon, 8 Jun 2026 16:19:01 +0545 Subject: [PATCH 3/3] feat(ci): update codecov version on github action --- .github/workflows/ci.yml | 10 +---- .../migrations/0012_migrate_aoi_geometry.py | 38 ------------------ .../migrations/0013_migrate_aoi_geometry.py | 39 +++++++++++++++++++ 3 files changed, 41 insertions(+), 46 deletions(-) delete mode 100644 apps/project/migrations/0012_migrate_aoi_geometry.py create mode 100644 apps/project/migrations/0013_migrate_aoi_geometry.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 76aaddd2..6b919bc7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -167,17 +167,11 @@ jobs: run: docker compose run --rm test /code/misc/run_tests.sh - name: Upload test coverage to Codecov - uses: codecov/codecov-action@v5 - with: - token: ${{ secrets.CODECOV_TOKEN }} - fail_ci_if_error: true - - - name: Upload test results to Codecov - uses: codecov/test-results-action@v1 - if: ${{ !cancelled() }} + uses: codecov/codecov-action@v7 with: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true + report-type: test_results - name: 🐳 Docker push if: ${{ inputs.push_docker_image }} diff --git a/apps/project/migrations/0012_migrate_aoi_geometry.py b/apps/project/migrations/0012_migrate_aoi_geometry.py deleted file mode 100644 index 36e757db..00000000 --- a/apps/project/migrations/0012_migrate_aoi_geometry.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 5.2.5 on 2026-06-08 15:00 - -from django.db import migrations - - -def backfill_project_geometry_data(apps, schema_editor): - Project = apps.get_model("project", "Project") - - qs = ( - Project.objects.filter(aoi_geometry__isnull=False) - .select_related("aoi_geometry",) - .only("id", "aoi_geometry_id",) - ) - - for project in qs.iterator(): - aoi_geometry = project.aoi_geometry - if not aoi_geometry: - continue - - Project.objects.filter(id=project.id).update( - centroid=aoi_geometry.centroid, - bbox=aoi_geometry.bbox, - total_area=aoi_geometry.total_area, - ) - - -class Migration(migrations.Migration): - - dependencies = [ - ("project", "0011_alter_project_project_type"), - ] - - operations = [ - migrations.RunPython( - backfill_project_geometry_data, - reverse_code=migrations.RunPython.noop, - ), - ] diff --git a/apps/project/migrations/0013_migrate_aoi_geometry.py b/apps/project/migrations/0013_migrate_aoi_geometry.py new file mode 100644 index 00000000..5c06e1c0 --- /dev/null +++ b/apps/project/migrations/0013_migrate_aoi_geometry.py @@ -0,0 +1,39 @@ +# Generated by Django 5.2.5 on 2026-06-08 15:00 + +from django.db import migrations +from django.db.models import F + + +def backfill_project_geometry_data(apps, schema_editor): + Project = apps.get_model("project", "Project") + + projects = [] + + for project in ( + Project._default_manager + .filter(aoi_geometry__isnull=False) + .select_related("aoi_geometry") + .iterator() + ): + project.centroid = project.aoi_geometry.centroid + project.bbox = project.aoi_geometry.bbox + project.total_area = project.aoi_geometry.total_area + projects.append(project) + + Project._default_manager.bulk_update( + projects, + ["centroid", "bbox", "total_area"], + ) + +class Migration(migrations.Migration): + + dependencies = [ + ("project", "0012_alter_project_project_type"), + ] + + operations = [ + migrations.RunPython( + backfill_project_geometry_data, + reverse_code=migrations.RunPython.noop, + ), + ]