From 02d955931945baf93bc59397cf0b480c12e038f0 Mon Sep 17 00:00:00 2001 From: Franciszek Zdobylak Date: Wed, 14 Feb 2024 08:37:59 +0100 Subject: [PATCH] [#54111] Create module with env variables used by pyrenode3 Signed-off-by: Franciszek Zdobylak --- src/pyrenode3/__init__.py | 27 ++++++++++++++------------- src/pyrenode3/env.py | 15 +++++++++++++++ src/pyrenode3/loader.py | 8 ++++---- 3 files changed, 33 insertions(+), 17 deletions(-) create mode 100644 src/pyrenode3/env.py diff --git a/src/pyrenode3/__init__.py b/src/pyrenode3/__init__.py index 5d6db5e..1ab9a2d 100644 --- a/src/pyrenode3/__init__.py +++ b/src/pyrenode3/__init__.py @@ -1,38 +1,39 @@ import importlib import logging -import os from pyrenode3.loader import RenodeLoader +from pyrenode3 import env -if "PYRENODE_SKIP_LOAD" not in os.environ: - runtime = os.environ.get("PYRENODE_RUNTIME", "mono") + +if not env.pyrenode_skip_load: + runtime = env.pyrenode_runtime if runtime not in ["mono", "coreclr"]: raise ImportError(f"Runtime '{runtime}' not supported") - if os.environ.get("PYRENODE_PKG") and os.environ.get("PYRENODE_BUILD_DIR"): + if env.pyrenode_pkg and env.pyrenode_build_dir: raise ImportError( - "Both PYRENODE_PKG and PYRENODE_BUILD_DIR are set. Please unset one of them." + f"Both {env.PYRENODE_PKG} and {env.PYRENODE_BUILD_DIR} are set. " + "Please unset one of them." ) - if package := os.environ.get("PYRENODE_PKG"): + if env.pyrenode_pkg: if runtime == "mono": - RenodeLoader.from_mono_arch_pkg(package) + RenodeLoader.from_mono_arch_pkg(env.pyrenode_pkg) elif runtime == "coreclr": raise ImportError("Using dotnet package is not supported.") - elif build_dir := os.environ.get("PYRENODE_BUILD_DIR"): + elif env.pyrenode_build_dir: if runtime == "mono": logging.warning("Using mono with Renode built from sources might not work correctly.") - RenodeLoader.from_mono_build(build_dir) + RenodeLoader.from_mono_build(env.pyrenode_build_dir) elif runtime == "coreclr": - RenodeLoader.from_net_build(build_dir) + RenodeLoader.from_net_build(env.pyrenode_build_dir) if not RenodeLoader().is_initialized: msg = ( - "Renode not found. Please set PYRENODE_ARCH_PKG to the location of Renode Arch package." - "Set PYRENODE_PKG to the location of Renode package or PYRENODE_BUILD_DIR to the" - "location of Renode build directory." + f"Renode not found. Please set {env.PYRENODE_PKG} to the location of Renode package or " + f"{env.PYRENODE_BUILD_DIR} to the location of Renode build directory." ) raise ImportError(msg) diff --git a/src/pyrenode3/env.py b/src/pyrenode3/env.py new file mode 100644 index 0000000..38d9591 --- /dev/null +++ b/src/pyrenode3/env.py @@ -0,0 +1,15 @@ +import os + +# Env variable names +PYRENODE_BUILD_DIR = "PYRENODE_BUILD_DIR" +PYRENODE_BUILD_OUTPUT = "PYRENODE_BUILD_OUTPUT" +PYRENODE_PKG = "PYRENODE_PKG" +PYRENODE_RUNTIME = "PYRENODE_RUNTIME" +PYRENODE_SKIP_LOAD = "PYRENODE_SKIP_LOAD" + +# Values of env variables +pyrenode_build_dir = os.environ.get(PYRENODE_BUILD_DIR) +pyrenode_build_output = os.environ.get(PYRENODE_BUILD_OUTPUT) +pyrenode_pkg = os.environ.get(PYRENODE_PKG) +pyrenode_runtime = os.environ.get(PYRENODE_RUNTIME, "mono") +pyrenode_skip_load = os.environ.get(PYRENODE_SKIP_LOAD) diff --git a/src/pyrenode3/loader.py b/src/pyrenode3/loader.py index e4a5ba7..3f5eb46 100644 --- a/src/pyrenode3/loader.py +++ b/src/pyrenode3/loader.py @@ -10,6 +10,7 @@ from pythonnet import load as pythonnet_load +from pyrenode3 import env from pyrenode3.singleton import MetaSingleton @@ -71,9 +72,8 @@ def from_mono_arch_pkg(cls, path: "Union[str, pathlib.Path]"): @staticmethod def discover_bin_dir(renode_dir, runtime): - if "PYRENODE_BUILD_OUTPUT" in os.environ: - build_out = os.environ["PYRENODE_BUILD_OUTPUT"] - renode_build_dir = renode_dir / build_out + if env.pyrenode_build_output: + renode_build_dir = renode_dir / env.pyrenode_build_output if not renode_build_dir.exists(): logging.critical(f"{renode_build_dir} doesn't exist.") @@ -89,7 +89,7 @@ def discover_bin_dir(renode_dir, runtime): logging.critical( f"Can't determine Renode directory using the '{renode_dir / default}' pattern. " f"Please specify its path (relative to {renode_dir}) in the " - "PYRENODE_BUILD_OUTPUT variable." + f"{env.PYRENODE_BUILD_OUTPUT} variable." ) sys.exit(1)