Skip to content

Commit

Permalink
Merge pull request #839 from ImageMarkup/fix-licenses
Browse files Browse the repository at this point in the history
  • Loading branch information
danlamanna authored Feb 13, 2024
2 parents e41e295 + c70a3d8 commit ebaa842
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Generated by Django 4.1.13 on 2024-02-13 16:56

from django.db import migrations, models
import django.db.models.deletion
from django.db.models.expressions import OuterRef, Subquery


def set_copyright_license(apps, schema_editor):
Accession = apps.get_model("ingest", "Accession")

Accession.objects.filter(copyright_license="").update(
copyright_license=Subquery(
Accession.objects.filter(id=OuterRef("id"))
.annotate(default_copyright_license=models.F("cohort__default_copyright_license"))
.values("default_copyright_license")[:1]
)
)


class Migration(migrations.Migration):

dependencies = [
("ingest", "0048_metadatafile_validation_completed_and_more"),
]

operations = [
migrations.AlterField(
model_name="accession",
name="blob_size",
field=models.PositiveBigIntegerField(
blank=True, default=None, editable=False, null=True
),
),
migrations.AlterField(
model_name="accession",
name="height",
field=models.PositiveIntegerField(blank=True, null=True),
),
migrations.AlterField(
model_name="accession",
name="lesion",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="accessions",
to="ingest.lesion",
),
),
migrations.AlterField(
model_name="accession",
name="metadata",
field=models.JSONField(blank=True, default=dict),
),
migrations.AlterField(
model_name="accession",
name="patient",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="accessions",
to="ingest.patient",
),
),
migrations.AlterField(
model_name="accession",
name="thumbnail_256_size",
field=models.PositiveIntegerField(blank=True, default=None, editable=False, null=True),
),
migrations.AlterField(
model_name="accession",
name="unstructured_metadata",
field=models.JSONField(blank=True, default=dict),
),
migrations.AlterField(
model_name="accession",
name="width",
field=models.PositiveIntegerField(blank=True, null=True),
),
migrations.AlterField(
model_name="accession",
name="zip_upload",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="accessions",
to="ingest.zipupload",
),
),
migrations.RunPython(set_copyright_license),
]
20 changes: 11 additions & 9 deletions isic/ingest/models/accession.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ class Meta(CreationSortedTimeStampedModel.Meta):
blank=True, max_length=24, help_text="The image_id from Girder.", db_index=True
)
zip_upload = models.ForeignKey(
ZipUpload, on_delete=models.CASCADE, null=True, related_name="accessions"
ZipUpload, on_delete=models.CASCADE, null=True, blank=True, related_name="accessions"
)
cohort = models.ForeignKey(Cohort, on_delete=models.CASCADE, related_name="accessions")

Expand All @@ -174,25 +174,27 @@ class Meta(CreationSortedTimeStampedModel.Meta):
# WHERE blob_name IN (...) queries
blob_name = models.CharField(max_length=255, db_index=True, editable=False, blank=True)
# blob_size/width/height are nullable unless status is succeeded
blob_size = models.PositiveBigIntegerField(null=True, default=None, editable=False)
width = models.PositiveIntegerField(null=True)
height = models.PositiveIntegerField(null=True)
blob_size = models.PositiveBigIntegerField(null=True, blank=True, default=None, editable=False)
width = models.PositiveIntegerField(null=True, blank=True)
height = models.PositiveIntegerField(null=True, blank=True)

status = models.CharField(
choices=AccessionStatus.choices, max_length=20, default=AccessionStatus.CREATING
)

thumbnail_256 = S3FileField(blank=True)
thumbnail_256_size = models.PositiveIntegerField(null=True, default=None, editable=False)
thumbnail_256_size = models.PositiveIntegerField(
null=True, blank=True, default=None, editable=False
)

metadata = models.JSONField(default=dict)
unstructured_metadata = models.JSONField(default=dict)
metadata = models.JSONField(default=dict, blank=True)
unstructured_metadata = models.JSONField(default=dict, blank=True)

lesion = models.ForeignKey(
Lesion, on_delete=models.SET_NULL, null=True, related_name="accessions"
Lesion, on_delete=models.SET_NULL, null=True, blank=True, related_name="accessions"
)
patient = models.ForeignKey(
Patient, on_delete=models.SET_NULL, null=True, related_name="accessions"
Patient, on_delete=models.SET_NULL, null=True, blank=True, related_name="accessions"
)

objects = AccessionQuerySet.as_manager()
Expand Down
2 changes: 2 additions & 0 deletions isic/ingest/models/zip_upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ def extract(self):
accession = Accession.from_blob(zip_item)
accession.creator = self.creator
accession.cohort = self.cohort
accession.copyright_license = accession.cohort.default_copyright_license
accession.full_clean(validate_constraints=False)
self.accessions.add(accession, bulk=False)

self.accessions.update(status=AccessionStatus.CREATED)
Expand Down
5 changes: 4 additions & 1 deletion isic/ingest/services/accession/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from isic.ingest.tasks import accession_generate_blob_task


# Note: this method isn't used when creating accessions as part of a zip extraction.
def accession_create(
*,
creator: User,
Expand All @@ -26,14 +27,16 @@ def accession_create(
if isinstance(original_blob, S3PlaceholderFile):
original_blob = original_blob.name

accession = Accession.objects.create(
accession = Accession(
creator=creator,
cohort=cohort,
copyright_license=cohort.default_copyright_license,
original_blob=original_blob,
original_blob_name=original_blob_name,
original_blob_size=original_blob_size,
)
accession.full_clean(validate_constraints=False)
accession.save()

accession_generate_blob_task.delay(accession.pk)

Expand Down
3 changes: 3 additions & 0 deletions isic/ingest/tests/test_accession.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ def test_accession_without_zip_upload(user, jpg_blob, cohort):
accession = Accession.from_blob(jpg_blob)
accession.creator = user
accession.cohort = cohort
accession.copyright_license = cohort.default_copyright_license
accession.full_clean(validate_constraints=False)
accession.save()


Expand Down Expand Up @@ -99,6 +101,7 @@ def test_accession_upload_invalid_cohort(
def test_accession_mutable_before_publish(user, accession_factory):
accession = accession_factory(image=None)
accession.update_metadata(user, {"foo": "bar"})
accession.full_clean(validate_constraints=False)
accession.save()


Expand Down

0 comments on commit ebaa842

Please sign in to comment.