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}
|
||||
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
@@ -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 %}
|
||||
<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>
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user