From eb294593fd3ccf8f498d38ec709a3fe34b8e27d9 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Tue, 22 Feb 2022 12:28:03 -0700 Subject: [PATCH 1/5] adding how to select metadata for analysis via GUI --- qiita_db/analysis.py | 4 +- .../analysis_handlers/base_handlers.py | 4 +- .../analysis_handlers/listing_handlers.py | 16 ++- qiita_pet/templates/analysis_selected.html | 99 ++++++++++++++++++- qiita_ware/private_plugin.py | 4 +- 5 files changed, 120 insertions(+), 7 deletions(-) diff --git a/qiita_db/analysis.py b/qiita_db/analysis.py index 2d465b182..477b43684 100644 --- a/qiita_db/analysis.py +++ b/qiita_db/analysis.py @@ -111,7 +111,7 @@ def get_by_status(cls, status): @classmethod def create(cls, owner, name, description, from_default=False, - merge_duplicated_sample_ids=False): + merge_duplicated_sample_ids=False, categories=None): """Creates a new analysis on the database Parameters @@ -129,6 +129,8 @@ def create(cls, owner, name, description, from_default=False, If the duplicated sample ids in the selected studies should be merged or prepended with the artifact ids. False (default) prepends the artifact id + categories : set of str, optional + If not None, use _only_ these categories for the metaanalysis Returns ------- diff --git a/qiita_pet/handlers/analysis_handlers/base_handlers.py b/qiita_pet/handlers/analysis_handlers/base_handlers.py index 552d9d0de..8000d3884 100644 --- a/qiita_pet/handlers/analysis_handlers/base_handlers.py +++ b/qiita_pet/handlers/analysis_handlers/base_handlers.py @@ -26,11 +26,13 @@ def post(self): name = self.get_argument('name') desc = self.get_argument('description') mdsi = self.get_argument('merge_duplicated_sample_ids', False) + metadata = self.request.arguments.get('analysis-metadata', None) + if mdsi in (b'on', 'on'): mdsi = True analysis = Analysis.create( self.current_user, name, desc, merge_duplicated_sample_ids=mdsi, - from_default=True) + from_default=True, categories=metadata) self.redirect(u"%s/analysis/description/%s/" % (qiita_config.portal_dir, analysis.id)) diff --git a/qiita_pet/handlers/analysis_handlers/listing_handlers.py b/qiita_pet/handlers/analysis_handlers/listing_handlers.py index c92b3af0c..e2d509136 100644 --- a/qiita_pet/handlers/analysis_handlers/listing_handlers.py +++ b/qiita_pet/handlers/analysis_handlers/listing_handlers.py @@ -106,8 +106,8 @@ def get(self): # Format sel_data to get study IDs for the processed data sel_data = defaultdict(dict) proc_data_info = {} - sel_samps = self.current_user.default_analysis.samples - for aid, samples in sel_samps.items(): + analysis = self.current_user.default_analysis + for aid, samples in analysis.samples.items(): artifact = Artifact(aid) sel_data[artifact.study][aid] = samples proc_data_info[aid] = { @@ -116,5 +116,15 @@ def get(self): 'data_type': artifact.data_type } + # finding common metadata fields + metadata = analysis.metadata_categories + common = [] + for i, (_, m) in enumerate(metadata.items()): + if i == 0: + common = {'sample': set(m['sample']), 'prep': set(m['prep'])} + else: + common['sample'] = common['sample'] & set(m['sample']) + common['prep'] = common['prep'] & set(m['prep']) + self.render("analysis_selected.html", sel_data=sel_data, - proc_info=proc_data_info) + proc_info=proc_data_info, metadata=metadata, common=common) diff --git a/qiita_pet/templates/analysis_selected.html b/qiita_pet/templates/analysis_selected.html index d6910a97b..0e3e790ef 100644 --- a/qiita_pet/templates/analysis_selected.html +++ b/qiita_pet/templates/analysis_selected.html @@ -62,10 +62,84 @@ qiita_websocket.add_callback('clear', clear_from_html); $('#clear-button').on('click', clear); {% if sel_data %}$('#no-selected').hide(){% end %} + + var common_sample_fields = {% raw list(common['sample']) %}; + var common_prep_fields = {% raw list(common['prep']) %}; + + $.each($(".chosen-select"), function (_, element){ + var is_sample = element.id.startsWith('sample-metadata'); + $.each(element.options, function (_, option){ + if (is_sample) { + if (jQuery.inArray(option.text, common_sample_fields) >= 0) { + option.selected=true; + $('#analysis-metadata').append( + $('