diff galaxy-tools/history_tools/history_to_file.py @ 3:43be74e62bfe draft

Uploaded
author ric
date Thu, 22 Sep 2016 08:57:04 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/galaxy-tools/history_tools/history_to_file.py	Thu Sep 22 08:57:04 2016 -0400
@@ -0,0 +1,76 @@
+#-------------------------
+# Export Galaxy history data to a JSON compatible text file
+#
+# Galaxy host can be retrieved using the GALAXY_HOST environment
+# variable
+# Galaxy API key can be retrieved using the GALAXY_API_KEY
+# environment variable 
+#-------------------------
+
+from blend.galaxy import GalaxyInstance
+
+import argparse, sys, logging, os, json
+
+LOG_FORMAT = '%(asctime)s|%(levelname)-8s|%(message)s'
+LOG_DATEFMT = '%Y-%m-%d %H:%M:%S'
+LOG_LEVELS = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
+
+def make_parser():
+    parser = argparse.ArgumentParser(description='Export Galaxy history data')
+    parser.add_argument('--loglevel', type=str, choices=LOG_LEVELS,
+                        help='logging level (default: INFO)', default='INFO')
+    parser.add_argument('--logfile', type=str, help='log file (default=stderr)')
+    parser.add_argument('--galaxy_host', type=str, help='galaxy host (with port)')
+    parser.add_argument('--api_key', type=str, help='Galaxy API key')
+    parser.add_argument('--history_id', type=str, required=True,
+                        help='ID fo the history that will be exported')
+    parser.add_argument('--no_peek', action='store_true',
+                        help='remove preview from datasets details')
+    parser.add_argument('--ofile', type=str, required=True,
+                        help='output file')
+    return parser
+
+def check_history_id(galaxy_instance, history_id):
+    hmap = dict((str(h['id']), str(h['name'])) 
+                for h in galaxy_instance.histories.get_histories())
+    return history_id in hmap
+
+def main(argv):
+    parser = make_parser()
+    args = parser.parse_args(argv)
+
+    log_level = getattr(logging, args.loglevel)
+    kwargs = {'format'  : LOG_FORMAT,
+              'datefmt' : LOG_DATEFMT,
+              'level'   : log_level}
+    if args.logfile:
+        kwargs['filename'] = args.logfile
+    logging.basicConfig(**kwargs)
+    logger = logging.getLogger('history_to_file')
+
+    try:
+        galaxy_host = args.galaxy_host or os.environ['GALAXY_HOST']
+        api_key = args.api_key or os.environ['GALAXY_API_KEY']
+    except KeyError, ke:
+        msg = 'No argument passed and no global variable %s found' % ke
+        logger.critical(msg)
+        sys.exit(msg)
+
+    logger.info('opening connection to %s' % galaxy_host)
+    gi = GalaxyInstance(galaxy_host, key=api_key)
+
+    if not check_history_id(gi, args.history_id):
+        msg = 'Unable to find history with ID %s' % args.history_id
+        logger.critical(msg)
+        sys.exit(msg)
+
+    logger.info('getting data for history %s' % args.history_id)
+    h_data = gi.histories.get_history_details(args.history_id, args.no_peek)
+
+    logger.info('saving to file %s' % args.ofile)
+    with open(args.ofile, 'w') as out_file:
+        out_file.write(json.dumps(h_data))
+    logger.info('Job completed')
+
+if __name__ == '__main__':
+    main(sys.argv[1:])