improve uploading of dicoms
This commit is contained in:
@@ -201,6 +201,31 @@ def check_image_hash(request, hash: str):
|
|||||||
data = {"status": "success", "id": False}
|
data = {"status": "success", "id": False}
|
||||||
return data
|
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)
|
@router.get("/generate_image_hash/{id}", auth=django_auth)
|
||||||
def generate_image_hash(request, id: int):
|
def generate_image_hash(request, id: int):
|
||||||
series_image = SeriesImage.objects.get(pk=id)
|
series_image = SeriesImage.objects.get(pk=id)
|
||||||
|
|||||||
+40
@@ -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 %}"{{dicom.image.url}}"
|
||||||
|
{% 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 %}
|
||||||
@@ -14,13 +14,19 @@
|
|||||||
{% if series_list %}
|
{% if series_list %}
|
||||||
<ul id="series-list">
|
<ul id="series-list">
|
||||||
{% for series, n, tags, date in series_list %}
|
{% for series, n, tags, date in series_list %}
|
||||||
<li _="
|
<li>
|
||||||
|
<span _="
|
||||||
on click toggle .selected on me
|
on click toggle .selected on me
|
||||||
then set i to the first <input/> in me
|
then set i to the first <input/> in me
|
||||||
then set i.checked to not i.checked" >
|
then set i.checked to not i.checked" >
|
||||||
{{date}}: {{series}} [{{n}} images] <br/>
|
{{date}}: {{series}} [{{n}} images] <br/>
|
||||||
{{tags}}
|
{{tags}}
|
||||||
<input class="hidden" type="checkbox" name="selection" value="{{ series }}">
|
<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>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ urlpatterns = [
|
|||||||
path("collection/user", views.user_collections, name="user_collections"),
|
path("collection/user", views.user_collections, name="user_collections"),
|
||||||
path("uploads", views.user_uploads, name="user_uploads"),
|
path("uploads", views.user_uploads, name="user_uploads"),
|
||||||
path("uploads/case/<int:case_id>", views.user_uploads, name="user_uploads_case"),
|
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(
|
path(
|
||||||
"collection/create",
|
"collection/create",
|
||||||
views.CaseCollectionCreate.as_view(),
|
views.CaseCollectionCreate.as_view(),
|
||||||
|
|||||||
@@ -301,6 +301,20 @@ def user_collections(request):
|
|||||||
|
|
||||||
return render(request, "atlas/user_collections.html", {"collections": collections})
|
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
|
@login_required
|
||||||
def user_uploads(request, case_id: int | None = None):
|
def user_uploads(request, case_id: int | None = None):
|
||||||
|
|||||||
Reference in New Issue
Block a user