5151from solr_helpers import build_solr_query , query_solr_and_format_result
5252
5353from idc .settings import MAX_FILE_LIST_REQUEST
54+ from idc_collections .collex_metadata_utils import convert_disk_size
5455
5556debug = settings .DEBUG
5657logger = logging .getLogger (__name__ )
@@ -247,86 +248,6 @@ def save_ui_hist(request):
247248 return JsonResponse ({}, status = status )
248249
249250
250- # returns various metadata mappings for selected projects used in calculating cart selection
251- # counts 'on the fly' client side
252- def studymp (request ):
253- response = {}
254- status = 200
255- sources = ImagingDataCommonsVersion .objects .get (active = True ).get_data_sources (
256- active = True , source_type = DataSource .SOLR ,
257- aggregate_level = "StudyInstanceUID"
258- )
259- data_types = [DataSetType .IMAGE_DATA , DataSetType .ANCILLARY_DATA , DataSetType .DERIVED_DATA ]
260- data_sets = DataSetType .objects .filter (data_type__in = data_types )
261- aggregate_level = 'StudyInstanceUID'
262- versions = []
263- versions = ImagingDataCommonsVersion .objects .filter (
264- version_number__in = versions
265- ).get_data_versions (active = True ) if len (versions ) else ImagingDataCommonsVersion .objects .filter (
266- active = True
267- ).get_data_versions (active = True )
268- aux_sources = data_sets .get_data_sources ().filter (
269- source_type = DataSource .SOLR ,
270- aggregate_level__in = ["case_barcode" , "sample_barcode" , aggregate_level ],
271- id__in = versions .get_data_sources ().filter (source_type = DataSource .SOLR ).values_list ("id" , flat = True )
272- ).distinct ()
273-
274- try :
275- req = request .GET if request .method == 'GET' else request .POST
276- filters = json .loads (req .get ('filters' , '{}' ))
277-
278- mxSeries = int (req .get ('mxseries' ))
279- mxStudies = int (req .get ('mxstudies' ))
280- limit = int (req .get ('limit' , mxStudies ))
281- offset = int (req .get ('offset' ,0 ))
282-
283- casestudymp = dict ()
284- studymp = dict ()
285- projstudymp = dict ()
286-
287- idsEx = get_collex_metadata (
288- filters , ['collection_id' , 'PatientID' ,'StudyInstanceUID' , 'SeriesInstanceUID' ], record_limit = limit ,
289- sources = sources , offset = offset , records_only = True , custom_facets = {}, aux_sources = aux_sources ,
290- collapse_on = 'StudyInstanceUID' , counts_only = False , filtered_needed = False ,
291- raw_format = True , default_facets = False , sort = None
292- )
293-
294- logger .debug ("[STATUS] records pulled: {}" .format (len (idsEx ['docs' ])))
295-
296- for doc in idsEx ['docs' ]:
297- proj = doc ['collection_id' ][0 ]
298- patientid = doc ['PatientID' ]
299- studyid = doc ['StudyInstanceUID' ]
300- cnt = len (doc ['SeriesInstanceUID' ])
301-
302- if not patientid in casestudymp :
303- casestudymp [patientid ]= {}
304- if not proj in projstudymp :
305- projstudymp [proj ] = {}
306- studymp [studyid ]= {}
307- studymp [studyid ]['cnt' ] = cnt
308- studymp [studyid ]['proj' ] = proj
309- studymp [studyid ]['PatientID' ] = patientid
310- studymp [studyid ]['val' ] = []
311- projstudymp [proj ][studyid ] = cnt
312- casestudymp [patientid ][studyid ] = cnt
313-
314- response ["studymp" ] = studymp
315- response ['casestudymp' ] = casestudymp
316- response ['projstudymp' ] = projstudymp
317-
318- except Exception as e :
319- logger .error ("[ERROR] While attempting to get studymp:" )
320- logger .exception (e )
321- messages .error (
322- request ,
323- "Encountered an error when attempting to get the studymp - please contact the administrator."
324- )
325- status = 400
326-
327- return JsonResponse (response , status = status )
328-
329-
330251def populate_tables (request ):
331252 response = {}
332253 status = 200
@@ -648,6 +569,7 @@ def cart_data(request):
648569 aggregate_level = req .get ('aggregate_level' , 'StudyInstanceUID' )
649570 results_level = req .get ('results_level' , 'StudyInstanceUID' )
650571 dois_only = bool (req .get ('dois_only' , 'false' ).lower () == 'true' )
572+ size_only = bool (req .get ('size_only' , 'false' ).lower () == 'true' )
651573
652574 partitions = json .loads (req .get ('partitions' , '{}' ))
653575
@@ -656,22 +578,29 @@ def cart_data(request):
656578 length = int (req .get ('length' , 100 ))
657579 mxseries = int (req .get ('mxseries' ,1000 ))
658580
581+ doi_or_size_only = (dois_only or size_only )
582+
659583 if len (partitions ) <= 0 or aggregate_level not in ['SeriesInstanceUID' , 'StudyInstanceUID' ]:
660584 response ['numFound' ] = 0
661585 response ['docs' ] = []
662586 else :
663587 if aggregate_level == 'StudyInstanceUID' :
664588 response = get_cart_data_studylvl (
665- filtergrp_list , partitions , limit , offset , length , mxseries , with_records = (not dois_only ),
666- results_lvl = results_level , dois_only = dois_only
589+ filtergrp_list , partitions , limit , offset , length , mxseries , with_records = (not doi_or_size_only ),
590+ results_lvl = results_level , dois_only = dois_only , size_only = size_only
667591 )
668592 elif aggregate_level == 'SeriesInstanceUID' :
669593 response = get_cart_data_serieslvl (
670- filtergrp_list , partitions , field_list if not dois_only else None , limit , offset ,
671- with_records = (not dois_only ), dois_only = dois_only
594+ filtergrp_list , partitions , field_list if ( not doi_or_size_only ) else None , limit , offset ,
595+ with_records = (not doi_or_size_only ), dois_only = dois_only , size_only = size_only
672596 )
673597 if dois_only :
674598 response = {'dois' : response ['dois' ]}
599+ if size_only :
600+ response = {
601+ "total_size" : response ['total_size' ],
602+ "display_size" : convert_disk_size (response ['total_size' ])
603+ }
675604 except Exception as e :
676605 logger .error ("[ERROR] While loading cart:" )
677606 logger .exception (e )
@@ -704,7 +633,7 @@ def get_series(request, collection_id=None, patient_id=None, study_uid=None):
704633 filter_query = build_solr_query (
705634 { w : v for x in filtergrp_list for w , v in list (x .items ())},
706635 with_tags_for_ex = False ,
707- search_child_records_by = None , solr_default_op = 'AND'
636+ search_child_records_by = { w : "StudyInstanceUID" for x in filtergrp_list for w in x } , solr_default_op = 'AND'
708637 )
709638 result = query_solr_and_format_result (
710639 {
0 commit comments