def _summary_demultiplexed(artifact_type, filepaths): """Generates the HTML summary for Demultiplexed artifacts Parameters ---------- artifact_type : str The artifact type filepaths : [(str, str)] A list of string pairs where the first element is the filepath and the second is the filepath type Returns ------- list A list of strings with the html summary """ # loop over each of the fps/fps_type pairs to find the demux_fp demux_fp = None for (fps, fps_type) in filepaths: if fps_type == 'preprocessed_demux': demux_fp = fps break if demux_fp is None: return None # generating html summary artifact_information = [] sn, smax, smin, smean, sstd, smedian, shist, shist_edge = demux_stats( demux_fp) artifact_information.append("<h3>Features</h3>") artifact_information.append('<b>Total</b>: %d' % sn) artifact_information.append("<br/>") artifact_information.append('<b>Max</b>: %d' % smax) artifact_information.append("<br/>") artifact_information.append('<b>Mean</b>: %d' % smean) artifact_information.append("<br/>") artifact_information.append('<b>Standard deviation</b>: %d' % sstd) artifact_information.append("<br/>") artifact_information.append('<b>Median</b>: %d' % smedian) artifact_information.append("<br/>") # taken from http://stackoverflow.com/a/9141911 plt.bar(shist_edge[:-1], shist, width=1) plt.xlim(min(shist_edge), max(shist_edge)) plt.xlabel('Sequence Length') plt.ylabel('Number of sequences') plot = StringIO() plt.savefig(plot, format='png') plot.seek(0) uri = 'data:image/png;base64,' + quote(b64encode(plot.buf)) artifact_information.append('<img src = "%s"/>' % uri) return artifact_information
def display_template(self, preprocessed_data_id, msg, msg_level): """Simple function to avoid duplication of code""" preprocessed_data_id = int(preprocessed_data_id) try: preprocessed_data = Artifact(preprocessed_data_id) except QiitaDBUnknownIDError: raise HTTPError( 404, "Artifact %d does not exist!" % preprocessed_data_id) else: user = self.current_user if user.level != 'admin': raise HTTPError( 403, "No permissions of admin, " "get/VAMPSSubmitHandler: %s!" % user.id) prep_template = PrepTemplate(preprocessed_data.prep_template) sample_template = SampleTemplate(preprocessed_data.study) study = Study(preprocessed_data.study) stats = [('Number of samples', len(prep_template)), ('Number of metadata headers', len(sample_template.categories()))] demux = [ path for _, path, ftype in preprocessed_data.get_filepaths() if ftype == 'preprocessed_demux' ] demux_length = len(demux) if not demux_length: msg = ("Study does not appear to have demultiplexed " "sequences associated") msg_level = 'danger' elif demux_length > 1: msg = ("Study appears to have multiple demultiplexed files!") msg_level = 'danger' elif demux_length == 1: demux_file = demux[0] demux_file_stats = demux_stats(demux_file) stats.append(('Number of sequences', demux_file_stats.n)) msg_level = 'success' self.render('vamps_submission.html', study_title=study.title, stats=stats, message=msg, study_id=study.id, level=msg_level, preprocessed_data_id=preprocessed_data_id)
def display_template(self, preprocessed_data_id, msg, msg_level): """Simple function to avoid duplication of code""" preprocessed_data_id = int(preprocessed_data_id) try: preprocessed_data = PreprocessedData(preprocessed_data_id) except QiitaDBUnknownIDError: raise HTTPError(404, "PreprocessedData %d does not exist!" % preprocessed_data_id) else: user = self.current_user if user.level != "admin": raise HTTPError(403, "No permissions of admin, " "get/VAMPSSubmitHandler: %s!" % user.id) prep_template = PrepTemplate(preprocessed_data.prep_template) sample_template = SampleTemplate(preprocessed_data.study) study = Study(preprocessed_data.study) stats = [ ("Number of samples", len(prep_template)), ("Number of metadata headers", len(sample_template.categories())), ] demux = [path for _, path, ftype in preprocessed_data.get_filepaths() if ftype == "preprocessed_demux"] demux_length = len(demux) if not demux_length: msg = "Study does not appear to have demultiplexed " "sequences associated" msg_level = "danger" elif demux_length > 1: msg = "Study appears to have multiple demultiplexed files!" msg_level = "danger" elif demux_length == 1: demux_file = demux[0] demux_file_stats = demux_stats(demux_file) stats.append(("Number of sequences", demux_file_stats.n)) msg_level = "success" self.render( "vamps_submission.html", study_title=study.title, stats=stats, message=msg, study_id=study.id, level=msg_level, preprocessed_data_id=preprocessed_data_id, )
def display_template(self, preprocessed_data_id, msg, msg_level): """Simple function to avoid duplication of code""" preprocessed_data_id = int(preprocessed_data_id) try: preprocessed_data = PreprocessedData(preprocessed_data_id) except QiitaDBUnknownIDError: raise HTTPError(404, "PreprocessedData %d does not exist!" % preprocessed_data_id) else: user = User(self.current_user) if user.level != 'admin': raise HTTPError(403, "No permissions of admin, " "get/EBISubmitHandler: %s!" % user.id) prep_template = PrepTemplate(preprocessed_data.prep_template) sample_template = SampleTemplate(preprocessed_data.study) study = Study(preprocessed_data.study) stats = [('Number of samples', len(prep_template)), ('Number of metadata headers', len(sample_template.metadata_headers()))] demux = [path for _, path, ftype in preprocessed_data.get_filepaths() if ftype == 'preprocessed_demux'] demux_length = len(demux) if not demux_length: msg = ("Study does not appear to have demultiplexed " "sequences associated") msg_level = 'danger' elif demux_length > 1: msg = ("Study appears to have multiple demultiplexed files!") msg_level = 'danger' elif demux_length == 1: demux_file = demux[0] demux_file_stats = demux_stats(demux_file) stats.append(('Number of sequences', demux_file_stats.n)) msg_level = 'success' self.render('ebi_submission.html', user=self.current_user, study_title=study.title, stats=stats, message=msg, study_id=study.id, level=msg_level, preprocessed_data_id=preprocessed_data_id, investigation_type=prep_template.investigation_type)
def display_template(self, preprocessed_data_id, msg, msg_level): """Simple function to avoid duplication of code""" preprocessed_data_id = int(preprocessed_data_id) try: preprocessed_data = Artifact(preprocessed_data_id) except QiitaDBUnknownIDError: raise HTTPError(404, "Artifact %d does not exist!" % preprocessed_data_id) else: user = self.current_user if user.level != 'admin': raise HTTPError(403, "No permissions of admin, " "get/EBISubmitHandler: %s!" % user.id) prep_templates = preprocessed_data.prep_templates allow_submission = len(prep_templates) == 1 msg_list = ["Submission to EBI disabled:"] if not allow_submission: msg_list.append( "Only artifacts with a single prep template can be submitted") # If allow_submission is already false, we technically don't need to # do the following work. However, there is no clean way to fix this # using the current structure, so we perform the work as we # did not fail. # We currently support only one prep template for submission, so # grabbing the first one prep_template = prep_templates[0] study = preprocessed_data.study sample_template = study.sample_template stats = [('Number of samples', len(prep_template)), ('Number of metadata headers', len(sample_template.categories()))] demux = [path for _, path, ftype in preprocessed_data.filepaths if ftype == 'preprocessed_demux'] demux_length = len(demux) if not demux_length: msg = ("Study does not appear to have demultiplexed " "sequences associated") msg_level = 'danger' elif demux_length > 1: msg = ("Study appears to have multiple demultiplexed files!") msg_level = 'danger' elif demux_length == 1: demux_file = demux[0] demux_file_stats = demux_stats(demux_file) stats.append(('Number of sequences', demux_file_stats.n)) msg_level = 'success' # Check if the templates have all the required columns for EBI pt_missing_cols = prep_template.check_restrictions( [PREP_TEMPLATE_COLUMNS['EBI']]) st_missing_cols = sample_template.check_restrictions( [SAMPLE_TEMPLATE_COLUMNS['EBI']]) allow_submission = (len(pt_missing_cols) == 0 and len(st_missing_cols) == 0 and allow_submission) if not allow_submission: if len(pt_missing_cols) > 0: msg_list.append("Columns missing in prep template: %s" % ', '.join(pt_missing_cols)) if len(st_missing_cols) > 0: msg_list.append("Columns missing in sample template: %s" % ', '.join(st_missing_cols)) ebi_disabled_msg = "<br/>".join(msg_list) else: ebi_disabled_msg = None self.render('ebi_submission.html', study_title=study.title, stats=stats, message=msg, study_id=study.id, level=msg_level, preprocessed_data_id=preprocessed_data_id, investigation_type=prep_template.investigation_type, allow_submission=allow_submission, ebi_disabled_msg=ebi_disabled_msg)
def display_template(self, preprocessed_data_id, msg, msg_level): """Simple function to avoid duplication of code""" preprocessed_data_id = int(preprocessed_data_id) try: preprocessed_data = PreprocessedData(preprocessed_data_id) except QiitaDBUnknownIDError: raise HTTPError(404, "PreprocessedData %d does not exist!" % preprocessed_data_id) else: user = self.current_user if user.level != 'admin': raise HTTPError(403, "No permissions of admin, " "get/EBISubmitHandler: %s!" % user.id) prep_template = PrepTemplate(preprocessed_data.prep_template) sample_template = SampleTemplate(preprocessed_data.study) study = Study(preprocessed_data.study) stats = [('Number of samples', len(prep_template)), ('Number of metadata headers', len(sample_template.categories()))] demux = [path for _, path, ftype in preprocessed_data.get_filepaths() if ftype == 'preprocessed_demux'] demux_length = len(demux) if not demux_length: msg = ("Study does not appear to have demultiplexed " "sequences associated") msg_level = 'danger' elif demux_length > 1: msg = ("Study appears to have multiple demultiplexed files!") msg_level = 'danger' elif demux_length == 1: demux_file = demux[0] demux_file_stats = demux_stats(demux_file) stats.append(('Number of sequences', demux_file_stats.n)) msg_level = 'success' # Check if the templates have all the required columns for EBI pt_missing_cols = prep_template.check_restrictions( [PREP_TEMPLATE_COLUMNS['EBI']]) st_missing_cols = sample_template.check_restrictions( [SAMPLE_TEMPLATE_COLUMNS['EBI']]) allow_submission = (len(pt_missing_cols) == 0 and len(st_missing_cols) == 0) if not allow_submission: msg_list = ["Submission to EBI disabled due to missing columns:"] if len(pt_missing_cols) > 0: msg_list.append("Columns missing in prep template: %s" % ', '.join(pt_missing_cols)) if len(st_missing_cols) > 0: msg_list.append("Columns missing in sample template: %s" % ', '.join(st_missing_cols)) ebi_disabled_msg = "<br/>".join(msg_list) else: ebi_disabled_msg = None self.render('ebi_submission.html', study_title=study.title, stats=stats, message=msg, study_id=study.id, level=msg_level, preprocessed_data_id=preprocessed_data_id, investigation_type=prep_template.investigation_type, allow_submission=allow_submission, ebi_disabled_msg=ebi_disabled_msg)