def mp_process_assays(settings, batch_id, login, user_id, ns): """ this function will be started in different process, so it must initialize everything from scratch, including database connection """ pid = os.getpid() cerr('mp_process_assays()[%d]: connecting to db' % pid) dbh = get_dbhandler_notsafe() if dbh is None: dbh = get_dbhandler(settings) dbh.session().global_user = dbh.get_user(user_id) cerr('mp_process_assays()[%d]: processing...' % pid) result = process_assays(batch_id, login, ns) dbh.session().global_user = None return result
def mp_run_callback( settings, callback, params, user, mode, ns=None): """ run analyis """ if ns: ns.start_time = int(time()) ns.status = 'R' ns.msg = 'Processing...' ns.cerr += 'mp_run_callback(): connecting to db...\n' dbh = get_dbhandler_notsafe() if dbh is None: dbh = get_dbhandler(settings) # user authorization should be performed by Query q = Query( params, dbh ) # callback needs to return result (a dictionary object) # { 'custom': data, 'options': options, # 'html': html_or_None, 'jscode': jscode_or_None } if ns: ns.cerr += 'mp_run_callback(): processing callback...\n' result = callback( q, user ) if type(result) != dict: return result #result['sample_filtering'] = sample_summary( q.get_sample_summary(mode)) #result['marker_filtering'] = marker_summary( q ) result['sample_filtering'] = format_sample_summary( q.get_sample_summary(mode) ) result['marker_filtering'] = format_marker_summary( q ) if ns: ns.finish_time = int(time()) ns.status = 'D' ns.msg = 'Finished...' ns.cerr += 'mp_run_callback(): callback finished...\n' return result