Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/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()