Mercurial > repos > ric > test2
comparison galaxy-tools/biobank/utils/delete_flowcell_results.py @ 0:ba6cf6ede027 draft default tip
Uploaded
| author | ric |
|---|---|
| date | Wed, 28 Sep 2016 06:03:30 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:ba6cf6ede027 |
|---|---|
| 1 import argparse, sys | |
| 2 | |
| 3 from bl.vl.kb import KnowledgeBase as KB | |
| 4 from bl.vl.utils import get_logger, LOG_LEVELS | |
| 5 import bl.vl.utils.ome_utils as vlu | |
| 6 | |
| 7 | |
| 8 def make_parser(): | |
| 9 parser = argparse.ArgumentParser(description='remove datasamples connected to a specific sample of a flowcell') | |
| 10 parser.add_argument('--logfile', type=str, help='log file (default=stderr)') | |
| 11 parser.add_argument('--loglevel', type=str, choices=LOG_LEVELS, | |
| 12 help='logging level (default=INFO)', default='INFO') | |
| 13 parser.add_argument('-H', '--host', type=str, help='omero server hostname') | |
| 14 parser.add_argument('-U', '--user', type=str, help='omero user') | |
| 15 parser.add_argument('-P', '--passwd', type=str, help='omero password') | |
| 16 parser.add_argument('--flowcell-label', type=str, required=True, | |
| 17 help='flowcell label') | |
| 18 parser.add_argument('--sample-label', type=str, required=True, | |
| 19 help='sample label') | |
| 20 parser.add_argument('--dry-run', action='store_true', | |
| 21 help='run a simulation, don\'t delete anything') | |
| 22 return parser | |
| 23 | |
| 24 | |
| 25 def get_flowcell_samples_map(flowcell, kb, logger): | |
| 26 fc = kb.get_by_label(kb.FlowCell, flowcell) | |
| 27 if not fc: | |
| 28 logger.info('No flowcell with label %s', flowcell) | |
| 29 sys.exit(0) | |
| 30 logger.info('Loading data for flowcell %s', flowcell) | |
| 31 dsamples = kb.dt.get_connected(fc, kb.SeqDataSample) | |
| 32 dsamples_map = {} | |
| 33 for ds in dsamples: | |
| 34 if ds.sample: | |
| 35 dsamples_map.setdefault(ds.sample.label, []).append(ds) | |
| 36 else: | |
| 37 dsamples_map.setdefault('NO_SAMPLE', []).append(ds) | |
| 38 return dsamples_map | |
| 39 | |
| 40 | |
| 41 def print_report(dsamples_map, sample_label, kb, logger): | |
| 42 dsamples = dsamples_map.get(sample_label) | |
| 43 if not dsamples: | |
| 44 logger.info('No sample with label %s is related to the flowcell', sample_label) | |
| 45 sys.exit(0) | |
| 46 for ds in dsamples: | |
| 47 dobjs = kb.get_data_objects(ds) | |
| 48 logger.info('## data sample: %s', ds.label) | |
| 49 for dob in dobjs: | |
| 50 logger.info('### data object: %s --- mimetype: %s', dob.path, dob.mimetype) | |
| 51 | |
| 52 | |
| 53 def delete(dsamples_map, sample_label, kb, logger): | |
| 54 for ds in dsamples_map[sample_label]: | |
| 55 # this is a hack specific for the automator workflow | |
| 56 if not ds.label.startswith('stage1'): | |
| 57 logger.info('Deleting data for %s', ds.label) | |
| 58 dobjs = kb.get_data_objects(ds) | |
| 59 for d in dobjs: | |
| 60 kb.delete(d) | |
| 61 a = ds.action | |
| 62 kb.delete(ds) | |
| 63 try: | |
| 64 kb.delete(a) | |
| 65 except: | |
| 66 pass | |
| 67 | |
| 68 | |
| 69 def main(argv): | |
| 70 parser = make_parser() | |
| 71 args = parser.parse_args(argv) | |
| 72 | |
| 73 logger = get_logger('delete_flowcell_results', level=args.loglevel, | |
| 74 filename=args.logfile) | |
| 75 | |
| 76 try: | |
| 77 host = args.host or vlu.ome_host() | |
| 78 user = args.user or vlu.ome_user() | |
| 79 passwd = args.passwd or vlu.ome_passwd() | |
| 80 except ValueError, ve: | |
| 81 logger.critical(ve) | |
| 82 sys.exit(ve) | |
| 83 | |
| 84 kb = KB(driver='omero')(host, user, passwd) | |
| 85 | |
| 86 dsamples_map = get_flowcell_samples_map(args.flowcell_label, kb, logger) | |
| 87 print_report(dsamples_map, args.sample_label, kb, logger) | |
| 88 if not args.dry_run: | |
| 89 delete(dsamples_map, args.sample_label, kb. logger) | |
| 90 pass | |
| 91 else: | |
| 92 logger.debug('SIMULATION, exit now') | |
| 93 logger.info('Job completed') | |
| 94 | |
| 95 | |
| 96 if __name__ == '__main__': | |
| 97 main(sys.argv[1:]) |
