From cceda8c9101d454f6a737d0fc48ad7024097238c Mon Sep 17 00:00:00 2001 From: joeydelarago Date: Thu, 11 Aug 2022 16:42:06 +0200 Subject: [PATCH] Refactor PyCharmRunEnv to use templates stored in the conan package. A little clean up to make the code more readable. --- generators/PyCharmRunEnv.py | 69 +++++++++++++------------------------ 1 file changed, 24 insertions(+), 45 deletions(-) diff --git a/generators/PyCharmRunEnv.py b/generators/PyCharmRunEnv.py index 5b4e97b..14f5570 100644 --- a/generators/PyCharmRunEnv.py +++ b/generators/PyCharmRunEnv.py @@ -1,39 +1,12 @@ from pathlib import Path - -from jinja2 import Template +from typing import Dict from conans import tools -from conan.tools.env import VirtualRunEnv from conans.model import Generator - +from jinja2 import Template +from conan.tools.env.virtualrunenv import VirtualRunEnv class PyCharmRunEnv(Generator): - run_xml = Template(r""" - - - - """) - @property def _base_dir(self): return Path("$PROJECT_DIR$", "venv") @@ -57,9 +30,16 @@ class PyCharmRunEnv(Generator): pass @property - def content(self): - run_env = VirtualRunEnv(self.conanfile) - env = run_env.environment() + def content(self) -> Dict[str, str]: + # Mapping of file names -> files + run_configurations: Dict[str, str] = {} + + if not hasattr(self.conanfile, "_pycharm_targets"): + # There are no _pycharm_targets in the conanfile for the package using this generator. + return run_configurations + + # Collect environment variables for use in the template + env = VirtualRunEnv(self.conanfile).environment() env.prepend_path("PYTHONPATH", str(self._site_packages)) if hasattr(self.conanfile, f"_{self.conanfile.name}_run_env"): @@ -67,17 +47,16 @@ class PyCharmRunEnv(Generator): if project_run_env: env.compose_env(project_run_env) # TODO: Add logic for dependencies - envvars = env.vars(self.conanfile, scope = "run") - - pycharm_targets = {} - if hasattr(self.conanfile, "_pycharm_targets"): - for target in self.conanfile._pycharm_targets: - kwarg = target - kwarg["envvars"] = envvars - kwarg["sdk_path"] = str(self._py_interp) - if "parameters" not in kwarg: - kwarg["parameters"] = "" + # Create Pycharm run configuration from template for each target + for target in self.conanfile._pycharm_targets: + target["env_vars"] = env.vars(self.conanfile, scope="run") + target["sdk_path"] = str(self._py_interp) + if "parameters" not in target: + target["parameters"] = "" - pycharm_targets[str(Path(self.conanfile.source_folder).joinpath(".run", f"{kwarg['name']}.run.xml"))] = self.run_xml.render(**kwarg) + with open(target["jinja_path"], "r") as f: + template = Template(f.read()) + run_configuration = template.render(target) + run_configurations[str(Path(self.conanfile.source_folder).joinpath(".run", f"{target['name']}.run.xml"))] = run_configuration - return pycharm_targets + return run_configurations