예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
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
예제 #4
0
    # 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)