Mercurial > repos > ric > test1
changeset 9:8a882207b3bf draft
Uploaded
author | ric |
---|---|
date | Mon, 26 Sep 2016 09:26:34 -0400 |
parents | 231b2478ab7d |
children | a06251a4625b |
files | galaxy-tools/biobank/updater/discard_from_collection.py |
diffstat | 1 files changed, 91 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/galaxy-tools/biobank/updater/discard_from_collection.py Mon Sep 26 09:26:34 2016 -0400 @@ -0,0 +1,91 @@ +import csv, argparse, sys, os + +from bl.vl.kb import KnowledgeBase as KB +import bl.vl.utils.ome_utils as vlu +from bl.vl.utils import get_logger, LOG_LEVELS + +COLLECTION_TYPES = {'VesselsCollection' : 'VesselsCollectionItem', + 'DataCollection' : 'DataCollectionItem'} + +def make_parser(): + parser = argparse.ArgumentParser(description='remove elements from a Vessels or Data Collection') + parser.add_argument('--logfile', type=str, help='log file (default=stderr)') + parser.add_argument('--loglevel', type=str, choices=LOG_LEVELS, + help='logger level', default='INFO') + parser.add_argument('-H', '--host', type=str, help='omero hostname') + parser.add_argument('-U', '--user', type=str, help='omero user') + parser.add_argument('-P', '--passwd', type=str, help='omero password') + parser.add_argument('-I', '--ifile', type=str, required=True, + help='list of collection items that will be removed') + parser.add_argument('--collection_type', type=str, required=True, + choices=COLLECTION_TYPES.keys(), + help='type of the collection') + parser.add_argument('--collection_label', type=str, required=True, + help='label of the collection') + + return parser + +def load_collection(coll_type, coll_label, kb): + query = 'SELECT coll FROM %s coll WHERE coll.label = :coll_label' % coll_type + coll = kb.find_all_by_query(query, {'coll_label' : coll_label}) + return coll[0] if len(coll) > 0 else None + +def load_collection_items(collection, coll_type, kb): + if COLLECTION_TYPES[coll_type] == 'VesselsCollectionItem': + citems = kb.get_vessels_collection_items(collection) + elif COLLECTION_TYPES[coll_type] == 'DataCollectionItem': + citems = kb.get_data_collection_items(collection) + else: + raise ValueError('Unknown data collection type %s' % COLLECTION_TYPES[coll_type]) + ci_map = {} + for ci in citems: + ci_map[ci.id] = ci + return ci_map + + +def main(argv): + parser = make_parser() + args = parser.parse_args(argv) + + logger = get_logger('discard_from_collection', level=args.loglevel, + filename=args.logfile) + + try: + host = args.host or vlu.ome_host() + user = args.user or vlu.ome_user() + passwd = args.passwd or vlu.ome_passwd() + except ValueError, ve: + logger.critical(ve) + sys.exit(ve) + + kb = KB(driver='omero')(host, user, passwd) + logger.info('Loading collection %s from %s' % (args.collection_label, + args.collection_type)) + coll = load_collection(args.collection_type, args.collection_label, kb) + if not coll: + msg = 'No %s found with label %s' % (args.collection_type, + args.collection_label) + logger.error(msg) + sys.exit(msg) + logger.info('Loading items from collection') + coll_items = load_collection_items(coll, args.collection_type, kb) + logger.info('Fetched %d elements' % len(coll_items)) + + with open(args.ifile) as infile: + reader = csv.DictReader(infile, delimiter='\t') + to_be_deleted = [row['collection_item'] for row in reader] + logger.info('Found %d items to be deleted' % len(to_be_deleted)) + + for tbd in to_be_deleted: + try: + kb.delete(coll_items[tbd]) + logger.info('%s with ID %s deleted' % (COLLECTION_TYPES[args.collection_type], + tbd)) + except KeyError, ke: + logger.warning('No %s related to ID %s' % (COLLECTION_TYPES[args.collection_type], + ke)) + logger.info('Job completed') + + +if __name__ == '__main__': + main(sys.argv[1:])