From 2565a7db4f283317a33e3a10c09b03463d2cb1fb Mon Sep 17 00:00:00 2001 From: Fabian Date: Tue, 19 Mar 2024 08:20:23 +0100 Subject: [PATCH] snakefile: move copy_default_files and process_run_config to helpers --- Snakefile | 30 ++++++------------------------ scripts/_helpers.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/Snakefile b/Snakefile index 58cb6677..4a41622e 100644 --- a/Snakefile +++ b/Snakefile @@ -2,26 +2,18 @@ # # SPDX-License-Identifier: MIT -from os.path import normpath, exists -from shutil import copyfile, move, rmtree from pathlib import Path import yaml - +from os.path import normpath +from shutil import move, rmtree from snakemake.utils import min_version min_version("8.5") -from scripts._helpers import path_provider +from scripts._helpers import path_provider, copy_default_files, process_run_config -default_files = { - "config/config.default.yaml": "config/config.yaml", - "config/scenarios.template.yaml": "config/scenarios.yaml", -} -for template, target in default_files.items(): - target = os.path.join(workflow.current_basedir, target) - template = os.path.join(workflow.current_basedir, template) - if not exists(target) and exists(template): - copyfile(template, target) + +copy_default_files(workflow) configfile: "config/config.default.yaml" @@ -29,17 +21,7 @@ configfile: "config/config.yaml" run = config["run"] -scenarios = run.get("scenarios", {}) -if run["name"] and scenarios.get("enable"): - fn = Path(scenarios["file"]) - scenarios = yaml.safe_load(fn.read_text()) - RDIR = "{run}/" - if run["name"] == "all": - config["run"]["name"] = list(scenarios.keys()) -elif run["name"]: - RDIR = run["name"] + "/" -else: - RDIR = "" +RDIR = process_run_config(run) logs = path_provider("logs/", RDIR, run["shared_resources"]) benchmarks = path_provider("benchmarks/", RDIR, run["shared_resources"]) diff --git a/scripts/_helpers.py b/scripts/_helpers.py index d03a306b..2bacf5cd 100644 --- a/scripts/_helpers.py +++ b/scripts/_helpers.py @@ -11,7 +11,9 @@ import os import re import urllib from functools import partial +from os.path import exists from pathlib import Path +from shutil import copyfile import pandas as pd import pytz @@ -25,6 +27,33 @@ logger = logging.getLogger(__name__) REGION_COLS = ["geometry", "name", "x", "y", "country"] +def copy_default_files(workflow): + default_files = { + "config/config.default.yaml": "config/config.yaml", + "config/scenarios.template.yaml": "config/scenarios.yaml", + } + for template, target in default_files.items(): + target = os.path.join(workflow.current_basedir, target) + template = os.path.join(workflow.current_basedir, template) + if not exists(target) and exists(template): + copyfile(template, target) + + +def process_run_config(run): + scenarios = run.get("scenarios", {}) + if run["name"] and scenarios.get("enable"): + fn = Path(scenarios["file"]) + scenarios = yaml.safe_load(fn.read_text()) + RDIR = "{run}/" + if run["name"] == "all": + run["name"] = list(scenarios.keys()) + elif run["name"]: + RDIR = run["name"] + "/" + else: + RDIR = "" + return RDIR + + def get_run_path(fn, dir, rdir, shared_resources): """ Dynamically provide paths based on shared resources and filename.