Newer
Older
version 1.0
struct Readgroup {
String id
File R1
String R1_md5
File? R2
}
struct Library {
String id
Array[Readgroup]+ readgroups
}
struct Sample {
String id
Array[Library]+ libraries
}
task sampleConfigFileToStruct {
input {
File sampleConfigFile
String outputJson = "output.json"
}
# Below command can convert any samplesheet with a nested dictionary
# structure to a list of objects model.
# It was specifically designed to run on both python2 and python3.
# Only requirement is PyYAML.
#
# Code maintained in https://github.com/rhpvorderman/samplesheet-to-struct
# can be moved to biowdl group later.
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
import yaml
import json
def nested_dicts_to_lists(dictionary):
new_dict = dict()
for key, value in dictionary.items():
if type(value) == dict:
new_dict[key] = dict_to_item_list_with_id(value)
else:
new_dict[key] = value
return new_dict
def dict_to_item_list_with_id(dictionary):
items = []
for sub_key, sub_dictionary in dictionary.items():
item_dict = dict(id=sub_key, **nested_dicts_to_lists(sub_dictionary))
items.append(item_dict)
return items
with open("~{sampleConfigFile}", "r") as samplesheet:
samplesheet_dict = yaml.load(samplesheet)
sample_struct = nested_dicts_to_lists(samplesheet_dict)
with open("~{outputJson}", "w") as output_json:
output_json.write(json.dumps(sample_struct))
CODE
}
output {
Map[String,Array[Sample]] map = read_json(outputJson)
Array[Sample] samples = map["samples"]
}