def get(self, message="", msg_level=None): all_emails_except_current = yield Task(self._get_all_emails) all_emails_except_current.remove(self.current_user.id) avail_meta = SampleTemplate.metadata_headers() +\ get_table_cols("study") self.render('list_studies.html', availmeta=avail_meta, all_emails_except_current=all_emails_except_current, message=message, msg_level=msg_level)
def get(self): userobj = self.current_user analysis = Analysis(int(self.get_argument("aid"))) # make sure user has access to the analysis check_analysis_access(userobj, analysis) # get the dictionaries of selected samples and data types selproc_data, selsamples = self._selected_parser(analysis) self.render('search_studies.html', aid=analysis.id, selsamples=selsamples, selproc_data=selproc_data, counts={}, fullcounts={}, searchmsg="", query="", results={}, availmeta=SampleTemplate.metadata_headers() + get_table_cols("study"))
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 = 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.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', 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 get(self): userobj = self.current_user analysis = Analysis(int(self.get_argument("aid"))) # make sure user has access to the analysis check_analysis_access(userobj, analysis) # get the dictionaries of selected samples and data types selproc_data, selsamples = self._selected_parser(analysis) self.render('search_studies.html', aid=analysis.id, selsamples=selsamples, selproc_data=selproc_data, counts={}, fullcounts={}, searchmsg="", query="", results={}, availmeta=SampleTemplate.metadata_headers() + get_table_cols("study"))
def post(self): user = self.current_user action = self.get_argument("action") # set required template variables results = {} meta_headers = [] counts = {} fullcounts = {} query = "" searchmsg = "" selsamples = {} selproc_data = {} # get analysis and selected samples if exists, or create if necessary if action == "create": name = self.get_argument('name') description = self.get_argument('description') analysis = Analysis.create(user, name, description) analysis_id = analysis.id # set to second step since this page is second step in workflow analysis.step = SELECT_SAMPLES # fill example studies by running query for specific studies search = QiitaStudySearch() def_query = 'study_id = 1 OR study_id = 2 OR study_id = 3' results, meta_headers = search(def_query, user) results, counts, fullcounts = self._parse_search_results( results, selsamples, meta_headers) else: analysis_id = int(self.get_argument("analysis-id")) analysis = Analysis(analysis_id) check_analysis_access(user, analysis) selproc_data, selsamples = self._selected_parser(analysis) # run through action requested if action == "search": search = QiitaStudySearch() query = str(self.get_argument("query")) try: results, meta_headers = search(query, user) except ParseException: searchmsg = "Malformed search query, please read search help." except QiitaDBIncompatibleDatatypeError as e: searchmsg = ''.join(e) if not results and not searchmsg: searchmsg = "No results found." else: results, counts, fullcounts = self._parse_search_results( results, selsamples, meta_headers) elif action == "select": analysis.add_samples(self._parse_form_select()) # rebuild the selected from database to reflect changes selproc_data, selsamples = self._selected_parser(analysis) elif action == "deselect": proc_data, samples = self._parse_form_deselect() if proc_data: analysis.remove_samples(proc_data=proc_data) if samples: analysis.remove_samples(samples=samples) if not proc_data and not samples: searchmsg = "Must select samples to remove from analysis!" # rebuild the selected from database to reflect changes selproc_data, selsamples = self._selected_parser(analysis) self.render('search_studies.html', user=user, aid=analysis_id, results=results, meta_headers=meta_headers, selsamples=selsamples, selproc_data=selproc_data, counts=counts, fullcounts=fullcounts, searchmsg=searchmsg, query=query, availmeta=SampleTemplate.metadata_headers() + get_table_cols("study"))
def post(self): user = self.current_user action = self.get_argument("action") # set required template variables results = {} meta_headers = [] counts = {} fullcounts = {} query = "" searchmsg = "" selsamples = {} selproc_data = {} # get analysis and selected samples if exists, or create if necessary if action == "create": name = self.get_argument('name') description = self.get_argument('description') analysis = Analysis.create(User(user), name, description) analysis_id = analysis.id # set to second step since this page is second step in workflow analysis.step = SELECT_SAMPLES # fill example studies by running query for specific studies search = QiitaStudySearch() def_query = 'study_id = 1 OR study_id = 2 OR study_id = 3' results, meta_headers = search(def_query, user) results, counts, fullcounts = self._parse_search_results( results, selsamples, meta_headers) else: analysis_id = int(self.get_argument("analysis-id")) check_analysis_access(User(user), analysis_id) analysis = Analysis(analysis_id) selproc_data, selsamples = self._selected_parser(analysis) # run through action requested if action == "search": search = QiitaStudySearch() query = str(self.get_argument("query")) try: results, meta_headers = search(query, user) except ParseException: searchmsg = "Malformed search query, please read search help." except QiitaDBIncompatibleDatatypeError as e: searchmsg = ''.join(e) if not results and not searchmsg: searchmsg = "No results found." else: results, counts, fullcounts = self._parse_search_results( results, selsamples, meta_headers) elif action == "select": analysis.add_samples(self._parse_form_select()) # rebuild the selected from database to reflect changes selproc_data, selsamples = self._selected_parser(analysis) elif action == "deselect": proc_data, samples = self._parse_form_deselect() if proc_data: analysis.remove_samples(proc_data=proc_data) if samples: analysis.remove_samples(samples=samples) if not proc_data and not samples: searchmsg = "Must select samples to remove from analysis!" # rebuild the selected from database to reflect changes selproc_data, selsamples = self._selected_parser(analysis) self.render('search_studies.html', user=user, aid=analysis_id, results=results, meta_headers=meta_headers, selsamples=selsamples, selproc_data=selproc_data, counts=counts, fullcounts=fullcounts, searchmsg=searchmsg, query=query, availmeta=SampleTemplate.metadata_headers() + get_table_cols("study"))