3
|
1 #-------------------------
|
|
2 # Export Galaxy history data to a JSON compatible text file
|
|
3 #
|
|
4 # Galaxy host can be retrieved using the GALAXY_HOST environment
|
|
5 # variable
|
|
6 # Galaxy API key can be retrieved using the GALAXY_API_KEY
|
|
7 # environment variable
|
|
8 #-------------------------
|
|
9
|
|
10 from blend.galaxy import GalaxyInstance
|
|
11
|
|
12 import argparse, sys, logging, os, json
|
|
13
|
|
14 LOG_FORMAT = '%(asctime)s|%(levelname)-8s|%(message)s'
|
|
15 LOG_DATEFMT = '%Y-%m-%d %H:%M:%S'
|
|
16 LOG_LEVELS = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
|
|
17
|
|
18 def make_parser():
|
|
19 parser = argparse.ArgumentParser(description='Export Galaxy history data')
|
|
20 parser.add_argument('--loglevel', type=str, choices=LOG_LEVELS,
|
|
21 help='logging level (default: INFO)', default='INFO')
|
|
22 parser.add_argument('--logfile', type=str, help='log file (default=stderr)')
|
|
23 parser.add_argument('--galaxy_host', type=str, help='galaxy host (with port)')
|
|
24 parser.add_argument('--api_key', type=str, help='Galaxy API key')
|
|
25 parser.add_argument('--history_id', type=str, required=True,
|
|
26 help='ID fo the history that will be exported')
|
|
27 parser.add_argument('--no_peek', action='store_true',
|
|
28 help='remove preview from datasets details')
|
|
29 parser.add_argument('--ofile', type=str, required=True,
|
|
30 help='output file')
|
|
31 return parser
|
|
32
|
|
33 def check_history_id(galaxy_instance, history_id):
|
|
34 hmap = dict((str(h['id']), str(h['name']))
|
|
35 for h in galaxy_instance.histories.get_histories())
|
|
36 return history_id in hmap
|
|
37
|
|
38 def main(argv):
|
|
39 parser = make_parser()
|
|
40 args = parser.parse_args(argv)
|
|
41
|
|
42 log_level = getattr(logging, args.loglevel)
|
|
43 kwargs = {'format' : LOG_FORMAT,
|
|
44 'datefmt' : LOG_DATEFMT,
|
|
45 'level' : log_level}
|
|
46 if args.logfile:
|
|
47 kwargs['filename'] = args.logfile
|
|
48 logging.basicConfig(**kwargs)
|
|
49 logger = logging.getLogger('history_to_file')
|
|
50
|
|
51 try:
|
|
52 galaxy_host = args.galaxy_host or os.environ['GALAXY_HOST']
|
|
53 api_key = args.api_key or os.environ['GALAXY_API_KEY']
|
|
54 except KeyError, ke:
|
|
55 msg = 'No argument passed and no global variable %s found' % ke
|
|
56 logger.critical(msg)
|
|
57 sys.exit(msg)
|
|
58
|
|
59 logger.info('opening connection to %s' % galaxy_host)
|
|
60 gi = GalaxyInstance(galaxy_host, key=api_key)
|
|
61
|
|
62 if not check_history_id(gi, args.history_id):
|
|
63 msg = 'Unable to find history with ID %s' % args.history_id
|
|
64 logger.critical(msg)
|
|
65 sys.exit(msg)
|
|
66
|
|
67 logger.info('getting data for history %s' % args.history_id)
|
|
68 h_data = gi.histories.get_history_details(args.history_id, args.no_peek)
|
|
69
|
|
70 logger.info('saving to file %s' % args.ofile)
|
|
71 with open(args.ofile, 'w') as out_file:
|
|
72 out_file.write(json.dumps(h_data))
|
|
73 logger.info('Job completed')
|
|
74
|
|
75 if __name__ == '__main__':
|
|
76 main(sys.argv[1:])
|