annotate galaxy-tools/biobank/updater/discard_from_collection.py @ 0:ba6cf6ede027 draft default tip

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