From fe536e25a73ab630ffad7357eb520f7836ea601a Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 30 Oct 2023 11:27:42 +0000 Subject: [PATCH] improve uploading of dicoms --- atlas/api.py | 25 ++++++++++++ atlas/templates/atlas/user_upload_viewer.html | 40 +++++++++++++++++++ atlas/templates/atlas/user_uploads.html | 8 +++- atlas/urls.py | 1 + atlas/views.py | 14 +++++++ 5 files changed, 87 insertions(+), 1 deletion(-) create mode 100755 atlas/templates/atlas/user_upload_viewer.html diff --git a/atlas/api.py b/atlas/api.py index 2366255b..bd08276e 100644 --- a/atlas/api.py +++ b/atlas/api.py @@ -201,6 +201,31 @@ def check_image_hash(request, hash: str): data = {"status": "success", "id": False} return data +@router.post("/check_image_hashes/", auth=django_auth) +def check_images_hashes(request, hashes: List[str]): + """Checks a list of image hashes and returns the series id / url if found + + Return format + { "hash_id": {"id": "series_id|false", "url": "series_url|false"}, ...} + """ + + hash_status = {} + + for hash in hashes: + try: + print(hash) + series_image = SeriesImage.objects.get(image_md5_hash=hash) + data = { + "id": series_image.pk, + "url": series_image.series.get_absolute_url(), + } + except SeriesImage.DoesNotExist: + data = { "id": False, "url": False} + + hash_status[hash] = data + + return hash_status + @router.get("/generate_image_hash/{id}", auth=django_auth) def generate_image_hash(request, id: int): series_image = SeriesImage.objects.get(pk=id) diff --git a/atlas/templates/atlas/user_upload_viewer.html b/atlas/templates/atlas/user_upload_viewer.html new file mode 100755 index 00000000..c41ec564 --- /dev/null +++ b/atlas/templates/atlas/user_upload_viewer.html @@ -0,0 +1,40 @@ + +{% extends "atlas/base.html" %} + +{% block content %} +

SeriesInstanceUID: {{series_id}}

+ + + +
+
+ + + + +
+ Series info +
+ + Image details + + {% for dicom in dicoms %} + {% if dicom.image %} + [{{image.image.size|filesizeformat}}] + {% endif %} + + {{image.image_md5_hash}} ({{image.is_dicom}}) + +
+ + {% endfor %} +
+ +
+ + + + +{% endblock %} \ No newline at end of file diff --git a/atlas/templates/atlas/user_uploads.html b/atlas/templates/atlas/user_uploads.html index 63efec2b..f9d5c284 100644 --- a/atlas/templates/atlas/user_uploads.html +++ b/atlas/templates/atlas/user_uploads.html @@ -14,13 +14,19 @@ {% if series_list %} diff --git a/atlas/urls.py b/atlas/urls.py index fe24a0d2..ad029cf4 100755 --- a/atlas/urls.py +++ b/atlas/urls.py @@ -36,6 +36,7 @@ urlpatterns = [ path("collection/user", views.user_collections, name="user_collections"), path("uploads", views.user_uploads, name="user_uploads"), path("uploads/case/", views.user_uploads, name="user_uploads_case"), + path("uploads/series_id/", views.user_uploads_series, name="user_uploads_series"), path( "collection/create", views.CaseCollectionCreate.as_view(), diff --git a/atlas/views.py b/atlas/views.py index 538bb64e..7c85b51d 100755 --- a/atlas/views.py +++ b/atlas/views.py @@ -301,6 +301,20 @@ def user_collections(request): return render(request, "atlas/user_collections.html", {"collections": collections}) +@login_required +def user_uploads_series(request, series_instance_uid: str): + + # We don't restrict to teh uploading user here. Should we? + dicoms = UncategorisedDicom.objects.filter(series_instance_uid=series_instance_uid) + + if not dicoms: + raise Http404("Series not found") + + return render( + request, "atlas/user_upload_viewer.html", {"dicoms": dicoms, "series_id": series_instance_uid} + ) + + @login_required def user_uploads(request, case_id: int | None = None):