#! /usr/bin/env python """ galaxy_config_merger.py Created by Anne Pajon on 31 Jan 2012 Copyright (c) 2012 Cancer Research UK - Cambridge Research Institute. Script for merging specific local Galaxy config galaxy.ini.cri with default Galaxy galaxy.ini.sample """ import configparser import logging import optparse import sys def main(): # logging configuration logging.basicConfig(format="%(levelname)s: %(message)s", level=logging.INFO) # get the options parser = optparse.OptionParser() parser.add_option("-s", "--sample", dest="sample", action="store", help="path to Galaxy galaxy.ini.sample file") parser.add_option("-c", "--config", dest="config", action="store", help="path to your own galaxy.ini file") parser.add_option( "-o", "--output", dest="output", action="store", help="path to the new merged galaxy.ini.new file" ) options, args = parser.parse_args() for option in ["sample", "config"]: if getattr(options, option) is None: print(f"Please supply a --{option} parameter.\n") parser.print_help() sys.exit() config_sample = configparser.RawConfigParser() config_sample.read(options.sample) config_sample_content = open(options.sample).read() config = configparser.RawConfigParser() config.read(options.config) logging.info(f"Merging your own config file {options.config} into the sample one {options.sample}.") logging.info("---------- DIFFERENCE ANALYSIS BEGIN ----------") for section in config.sections(): if not config_sample.has_section(section): logging.warning("-MISSING- section [%s] not found in sample file. It will be ignored.", section) else: for name, value in config.items(section): if not config_sample.has_option(section, name): if f"#{name}" not in config_sample_content: logging.warning( f"-MISSING- section [{section}] option '{name}' not found in sample file. It will be ignored." ) else: logging.info( f"-notset- section [{section}] option '{name}' not set in sample file. It will be added." ) config_sample.set(section, name, value) else: if not config_sample.get(section, name) == value: logging.info( f"- diff - section [{section}] option '{name}' has different value ('{config_sample.get(section, name)}':'{value}'). It will be modified." ) config_sample.set(section, name, value) logging.info("---------- DIFFERENCE ANALYSIS END ----------") if options.output: outputfile = open(options.output, "w") config_sample.write(outputfile) outputfile.close() else: logging.info("use -o OUTPUT to write the merged configuration into a file.") logging.info("read Galaxy galaxy.ini.sample for detailed information.") if __name__ == "__main__": main()