Skip to content

Commit 68add84

Browse files
authored
Merge pull request #1501 from ImagingDataCommons/release-49-sp
Cart and cohort downloads
2 parents 1af77b6 + 1b20f4d commit 68add84

2 files changed

Lines changed: 69 additions & 9 deletions

File tree

idc/views.py

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,29 @@ def get_series(request, collection_id=None, patient_id=None, study_uid=None):
694694
filtergrp_list = body.get("filtergrp_list", {})
695695
if not(len(partitions) or len(filtergrp_list)):
696696
raise Exception("You can only request series IDs based on a filter, collection ID, Patient ID, or study ID!")
697-
result = cart_manifest(filtergrp_list, partitions, 0, fields, MAX_FILE_LIST_REQUEST)
697+
if len(partitions):
698+
result = cart_manifest(filtergrp_list, partitions, 0, fields, MAX_FILE_LIST_REQUEST)
699+
else:
700+
source = ImagingDataCommonsVersion.objects.get(active=True).get_data_sources(
701+
active=True, source_type=DataSource.SOLR,
702+
aggregate_level="SeriesInstanceUID"
703+
).first()
704+
filter_query = build_solr_query(
705+
{ w: v for x in filtergrp_list for w, v in list(x.items())},
706+
with_tags_for_ex=False,
707+
search_child_records_by=None, solr_default_op='AND'
708+
)
709+
result = query_solr_and_format_result(
710+
{
711+
"collection": source.name,
712+
"fields": fields,
713+
"query_string": None,
714+
"fqs": [filter_query['full_query_str']],
715+
"facets": {'instance_size': 'sum(instance_size)'}, "sort": None, "counts_only": False, "limit": MAX_FILE_LIST_REQUEST,
716+
"totals": ['SeriesInstanceUID', 'collection_id', 'PatientID', 'StudyInstanceUID']
717+
},
718+
normalize_facets=False
719+
)
698720
else:
699721
source = ImagingDataCommonsVersion.objects.get(active=True).get_data_sources(
700722
active=True, source_type=DataSource.SOLR,
@@ -718,7 +740,7 @@ def get_series(request, collection_id=None, patient_id=None, study_uid=None):
718740
"fields": fields,
719741
"query_string": None,
720742
"fqs": [filter_query['full_query_str']],
721-
"facets": None, "sort": None, "counts_only": False, "limit": 2000
743+
"facets": None, "sort": None, "counts_only": False, "limit": MAX_FILE_LIST_REQUEST
722744
}
723745
)
724746

@@ -733,6 +755,14 @@ def get_series(request, collection_id=None, patient_id=None, study_uid=None):
733755
"patient_id": doc["PatientID"],
734756
"collection_id": doc['collection_id'][0]
735757
})
758+
if 'facets' in result:
759+
response['download_stats'] = {
760+
'series_count': result['facets']['total_SeriesInstanceUID'],
761+
'study_count': result['facets']['total_StudyInstanceUID'],
762+
'collection_count': result['facets']['total_collection_id'],
763+
'case_count': result['facets']['total_PatientID'],
764+
'queue_byte_size': result['facets']['instance_size'],
765+
}
736766

737767
except Exception as e:
738768
logger.error("[ERROR] While fetching series per study ID:")

static/js/downloader.js

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ require([
5656
}
5757
let byte_count = 0;
5858
let converted_size = size;
59-
while(converted_size > 1024) {
59+
while(converted_size > 1000) {
6060
byte_count += 1;
61-
converted_size /= 1024;
61+
converted_size /= 1000;
6262
}
6363
let bytes = (Math.round(converted_size*1000)/1000).toFixed(3);
6464
return `${bytes} ${byte_level[byte_count]}` ;
@@ -219,10 +219,14 @@ require([
219219
queue_byte_size = 0;
220220
bytes_downloaded = 0;
221221
series_count = 0;
222+
study_count = 0;
223+
case_count = 0;
224+
collection_count = 0;
222225
start_time = -1;
223226
collections = new Set([]);
224227
cases = new Set([]);
225228
studies = new Set([]);
229+
preset_totals = false;
226230

227231
cancellation_underway = false;
228232

@@ -257,12 +261,24 @@ require([
257261
this.bytes_downloaded = 0;
258262
this.series_count = 0;
259263
this.collections = new Set([]);
264+
this.collection_count = 0;
260265
this.cases = new Set([]);
266+
this.case_count = 0;
261267
this.studies = new Set([]);
268+
this.study_count = 0;
262269
this.cancellation_underway = false;
263270
this.start_time = -1;
264271
}
265272

273+
set_download_totals(queue_byte_size, collection_count, case_count, study_count, series_count) {
274+
this.queue_byte_size = queue_byte_size;
275+
this.collection_count = collection_count;
276+
this.case_count = case_count;
277+
this.study_count = study_count;
278+
this.series_count = series_count;
279+
this.preset_totals = true;
280+
}
281+
266282
get active_requests() {
267283
return (this.working_queue.length > 0);
268284
}
@@ -294,11 +310,16 @@ require([
294310
let request_success = false;
295311
if(this.hopper.length < this.HOPPER_LIMIT && !this.cancellation_underway) {
296312
this.hopper.push(new DownloadRequest(request));
297-
this.queue_byte_size += parseFloat(request['series_size']);
298-
this.series_count += 1;
299313
this.studies.add(request['study_id']);
300314
this.collections.add(request['collection_id']);
301315
this.cases.add(request['patient_id']);
316+
if(!this.preset_totals) {
317+
this.queue_byte_size += parseFloat(request['series_size']);
318+
this.series_count += 1;
319+
this.collection_count = this.collections.size;
320+
this.study_count = this.studies.size;
321+
this.case_count = this.cases.size;
322+
}
302323
request_success = true;
303324
}
304325
return request_success;
@@ -494,9 +515,9 @@ require([
494515

495516
get all_requested() {
496517
return `${this.queues.total_downloads_requested} requested in ` +
497-
`${this.queues.collections.size} collection(s) / ` +
498-
`${this.queues.cases.size} case(s) / ` +
499-
`${this.queues.studies.size} ${this.queues.studies.size <= 1 ? "study" : "studies"} / ` +
518+
`${this.queues.collection_count} collection(s) / ` +
519+
`${this.queues.case_count} case(s) / ` +
520+
`${this.queues.study_count} ${this.queues.study_count <= 1 ? "study" : "studies"} / ` +
500521
`${this.queues.series_count} series`;
501522
}
502523

@@ -655,6 +676,12 @@ require([
655676
});
656677
}
657678

679+
set_download_stats(stats) {
680+
this.queues.set_download_totals(
681+
stats.queue_byte_size, stats.collection_count, stats.case_count, stats.study_count, stats.series_count
682+
);
683+
}
684+
658685
beginDownloads() {
659686
if(!this.queues.isEmpty()) {
660687
if(this.in_progress <= 0) {
@@ -793,6 +820,9 @@ require([
793820
}
794821
const series_data = await response.json();
795822
series.push(...series_data['result']);
823+
if('download_stats' in series_data){
824+
downloader_manager.set_download_stats(series_data['download_stats']);
825+
}
796826
}
797827
} else {
798828
series.push({

0 commit comments

Comments
 (0)