def post(self, study_id): study_id = int(study_id) user = User(self.current_user) try: study = Study(study_id) except QiitaDBUnknownIDError: # Study not in database so fail nicely raise HTTPError(404, "Study %d does not exist" % study_id) else: check_access(User(self.current_user), study, raise_error=True) # vars to add sample template msg = '' msg_level = '' tab_to_display = '' sample_template = self.get_argument('sample_template', None) # vars to add raw data filetype = self.get_argument('filetype', None) previous_raw_data = self.get_argument('previous_raw_data', None) # vars to add prep template add_prep_template = self.get_argument('add_prep_template', None) raw_data_id = self.get_argument('raw_data_id', None) data_type_id = self.get_argument('data_type_id', None) make_public = self.get_argument('make_public', False) make_sandbox = self.get_argument('make_sandbox', False) approve_study = self.get_argument('approve_study', False) request_approval = self.get_argument('request_approval', False) investigation_type = self.get_argument('investigation-type', None) user_defined_investigation_type = self.get_argument( 'user-defined-investigation-type', None) new_investigation_type = self.get_argument('new-investigation-type', None) # None Selected is the equivalent to the user not specifying the info # thus we should make the investigation_type None if investigation_type == "" or investigation_type == "None Selected": investigation_type = None # to update investigation type update_investigation_type = self.get_argument( 'update_investigation_type', None) edit_investigation_type = self.get_argument('edit-investigation-type', None) edit_user_defined_investigation_type = self.get_argument( 'edit-user-defined-investigation-type', None) edit_new_investigation_type = self.get_argument( 'edit-new-investigation-type', None) # None Selected is the equivalent to the user not specifying the info # thus we should make the investigation_type None if edit_investigation_type == "" or \ edit_investigation_type == "None Selected": edit_investigation_type = None msg_level = 'success' if sample_template: # processing sample templates _, base_fp = get_mountpoint("uploads")[0] fp_rsp = join(base_fp, str(study_id), sample_template) if not exists(fp_rsp): raise HTTPError(400, "This file doesn't exist: %s" % fp_rsp) try: # deleting previous uploads and inserting new one yield Task(self.remove_add_study_template, study.raw_data, study_id, fp_rsp) except (TypeError, QiitaDBColumnError, QiitaDBExecutionError, QiitaDBDuplicateError, IOError, ValueError, KeyError, CParserError, QiitaDBDuplicateHeaderError) as e: msg = html_error_message % ('parsing the sample template:', basename(fp_rsp), str(e)) self.display_template(study, msg, "danger") return msg = ("The sample template '%s' has been added" % sample_template) tab_to_display = "" elif request_approval: study.status = 'awaiting_approval' msg = "Study sent to admin for approval" tab_to_display = "" elif make_public: msg = '' study.status = 'public' msg = "Study set to public" tab_to_display = "" elif make_sandbox: msg = '' study.status = 'sandbox' msg = "Study reverted to sandbox" tab_to_display = "" elif approve_study: # make sure user is admin, then make full private study if user.level == 'admin' or not \ qiita_config.require_approval: study.status = 'private' msg = "Study approved" tab_to_display = "" elif filetype or previous_raw_data: # adding blank raw data if filetype and previous_raw_data: msg = ("You can not specify both a new raw data and a " "previouly used one") elif filetype: try: RawData.create(filetype, [study]) except (TypeError, QiitaDBColumnError, QiitaDBExecutionError, QiitaDBDuplicateError, IOError, ValueError, KeyError, CParserError) as e: msg = html_error_message % ("creating a new raw data " "object for study:", str(study.id), str(e)) self.display_template(study, msg, "danger") return msg = "" else: raw_data = [RawData(rd) for rd in previous_raw_data] study.add_raw_data(raw_data) msg = "" tab_to_display = "" elif add_prep_template and raw_data_id and data_type_id: # adding prep templates if investigation_type == 'Other' and \ user_defined_investigation_type == 'New Type': investigation_type = new_investigation_type # this is a new user defined investigation type so store it ontology = Ontology(convert_to_id('ENA', 'ontology')) ontology.add_user_defined_term(investigation_type) elif investigation_type == 'Other' and \ user_defined_investigation_type != 'New Type': investigation_type = user_defined_investigation_type raw_data_id = int(raw_data_id) _, base_path = get_mountpoint("uploads")[0] fp_rpt = join(base_path, str(study_id), add_prep_template) if not exists(fp_rpt): raise HTTPError(400, "This file doesn't exist: %s" % fp_rpt) try: # inserting prep templates yield Task(self.remove_add_prep_template, fp_rpt, raw_data_id, study, data_type_id, investigation_type) except (TypeError, QiitaDBColumnError, QiitaDBExecutionError, QiitaDBDuplicateError, IOError, ValueError, CParserError) as e: msg = html_error_message % ("parsing the prep template: ", basename(fp_rpt), str(e)) self.display_template(study, msg, "danger", str(raw_data_id)) return msg = "Your prep template was added" tab_to_display = str(raw_data_id) elif update_investigation_type: # updating the prep template investigation type pt = PrepTemplate(update_investigation_type) investigation_type = edit_investigation_type # figure out whether to add it as a user defined term or not if edit_investigation_type == 'Other' and \ edit_user_defined_investigation_type == 'New Type': investigation_type = edit_new_investigation_type # this is a new user defined investigation type so store it ontology = Ontology(convert_to_id('ENA', 'ontology')) ontology.add_user_defined_term(investigation_type) elif investigation_type == 'Other' and \ user_defined_investigation_type != 'New Type': investigation_type = edit_user_defined_investigation_type try: pt.investigation_type = investigation_type except QiitaDBColumnError as e: msg = html_error_message % (", invalid investigation type: ", investigation_type, str(e)) self.display_template(study, msg, "danger", str(pt.raw_data)) return msg = "The prep template has been updated!" tab_to_display = str(pt.raw_data) else: msg = ("Error, did you select a valid uploaded file or are " "passing the correct parameters?") msg_level = 'danger' tab_to_display = "" self.display_template(study, msg, msg_level, tab_to_display)