Skip to content

Commit

Permalink
issue SACGF/variantgrid_private#3676 - do some migrations to solve pr…
Browse files Browse the repository at this point in the history
…oblem
  • Loading branch information
davmlaw committed Aug 6, 2024
1 parent 39b2afe commit 2c87873
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Generated by Django 4.2.11 on 2024-08-06 11:08

from django.db import migrations
from django.db.models import Q

from manual.operations.manual_operations import ManualOperation


def _get_iai_qs(apps):
Variant = apps.get_model("snpdb", "Variant")
ImportedAlleleInfo = apps.get_model("classification", "ImportedAlleleInfo")
bad_norm_qs = Variant.objects.filter(svlen__isnull=False, modifiedimportedvariant__isnull=False)
return ImportedAlleleInfo.objects.filter(Q(grch37__variant__in=bad_norm_qs) | Q(grch38__variant__in=bad_norm_qs))


def _needs_hard_rematch(apps):
qs = _get_iai_qs(apps)
return qs.exists()


def _get_note(apps):
qs = _get_iai_qs(apps)
instructions = None
if imported_allele_ids := list(qs.values_list("pk", flat=True)):
iais = ", ".join((str(pk) for pk in imported_allele_ids))
instructions = f"Go to /admin/classification/importedalleleinfo/ and select {iais}"
return instructions


class Migration(migrations.Migration):
dependencies = [
("classification", "0152_allele_origin_confirmed_ekey"),
("snpdb", "0118_reminder_one_off_fix_variant_end"),
]

operations = [
ManualOperation.operation_other(args="AFTER fix_variant_end - Rematch hard imported alleles to badly normalized symbolic variants. ",
note=_get_note, test=_needs_hard_rematch),
]
6 changes: 5 additions & 1 deletion manual/operations/manual_operations.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,11 @@ def run(self, apps, reverse=False):
ManualMigrationTask.objects.filter(pk=self.task_id).delete()
else:
task, _ = ManualMigrationTask.objects.get_or_create(pk=self.task_id)
ManualMigrationRequsted.objects.create(task=task, note=self.note)
if callable(self.note):
note = self.note(apps)
else:
note = self.note
ManualMigrationRequsted.objects.create(task=task, note=note)

@staticmethod
def operation_manage(args: list[str], note: Optional[str] = None, test: Callable = None):
Expand Down
22 changes: 22 additions & 0 deletions snpdb/migrations/0141_one_off_fix_variant_end2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Generated by Django 4.2.11 on 2024-08-06 10:59

from django.db import migrations

from manual.operations.manual_operations import ManualOperation


def _existing_deploy_has_variants(apps):
Variant = apps.get_model("snpdb", "Variant")
return Variant.objects.exists()


class Migration(migrations.Migration):
dependencies = [
("snpdb", "0140_case_insensitive_collation"),
]

operations = [
ManualOperation(task_id=ManualOperation.task_id_manage(["one_off_fix_variant_end"]),
test=_existing_deploy_has_variants),

]
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Generated by Django 4.2.11 on 2024-08-06 12:04
import json
import os

from django.conf import settings
from django.db import migrations

from library.utils import mk_path


def _delete_bad_modified_imported_variants(apps, schema_editor):
ModifiedImportedVariant = apps.get_model("upload", "ModifiedImportedVariant")
qs = ModifiedImportedVariant.objects.all().filter(variant__svlen__isnull=False)
if miv_values := list(qs.values()):
migrations_dir = os.path.join(settings.PRIVATE_DATA_ROOT, "migrations")
mk_path(migrations_dir)
bad_modifications_filename = os.path.join(migrations_dir, "bad_modifications_filename.json")
with open(bad_modifications_filename, "w") as f:
json.dump(miv_values, f)
print(f"Wrote {len(miv_values)} incorretly normalized symbolic variants to '{bad_modifications_filename}'")
qs.delete()


class Migration(migrations.Migration):
dependencies = [
("upload", "0021_remove_uploadedfile_md5_hash"),
("classification", "0153_one_off_remind_rematch_allele_info_bad_end_norm")
]

operations = [
migrations.RunPython(_delete_bad_modified_imported_variants)
]

0 comments on commit 2c87873

Please sign in to comment.