import os import argparse import logging # import yaml # import ruamel.yaml # import json """ docker-compose_generator.py This method will write a formatted docker-compose.yml for the specified organism (only requires genus and species) """ class DockerComposeGenerator: def __init__(self): self.mode = None self.genus = None self.species = None self.organism_template = None self.traefik_template = None self.outdir = None def generate(self): if self.organism_template is None: self.organism_template = str(os.getcwd() + "/templates/stack-organism.yml") else: with open(self.organism_template, 'r') as infile: organism_content = list() for line in infile: # Replace placeholders by the genus and species organism_content.append(line.replace("genus_species", str(self.genus.lower() + "_" + self.species)).replace("Genus species", str(self.genus + " " + self.species)).replace("Genus/species", str(self.genus + "/" + self.species)).replace("gspecies", str(self.genus.lower()[0] + self.species))) self.write_yml(content=organism_content) if self.traefik_template is None: self.traefik_template = str(os.getcwd() + "/templates/stack-organism.yml") else: with open(self.traefik_template, 'r') as infile: traefik_content = list() for line in infile: # Replace placeholders by the genus and species traefik_content.append(line.replace("genus_species", str(self.genus.lower() + "_" + self.species)).replace("Genus species", str(self.genus + " " + self.species)).replace("Genus/species", str(self.genus + "/" + self.species)).replace("gspecies", str(self.genus.lower()[0] + self.species))) self.write_yml(content=traefik_content) def write_yml(self, content): with open(self.outdir + "/docker-compose.yml", 'w') as outfile: for line in content: outfile.write(line) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Generator of docker-compose.yml for GGA automated integration " "following the templates available @ " "https://gitlab.inria.fr/abretaud/genodock_demo/") parser.add_argument("-g", "--genus", type=str, help="input genus") parser.add_argument("-s", "--species", type=str, help="input species") parser.add_argument("-o", "--organism-template", type=str, help="input organism template docker-compose.yml (compose or stack), optional") parser.add_argument("-t", "--traefik-template", type=str, help="input organism template docker-compose.yml (compose or stack), optional") parser.add_argument("-m", "--main-dir", type=str, help="where to write the output traefik docker-compose.yml (defaults to cd, autoload places it in main directory)") parser.add_argument("-d", "--organism-dir", type=str, help="where to write the output organism docker-compose.yml (defaults to cd, autoload places it in organism directory)") args = parser.parse_args() dc_generator = DockerComposeGenerator() dc_generator.genus = args.genus dc_generator.species = args.species if args.template: dc_generator.template = args.template dc_generator.outdir = args.outdir dc_generator.generate()