From dc59e7cce764ffdbd2b304511f2fcec2cae95b25 Mon Sep 17 00:00:00 2001 From: Frederik Hennig <frederik.hennig@fau.de> Date: Wed, 15 Nov 2023 18:13:47 +0900 Subject: [PATCH] added configurator exection; untested --- pystencilssfg/configuration.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/pystencilssfg/configuration.py b/pystencilssfg/configuration.py index f2f53a6..4bb4559 100644 --- a/pystencilssfg/configuration.py +++ b/pystencilssfg/configuration.py @@ -1,9 +1,12 @@ from __future__ import annotations -from typing import List, Sequence +from typing import List, Sequence, Any from enum import Enum, auto from dataclasses import dataclass, replace, asdict, InitVar from argparse import ArgumentParser +from os import path + +import importlib from jinja2.filters import do_indent @@ -60,6 +63,9 @@ class SfgConfiguration: output_directory: str = None """Directory to which the generated files should be written.""" + project_info: Any = None + """Object for managing project-specific information. To be set by the configurator script.""" + def __post_init__(self, cfg_src: SfgConfigSource = None): if self.header_only: raise SfgConfigException(cfg_src, "Header-only code generation is not implemented yet.") @@ -88,7 +94,21 @@ DEFAULT_CONFIG = SfgConfiguration( def run_configurator(configurator_script: str): - raise NotImplementedError() + if not path.exists(configurator_script): + raise SfgConfigException(SfgConfigSource.PROJECT, + f"Configurator script not found: {configurator_script} is not a file.") + + cfg_spec = importlib.util.spec_from_file_location(configurator_script) + configurator = importlib.util.module_from_spec(cfg_spec) + + if not hasattr(project_config, "sfg_config"): + raise SfgConfigException(SfgConfigSource.PROJECT, "Project configurator does not define function `sfg_config`.") + + project_config = configurator.sfg_config() + if not isinstance(project_config, SfgConfiguration): + raise SfgConfigException(SfgConfigSource.PROJECT, "sfg_config did not return a SfgConfiguration object.") + + return project_config def add_config_args_to_parser(parser: ArgumentParser): -- GitLab