improve uploading of dicoms

This commit is contained in:
Ross
2023-10-30 11:27:42 +00:00
parent c9023917bd
commit fe536e25a7
5 changed files with 87 additions and 1 deletions
+25
View File
@@ -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)
+40
View File
@@ -0,0 +1,40 @@
{% extends "atlas/base.html" %}
{% block content %}
<h2>SeriesInstanceUID: {{series_id}}</h2>
<div id="single-dicom-viewer" class="dicom-viewer" data-images="[{% for dicom in dicoms %}&quot;{{dicom.image.url}}&quot;
{% if not forloop.last %},{% endif %}{% endfor %}]" data-annotations=''>
</div>
<details>
<summary>Series info</summary>
<details>
<summary>
Image details
</summary>
{% for dicom in dicoms %}
{% if dicom.image %}
[{{image.image.size|filesizeformat}}]
{% endif %}
{{image.image_md5_hash}} ({{image.is_dicom}})
<br />
{% endfor %}
</details>
</details>
<script>
</script>
{% endblock %}
+7 -1
View File
@@ -14,13 +14,19 @@
{% if series_list %}
<ul id="series-list">
{% for series, n, tags, date in series_list %}
<li _="
<li>
<span _="
on click toggle .selected on me
then set i to the first <input/> in me
then set i.checked to not i.checked" >
{{date}}: {{series}} [{{n}} images] <br/>
{{tags}}
<input class="hidden" type="checkbox" name="selection" value="{{ series }}">
</span>
<span class="series-block-popup-link">
<a href="#"
onclick="return window.create_popup_window('/atlas/uploads/series_id/{{series}}', 'Series')">Popup</a>
</span>
</li>
{% endfor %}
</ul>
+1
View File
@@ -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/<int:case_id>", views.user_uploads, name="user_uploads_case"),
path("uploads/series_id/<str:series_instance_uid>", views.user_uploads_series, name="user_uploads_series"),
path(
"collection/create",
views.CaseCollectionCreate.as_view(),
+14
View File
@@ -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):