try to fix logging
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
from django.urls import reverse
|
||||
|
||||
from atlas.models import SeriesImage, UncategorisedDicom
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_user_uploads_partial_import_button_prefers_case_for_hash_matched_series(
|
||||
client,
|
||||
admin_user,
|
||||
create_series,
|
||||
create_case,
|
||||
make_case,
|
||||
):
|
||||
client.force_login(admin_user)
|
||||
|
||||
primary_case = create_case
|
||||
primary_case.author.add(admin_user)
|
||||
|
||||
secondary_case = make_case(title="Secondary Case")
|
||||
secondary_case.author.add(admin_user)
|
||||
|
||||
existing_series = create_series
|
||||
existing_series.series_instance_uid = "atlas-series-1"
|
||||
existing_series.study_instance_uid = "study-1"
|
||||
existing_series.save(update_fields=["series_instance_uid", "study_instance_uid"])
|
||||
|
||||
primary_case.series.add(existing_series)
|
||||
secondary_case.series.add(existing_series)
|
||||
|
||||
SeriesImage.objects.create(series=existing_series, image_blake3_hash="shared-hash")
|
||||
|
||||
UncategorisedDicom.objects.bulk_create(
|
||||
[
|
||||
UncategorisedDicom(
|
||||
image="pending-upload.dcm",
|
||||
user=admin_user,
|
||||
series_instance_uid="uploaded-series-1",
|
||||
image_blake3_hash="shared-hash",
|
||||
basic_dicom_tags={
|
||||
"SeriesInstanceUID": "uploaded-series-1",
|
||||
"StudyInstanceUID": "study-1",
|
||||
"StudyDescription": "Shared study",
|
||||
"SeriesDescription": "Uploaded series",
|
||||
"Modality": "CT",
|
||||
},
|
||||
)
|
||||
]
|
||||
)
|
||||
|
||||
response = client.get(reverse("atlas:user_uploads"))
|
||||
|
||||
assert response.status_code == 200
|
||||
content = response.content.decode("utf-8")
|
||||
assert 'class="btn btn-sm btn-warning import-partial-series-btn"' in content
|
||||
assert f'data-case-id="{primary_case.pk}"' in content
|
||||
+22
-2
@@ -3357,6 +3357,7 @@ def user_uploads(
|
||||
for series_uid, _, tags, _ in series_list
|
||||
}
|
||||
uploaded_uid_to_existing_series_ids: dict[str, set[int]] = defaultdict(set)
|
||||
uploaded_uid_to_case_ids: dict[str, set[int]] = defaultdict(set)
|
||||
existing_series_lookup: dict[int, Series] = {}
|
||||
case_to_study_uids = defaultdict(set)
|
||||
uploaded_hashes = {
|
||||
@@ -3394,6 +3395,7 @@ def user_uploads(
|
||||
continue
|
||||
case_lookup[case_obj.pk] = case_obj
|
||||
case_to_series_uids[case_obj.pk].add(existing.series_instance_uid)
|
||||
uploaded_uid_to_case_ids[existing.series_instance_uid].add(case_obj.pk)
|
||||
if existing.study_instance_uid:
|
||||
case_to_study_uids[case_obj.pk].add(existing.study_instance_uid)
|
||||
|
||||
@@ -3435,6 +3437,7 @@ def user_uploads(
|
||||
continue
|
||||
case_lookup[case_obj.pk] = case_obj
|
||||
case_to_series_uids[case_obj.pk].add(uploaded_uid)
|
||||
uploaded_uid_to_case_ids[uploaded_uid].add(case_obj.pk)
|
||||
study_uid = uploaded_series_uid_to_study_uid.get(uploaded_uid)
|
||||
if study_uid:
|
||||
case_to_study_uids[case_obj.pk].add(study_uid)
|
||||
@@ -3469,6 +3472,22 @@ def user_uploads(
|
||||
if series_id in existing_series_lookup
|
||||
]
|
||||
|
||||
matched_case_counts = defaultdict(int)
|
||||
for uploaded_uid in study_partial_imported_uids:
|
||||
for case_pk in uploaded_uid_to_case_ids.get(uploaded_uid, set()):
|
||||
matched_case_counts[case_pk] += 1
|
||||
|
||||
if matched_case_counts:
|
||||
preferred_case_id, _ = max(
|
||||
matched_case_counts.items(),
|
||||
key=lambda item: (
|
||||
item[1],
|
||||
len(case_to_series_uids.get(item[0], set()) & study_uploaded_uids),
|
||||
-item[0],
|
||||
),
|
||||
)
|
||||
study_data["preferred_case_id"] = preferred_case_id
|
||||
|
||||
related_case_ids = set(case_to_series_uids.keys()) | set(case_to_study_uids.keys())
|
||||
for case_pk in related_case_ids:
|
||||
imported_uids = case_to_series_uids.get(case_pk, set())
|
||||
@@ -3492,7 +3511,9 @@ def user_uploads(
|
||||
}
|
||||
)
|
||||
|
||||
if len(case_candidates_for_study) == 1:
|
||||
if study_data.get("preferred_case_id"):
|
||||
pass
|
||||
elif len(case_candidates_for_study) == 1:
|
||||
study_data["preferred_case_id"] = next(iter(case_candidates_for_study))
|
||||
elif study_data.get("import_suggestions"):
|
||||
sorted_suggestions = sorted(
|
||||
@@ -3576,7 +3597,6 @@ def uploads_import_htmx(request, case_id: int | None = None):
|
||||
imported = import_dicoms_helper(request, case_id=case_id, dicoms=dicoms)
|
||||
except Exception as exc:
|
||||
logger.exception("Error during uploads import")
|
||||
logging.getLogger(__name__).exception("Error during uploads import")
|
||||
return HttpResponse(
|
||||
f'<div class="alert alert-danger mb-0">Import failed: {escape(str(exc))}</div>',
|
||||
status=500,
|
||||
|
||||
Reference in New Issue
Block a user