Skip to content

Commit

Permalink
Add method for removing metadata from an accession
Browse files Browse the repository at this point in the history
  • Loading branch information
danlamanna committed Sep 27, 2023
1 parent 2fcdd6a commit 9efa831
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
26 changes: 26 additions & 0 deletions isic/ingest/models/accession.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,32 @@ def update_metadata(

return modified

def remove_metadata(
self, user: User, metadata_fields: list[str], *, ignore_image_check=False, reset_review=True
):
"""Remove metadata from an accession."""
if self.pk and not ignore_image_check:
self._require_unpublished()

modified = False
with transaction.atomic():
for field in metadata_fields:
if self.metadata.pop(field, None) is not None:
modified = True

if reset_review:
from isic.ingest.services.accession.review import accession_review_delete

accession_review_delete(accession=self)

if modified:
self.metadata_versions.create(
creator=user,
metadata=self.metadata,
unstructured_metadata=self.unstructured_metadata,
)
self.save()

def remove_unstructured_metadata(
self, user: User, unstructured_metadata_fields: list[str]
) -> bool:
Expand Down
21 changes: 21 additions & 0 deletions isic/ingest/tests/test_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,27 @@ def test_accession_remove_unstructured_metadata(user, imageless_accession):
assert imageless_accession.metadata_versions.count() == 2


@pytest.mark.django_db
def test_accession_remove_metadata(user, imageless_accession):
imageless_accession.update_metadata(
user, {"diagnosis": "melanoma", "benign_malignant": "malignant"}
)
imageless_accession.remove_metadata(user, ["diagnosis"])
assert imageless_accession.metadata == {"benign_malignant": "malignant"}
assert imageless_accession.metadata_versions.count() == 2


@pytest.mark.django_db
def test_accession_remove_metadata_idempotent(user, imageless_accession):
imageless_accession.update_metadata(
user, {"diagnosis": "melanoma", "benign_malignant": "malignant"}
)
imageless_accession.remove_metadata(user, ["diagnosis"])
imageless_accession.remove_metadata(user, ["diagnosis"])
assert imageless_accession.metadata == {"benign_malignant": "malignant"}
assert imageless_accession.metadata_versions.count() == 2


@pytest.mark.django_db
def test_accession_remove_unstructured_metadata_idempotent(user, imageless_accession):
imageless_accession.update_metadata(user, {"foo": "bar", "baz": "qux"})
Expand Down

0 comments on commit 9efa831

Please sign in to comment.