#!/usr/bin/env python2 # # Merge debugger YAML metadata files and output a merged JSON metadata file. # import logging import sys logging.basicConfig(level=logging.INFO, stream=sys.stdout, format='%(name)-21s %(levelname)-7s %(message)s') logger = logging.getLogger('merge_debug_meta.py') logger.setLevel(logging.INFO) import os import json import yaml import optparse if __name__ == '__main__': parser = optparse.OptionParser() parser.add_option('--output', dest='output', default=None, help='output JSON filename') parser.add_option('--class-names', dest='class_names', help='YAML metadata for class names') parser.add_option('--debug-commands', dest='debug_commands', help='YAML metadata for debug commands') parser.add_option('--debug-errors', dest='debug_errors', help='YAML metadata for debug protocol error codes') parser.add_option('--opcodes', dest='opcodes', help='YAML metadata for opcodes') parser.add_option('--quiet', dest='quiet', action='store_true', default=False, help='Suppress info messages (show warnings)') parser.add_option('--verbose', dest='verbose', action='store_true', default=False, help='Show verbose debug messages') (opts, args) = parser.parse_args() # Log level. if opts.quiet: logger.setLevel(logging.WARNING) elif opts.verbose: logger.setLevel(logging.DEBUG) res = {} def merge(fn): with open(fn, 'rb') as f: doc = yaml.load(f) for k in doc.keys(): res[k] = doc[k] merge(opts.class_names) merge(opts.debug_commands) merge(opts.debug_errors) merge(opts.opcodes) with open(opts.output, 'wb') as f: f.write(json.dumps(res, indent=4) + '\n') logger.debug('Wrote merged debugger metadata to ' + str(opts.output))