Mercurial > repos > ric > test3
comparison galaxy-tools/biobank/updater/discard_from_collection.py @ 0:e54d14bed3f5 draft default tip
Uploaded
| author | ric |
|---|---|
| date | Thu, 29 Sep 2016 06:09:15 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:e54d14bed3f5 |
|---|---|
| 1 import csv, argparse, sys, os | |
| 2 | |
| 3 from bl.vl.kb import KnowledgeBase as KB | |
| 4 import bl.vl.utils.ome_utils as vlu | |
| 5 from bl.vl.utils import get_logger, LOG_LEVELS | |
| 6 | |
| 7 COLLECTION_TYPES = {'VesselsCollection' : 'VesselsCollectionItem', | |
| 8 'DataCollection' : 'DataCollectionItem'} | |
| 9 | |
| 10 def make_parser(): | |
| 11 parser = argparse.ArgumentParser(description='remove elements from a Vessels or Data Collection') | |
| 12 parser.add_argument('--logfile', type=str, help='log file (default=stderr)') | |
| 13 parser.add_argument('--loglevel', type=str, choices=LOG_LEVELS, | |
| 14 help='logger level', default='INFO') | |
| 15 parser.add_argument('-H', '--host', type=str, help='omero hostname') | |
| 16 parser.add_argument('-U', '--user', type=str, help='omero user') | |
| 17 parser.add_argument('-P', '--passwd', type=str, help='omero password') | |
| 18 parser.add_argument('-I', '--ifile', type=str, required=True, | |
| 19 help='list of collection items that will be removed') | |
| 20 parser.add_argument('--collection_type', type=str, required=True, | |
| 21 choices=COLLECTION_TYPES.keys(), | |
| 22 help='type of the collection') | |
| 23 parser.add_argument('--collection_label', type=str, required=True, | |
| 24 help='label of the collection') | |
| 25 | |
| 26 return parser | |
| 27 | |
| 28 def load_collection(coll_type, coll_label, kb): | |
| 29 query = 'SELECT coll FROM %s coll WHERE coll.label = :coll_label' % coll_type | |
| 30 coll = kb.find_all_by_query(query, {'coll_label' : coll_label}) | |
| 31 return coll[0] if len(coll) > 0 else None | |
| 32 | |
| 33 def load_collection_items(collection, coll_type, kb): | |
| 34 if COLLECTION_TYPES[coll_type] == 'VesselsCollectionItem': | |
| 35 citems = kb.get_vessels_collection_items(collection) | |
| 36 elif COLLECTION_TYPES[coll_type] == 'DataCollectionItem': | |
| 37 citems = kb.get_data_collection_items(collection) | |
| 38 else: | |
| 39 raise ValueError('Unknown data collection type %s' % COLLECTION_TYPES[coll_type]) | |
| 40 ci_map = {} | |
| 41 for ci in citems: | |
| 42 ci_map[ci.id] = ci | |
| 43 return ci_map | |
| 44 | |
| 45 | |
| 46 def main(argv): | |
| 47 parser = make_parser() | |
| 48 args = parser.parse_args(argv) | |
| 49 | |
| 50 logger = get_logger('discard_from_collection', level=args.loglevel, | |
| 51 filename=args.logfile) | |
| 52 | |
| 53 try: | |
| 54 host = args.host or vlu.ome_host() | |
| 55 user = args.user or vlu.ome_user() | |
| 56 passwd = args.passwd or vlu.ome_passwd() | |
| 57 except ValueError, ve: | |
| 58 logger.critical(ve) | |
| 59 sys.exit(ve) | |
| 60 | |
| 61 kb = KB(driver='omero')(host, user, passwd) | |
| 62 logger.info('Loading collection %s from %s' % (args.collection_label, | |
| 63 args.collection_type)) | |
| 64 coll = load_collection(args.collection_type, args.collection_label, kb) | |
| 65 if not coll: | |
| 66 msg = 'No %s found with label %s' % (args.collection_type, | |
| 67 args.collection_label) | |
| 68 logger.error(msg) | |
| 69 sys.exit(msg) | |
| 70 logger.info('Loading items from collection') | |
| 71 coll_items = load_collection_items(coll, args.collection_type, kb) | |
| 72 logger.info('Fetched %d elements' % len(coll_items)) | |
| 73 | |
| 74 with open(args.ifile) as infile: | |
| 75 reader = csv.DictReader(infile, delimiter='\t') | |
| 76 to_be_deleted = [row['collection_item'] for row in reader] | |
| 77 logger.info('Found %d items to be deleted' % len(to_be_deleted)) | |
| 78 | |
| 79 for tbd in to_be_deleted: | |
| 80 try: | |
| 81 kb.delete(coll_items[tbd]) | |
| 82 logger.info('%s with ID %s deleted' % (COLLECTION_TYPES[args.collection_type], | |
| 83 tbd)) | |
| 84 except KeyError, ke: | |
| 85 logger.warning('No %s related to ID %s' % (COLLECTION_TYPES[args.collection_type], | |
| 86 ke)) | |
| 87 logger.info('Job completed') | |
| 88 | |
| 89 | |
| 90 if __name__ == '__main__': | |
| 91 main(sys.argv[1:]) |
