def __init__(self, post_data): self.f_al, self.enz_id_to_enz_descr = fac.FusedAlignment(), dict() self.filt_enz_id_set , self.filter_set = set(), None self.org_id_set, self.enz_id_list = set(), [] self.db_name = sh.get_db_name(post_data) self.al_id = sf.try_val_to_int(post_data.getvalue('al_id', '')) #get ref id to enumerate alignment position as in reference enzyme: self.ref_id = sf.try_val_to_int(post_data.getvalue('ref_id', '')) #get view mode to show alignments as blocks and spacers or as sequences self.show_blocks = eval(post_data.getvalue('show_mode','False')) #get markup checkboxes: self.set_bm = post_data.getvalue('set_bm', False) self.save_bm = post_data.getvalue('save_bm', False) #set self.su, self.pos and self.aac_name to split by aac: if self.al_id and self.db_name: db_link, db_cursor = df.get_link_and_cursor(self.db_name) if db_cursor: self.set_fused_al_enz_names_and_filters(db_cursor, post_data) #obtain filtered enzymes identifiers (if any) for further split and analyse: self.set_filtered_enz_ids(db_cursor) #change blocks markups on ones from post if "set_bm" is checked: if self.set_bm: self.set_block_markup(post_data) #save blocks markups to db if "save_bm" is checked then uncheck "save_bm": if self.save_bm: self.set_block_markup(post_data) self.save_block_markup(db_cursor)
def set_from_db(self): if self.al_id and self.db_name: db_link, db_cursor = df.get_link_and_cursor(self.db_name) if db_cursor: #set Split at first to get all_ids: self.split = sac.Split(db_cursor, self.al_id, self.ref_id) if self.split: #if db contains alignment = Split was set successfully: self.all_ids = sorted(self.split.all_ids) self.id_to_descr = sf.get_enz_id_to_enz_descr(db_cursor, self.all_ids) self.set_split_filters(db_cursor) if type(self.filter_set).__name__ == 'FilterSet': self.set_filtered_ids(db_cursor)
def create_fuseblan_db(db_name, db_descr, db_obj=None): query_list = ['CREATE DATABASE IF NOT EXISTS `' + db_name + \ '` CHARACTER SET utf8 COLLATE utf8_unicode_ci'] query_list += ['USE `' + db_name + '`'] # use created db to make tables table_enum = sf.quoted_vals(sv.main_tables) query_list += ['CREATE TABLE IF NOT EXISTS `attributes`' + \ '(col_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, ' + \ 'table_name ENUM(' + table_enum + ') NOT NULL, ' + \ 'col_name VARCHAR(20) NOT NULL UNIQUE,' + \ 'col_group VARCHAR(60), ' + \ 'label VARCHAR(200), ' + \ 'data_type VARCHAR(30) NOT NULL, ' 'PRIMARY KEY(col_id))'] # attributes table query_list += ['CREATE TABLE IF NOT EXISTS `organisms`' + \ '(org_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, ' + \ 'org_name VARCHAR(100) NOT NULL, ' + \ 'PRIMARY KEY(org_id))'] # organisms table query_list += ['CREATE TABLE IF NOT EXISTS `enzymes`' + \ '(org_id MEDIUMINT UNSIGNED NOT NULL, ' + \ 'enz_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, ' + \ 'enz_name VARCHAR(60) NOT NULL, ' + \ 'PRIMARY KEY(enz_id), FOREIGN KEY (org_id) ' + \ 'REFERENCES organisms(org_id) ' + \ 'ON UPDATE CASCADE ON DELETE CASCADE)'] # enzymes table query_list += ['CREATE TABLE IF NOT EXISTS `subunits`' + \ '(enz_id MEDIUMINT UNSIGNED NOT NULL, ' + \ 'su_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, ' + \ 'su_name VARCHAR(60) NOT NULL, ' + \ 'su_seq TEXT NOT NULL, ' + \ 'PRIMARY KEY(su_id), FOREIGN KEY (enz_id) ' + \ 'REFERENCES enzymes(enz_id) ' + \ 'ON UPDATE CASCADE ON DELETE CASCADE)'] # subunits table query_list += ['CREATE TABLE IF NOT EXISTS `al_info`' + \ '(al_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, ' + \ 'ctime FLOAT UNSIGNED NOT NULL, ' + \ 'enz_id_set TEXT NOT NULL, su_names TEXT NOT NULL, ' + \ 'filter_set TEXT, al_descr TEXT, ' + \ 'PRIMARY KEY(al_id))'] # al_info table query_list += ['CREATE TABLE IF NOT EXISTS `al_su_data`' + \ '(al_id MEDIUMINT UNSIGNED NOT NULL, ' + \ 'su_name VARCHAR(60) NOT NULL, ' + \ 'al_length MEDIUMINT UNSIGNED NOT NULL, ' + \ 'block_markup TEXT, ' + \ 'PRIMARY KEY(al_id, su_name), '+ \ 'FOREIGN KEY (al_id) REFERENCES al_info(al_id) ' + \ 'ON UPDATE CASCADE ON DELETE CASCADE)'] # al_su_data table query_list += ['CREATE TABLE IF NOT EXISTS `al_data`' + \ '(al_id MEDIUMINT UNSIGNED NOT NULL, ' + \ 'su_name VARCHAR(60) NOT NULL, ' + \ 'enz_id MEDIUMINT UNSIGNED NOT NULL, ' + \ 'al_seq TEXT NOT NULL, ' + \ 'PRIMARY KEY(al_id, su_name, enz_id), ' + \ 'FOREIGN KEY (al_id) REFERENCES al_info(al_id) ' + \ 'ON UPDATE CASCADE ON DELETE CASCADE, ' + \ 'FOREIGN KEY (al_id, su_name) ' + \ 'REFERENCES al_su_data(al_id, su_name) ' + \ 'ON UPDATE CASCADE ON DELETE CASCADE)'] # al_data table # print('<br>'.join(query_list)) # try to create database: db_link, db_cursor = df.get_link_and_cursor() if type(db_link).__name__ == 'str' or type(db_cursor).__name__ == 'str': return ['Error creating database'] + [db_link] + [db_cursor] for query in query_list: result = df.send_query(db_cursor, query) if type(result ).__name__ == 'str': #some error, delete db and say about it: # err_msg += ['Deleting new database due to SQL query error:' + str(result)] # del_result = delete_db(db_cursor, db_id) # if del_result: # err_msg += ['Got database deletion error:'] + del_result db_link.close() return [result] # if writing to db is ok - there could be folder error, now isn't critical status = ['New database "' + db_descr + '" has been created with name "' + \ db_name + '"'] if db_obj: if type(db_obj).__name__ != 'DbObj': status += ['Database object obtained from xml is incorrect'] else: status += fill_db_from_db_obj(db_cursor, db_obj) db_link.commit() db_link.close() return status # + ['List of errors occured during creation:' ] + err_msg
# status += get_attrs_to_file(db_cursor, table_name, # act_to_cols['to_file']) # status += update_attrs_from_file(db_cursor, table_name, # act_to_cols['from_file']) return status cgitb.enable() post_data = cgi.FieldStorage() page_name, page_label, status, content, html = 'attrColEdit.py', '', [], '', '' if not post_data: html = sh.mk_page_header(page_name, status, page_label, no_post_data=True) else: db_name = sh.get_db_name(post_data) table_name = ah.get_table_name(post_data) db_link, db_cursor = df.get_link_and_cursor(db_name) if not db_cursor: status = ['Cannot connect to database ' + db_name] else: page_label = ' of ' + table_name + ' in database ' + db_name status = do_actions(db_cursor, table_name, post_data) content, load_status = load_data_from_db(db_cursor, table_name) if not content: status += load_status df.close_db(db_link) html = sh.mk_page_header(page_name, status, page_label) + content print(html)