|
42 | 42 | import json |
43 | 43 | import argparse |
44 | 44 | import os |
| 45 | +import pathlib |
45 | 46 | import re |
| 47 | +import toml |
46 | 48 |
|
47 | 49 |
|
48 | 50 | def fix_and_quote_fortran_multiline(txt): |
@@ -99,28 +101,20 @@ def write_testcase(c, TEST_NUMBER): |
99 | 101 |
|
100 | 102 | def flatten_test_cases(j): |
101 | 103 | # unpack nested cases |
102 | | - nested_cases = j['cases'] |
103 | | - flattened_cases = [] |
104 | | - while len(nested_cases) > 0: |
105 | | - cases = nested_cases.pop() |
106 | | - if 'cases' in cases: |
107 | | - nested_cases.append(cases['cases']) |
108 | | - else: |
109 | | - if isinstance(cases, list): |
110 | | - flattened_cases.extend(cases) |
111 | | - else: |
112 | | - flattened_cases.append(cases) |
113 | | - |
114 | | - return flattened_cases |
| 104 | + if 'cases' in j: |
| 105 | + for i in j['cases']: |
| 106 | + yield from flatten_test_cases(i) |
| 107 | + else: |
| 108 | + yield j |
115 | 109 |
|
116 | 110 |
|
117 | 111 | def create_single_test(j): |
118 | 112 | """Walk through the json cases and recursively write the test cases""" |
119 | 113 |
|
120 | | - flattened_cases = flatten_test_cases(j) |
| 114 | + flattened_cases = list(flatten_test_cases(j)) |
121 | 115 |
|
122 | 116 | si = [] |
123 | | - for i, c in enumerate(flattened_cases): |
| 117 | + for i, c in enumerate(flattened_cases, start=1): |
124 | 118 | si.extend(write_testcase(c, i)) |
125 | 119 | return si |
126 | 120 |
|
@@ -206,8 +200,14 @@ def add_meta_and_doc_file(test_file_name, json_name): |
206 | 200 | write_instructions(desc_file_lines, instruction_file) |
207 | 201 |
|
208 | 202 | meta_yaml = os.path.join(os.path.dirname(json_name), 'metadata.yml') |
| 203 | + meta_toml = os.path.join(os.path.dirname(json_name), 'metadata.toml') |
| 204 | + if os.path.exists(meta_toml): |
| 205 | + config_dict = toml.loads(pathlib.Path(meta_toml).read_text()) |
| 206 | + elif os.path.exists(meta_yaml): |
| 207 | + config_dict = get_meta_info(meta_yaml) |
| 208 | + else: |
| 209 | + raise ValueError("Unable to find metadata file (yml or toml)") |
209 | 210 | local_config_json = os.path.join(meta_dir, 'config.json') |
210 | | - config_dict = get_meta_info(meta_yaml) |
211 | 211 | write_config_json(exercise_name, config_dict, local_config_json) |
212 | 212 |
|
213 | 213 | return None |
|
0 commit comments