Skip to content

Commit d481eda

Browse files
Optional relative paths in generated YAML (#57)
* optional (default True) relative paths in generated YAML Co-authored-by: Yannik Schälte <[email protected]>
1 parent 0917194 commit d481eda

File tree

2 files changed

+40
-10
lines changed

2 files changed

+40
-10
lines changed

petab/problem.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,8 @@ def to_files(self,
271271
parameter_file: Optional[str] = None,
272272
visualization_file: Optional[str] = None,
273273
observable_file: Optional[str] = None,
274-
yaml_file: Optional[str] = None) -> None:
274+
yaml_file: Optional[str] = None,
275+
relative_paths: bool = True,) -> None:
275276
"""
276277
Write PEtab tables to files for this problem
277278
@@ -289,6 +290,9 @@ def to_files(self,
289290
visualization_file: Visualization table destination
290291
observable_file: Observables table destination
291292
yaml_file: YAML file destination
293+
relative_paths: whether all paths in the YAML file should be
294+
relative to the location of the YAML file. If `False`, then paths
295+
are left unchanged.
292296
293297
Raises:
294298
ValueError:
@@ -344,7 +348,8 @@ def error(name: str) -> ValueError:
344348
yaml.create_problem_yaml(sbml_file, condition_file,
345349
measurement_file, parameter_file,
346350
observable_file, yaml_file,
347-
visualization_file)
351+
visualization_file,
352+
relative_paths=relative_paths,)
348353

349354
def get_optimization_parameters(self):
350355
"""

petab/yaml.py

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""Code regarding the PEtab YAML config files"""
22

33
import os
4+
from pathlib import Path
45
from typing import Any, Dict, Union, Optional, List
56

67
import jsonschema
@@ -172,14 +173,16 @@ def write_yaml(yaml_config: Dict[str, Any], filename: str) -> None:
172173
sort_keys=False)
173174

174175

175-
def create_problem_yaml(sbml_files: Union[str, List[str]],
176-
condition_files: Union[str, List[str]],
177-
measurement_files: Union[str, List[str]],
178-
parameter_file: str,
179-
observable_files: Union[str, List[str]],
180-
yaml_file: str,
181-
visualization_files: Optional[Union[str, List[str]]]
182-
= None) -> None:
176+
def create_problem_yaml(
177+
sbml_files: Union[str, List[str]],
178+
condition_files: Union[str, List[str]],
179+
measurement_files: Union[str, List[str]],
180+
parameter_file: str,
181+
observable_files: Union[str, List[str]],
182+
yaml_file: str,
183+
visualization_files: Optional[Union[str, List[str]]] = None,
184+
relative_paths: bool = True,
185+
) -> None:
183186
"""
184187
Create and write default YAML file for a single PEtab problem
185188
@@ -192,6 +195,9 @@ def create_problem_yaml(sbml_files: Union[str, List[str]],
192195
yaml_file: Path to which YAML file should be written
193196
visualization_files: Optional Path to visualization file or list of
194197
such
198+
relative_paths: whether all paths in the YAML file should be relative
199+
to the location of the YAML file. If `False`, then paths are left
200+
unchanged.
195201
"""
196202
if isinstance(sbml_files, str):
197203
sbml_files = [sbml_files]
@@ -204,6 +210,25 @@ def create_problem_yaml(sbml_files: Union[str, List[str]],
204210
if isinstance(visualization_files, str):
205211
visualization_files = [visualization_files]
206212

213+
if relative_paths:
214+
yaml_file_dir = Path(yaml_file).parent
215+
216+
def get_rel_to_yaml(paths: Union[List[str], None]):
217+
if paths is None:
218+
return paths
219+
return [
220+
os.path.relpath(path, start=yaml_file_dir)
221+
for path in paths
222+
]
223+
224+
sbml_files = get_rel_to_yaml(sbml_files)
225+
condition_files = get_rel_to_yaml(condition_files)
226+
measurement_files = get_rel_to_yaml(measurement_files)
227+
observable_files = get_rel_to_yaml(observable_files)
228+
visualization_files = get_rel_to_yaml(visualization_files)
229+
230+
parameter_file = get_rel_to_yaml([parameter_file])[0]
231+
207232
problem_dic = {CONDITION_FILES: condition_files,
208233
MEASUREMENT_FILES: measurement_files,
209234
SBML_FILES: sbml_files,

0 commit comments

Comments
 (0)