I have to write a config file based on the parameters given by a user.
The goal is to obtain something like that in the target file :
PrimerGCRange = namedtuple("GCRange", "min max opt")PRIMER_SIZE_RANGES = {"DEFAULT": PrimerSizeRange(25, 35, 30),"HIGH_GC": PrimerSizeRange(25, 35, 30), }
How can I have that without the lines becoming :
PRIMER_SIZE_RANGES = {"DEFAULT": [25, 35, 30], "HIGH_GC": [25, 35, 30]}
The idea is to have a dictionnary where {"PRIMER_SIZE_RANGE" : "DEFAULT": PrimerSizeRange(25, 35, 30), ..}, with 25, 35, 30 the inputs of the user, is put in form by a function. Then I write this in a new file but I don't want the PrimerSizeRange to be evaluating as the destination file is a config.py.
Otherwise the namedtuple can't be used properly in others files.
Here I transform the dictionnary to text
for v in values: text += v +' = '+ json.dumps(values[v]) +'\n' with open(file_name, 'w') as f: f.write(textwrap.dedent(text))
where values would be something like :
values = {"PRIMER_SIZE_RANGES": {"DEFAULT": PrimerSizeRange(25, 35, 30),"HIGH_GC": PrimerSizeRange(25, 35, 30), },"PREFIX" : "scheme","OUTPUT_PATH" : "./output","MAX_ALN_GAP_PERCENT" : 0.03,"MAX_REFERENCES" : 200}
And the expected config.py :
PrimerSizeRange = namedtuple("PrimerSizeRange", "min max opt")PRIMER_SIZE_RANGES = {"DEFAULT": PrimerSizeRange(25, 35, 30),"HIGH_GC": PrimerSizeRange(25, 35, 30),}PREFIX = "scheme"OUTPUT_PATH = "./output"MAX_ALN_GAP_PERCENT = 0.03MAX_REFERENCES = 200