Browse Source

Merge pull request #4 from Ultimaker/CURA-8792_update_pycharm_run_config_generator

[CURA-8792] Refactor PyCharmRunEnv to use templates stored in the conan package.
pull/6/head
Jelle Spijker 4 years ago committed by GitHub
parent
commit
16b5b1cb99
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 69
      generators/PyCharmRunEnv.py

69
generators/PyCharmRunEnv.py

@ -1,39 +1,12 @@
from pathlib import Path from pathlib import Path
from typing import Dict
from jinja2 import Template
from conans import tools from conans import tools
from conan.tools.env import VirtualRunEnv
from conans.model import Generator from conans.model import Generator
from jinja2 import Template
from conan.tools.env.virtualrunenv import VirtualRunEnv
class PyCharmRunEnv(Generator): class PyCharmRunEnv(Generator):
run_xml = Template(r"""<component name="ProjectRunConfigurationManager">
<configuration default="false" name="{{ name }}" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
<module name="{{ module_name }}" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />{% for key, value in envvars.items() %}
<env name="{{ key }}" value="{{ value }}" />{% endfor %}
</envs>
<option name="SDK_HOME" value="{{ sdk_path }}" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/{{ script_name }}" />
<option name="PARAMETERS" value="{{ parameters }}" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component> """)
@property @property
def _base_dir(self): def _base_dir(self):
return Path("$PROJECT_DIR$", "venv") return Path("$PROJECT_DIR$", "venv")
@ -57,9 +30,16 @@ class PyCharmRunEnv(Generator):
pass pass
@property @property
def content(self): def content(self) -> Dict[str, str]:
run_env = VirtualRunEnv(self.conanfile) # Mapping of file names -> files
env = run_env.environment() 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)) env.prepend_path("PYTHONPATH", str(self._site_packages))
if hasattr(self.conanfile, f"_{self.conanfile.name}_run_env"): if hasattr(self.conanfile, f"_{self.conanfile.name}_run_env"):
@ -67,17 +47,16 @@ class PyCharmRunEnv(Generator):
if project_run_env: if project_run_env:
env.compose_env(project_run_env) # TODO: Add logic for dependencies env.compose_env(project_run_env) # TODO: Add logic for dependencies
envvars = env.vars(self.conanfile, scope = "run") # Create Pycharm run configuration from template for each target
for target in self.conanfile._pycharm_targets:
pycharm_targets = {} target["env_vars"] = env.vars(self.conanfile, scope="run")
if hasattr(self.conanfile, "_pycharm_targets"): target["sdk_path"] = str(self._py_interp)
for target in self.conanfile._pycharm_targets: if "parameters" not in target:
kwarg = target target["parameters"] = ""
kwarg["envvars"] = envvars
kwarg["sdk_path"] = str(self._py_interp)
if "parameters" not in kwarg:
kwarg["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

Loading…
Cancel
Save