Skip to content
Snippets Groups Projects
docker_compose_generator.py 3.5 KiB
Newer Older
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

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/gspecies_compose_template.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/gspecies_compose_template.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()