def setup_runtime_vars(): """Setup runtime environment variables with session information.""" # set pyrevit version pyrvt_ver = versionmgr.get_pyrevit_version().get_formatted() envvars.set_pyrevit_env_var(PYREVIT_VERSION_ENVVAR, pyrvt_ver) # set app version env var if HOST_APP.is_newer_than(2017): envvars.set_pyrevit_env_var(PYREVIT_APPVERSION_ENVVAR, HOST_APP.subversion) else: envvars.set_pyrevit_env_var(PYREVIT_APPVERSION_ENVVAR, HOST_APP.version) # set ironpython engine version env var attachment = user_config.get_current_attachment() if attachment and attachment.Clone: envvars.set_pyrevit_env_var(PYREVIT_IPYVERSION_ENVVAR, attachment.Engine.Version) # set cpython engine version env var cpyengine = user_config.get_active_cpython_engine() if cpyengine: envvars.set_pyrevit_env_var(PYREVIT_CSPYVERSION_ENVVAR, cpyengine.Version)
def __init__(self, xaml_file_name): forms.WPFWindow.__init__(self, xaml_file_name) pyrvtabout = about.get_pyrevit_about() pyrvt_ver = versionmgr.get_pyrevit_version() nice_version = 'v{}'.format(pyrvt_ver.get_formatted()) short_version = \ ' v{}'.format(pyrvt_ver.get_formatted(nopatch=True)) self.branch_name = self.deployname = None # check to see if git repo is valid try: pyrvt_repo = versionmgr.get_pyrevit_repo() self.branch_name = pyrvt_repo.branch self.show_element(self.git_commit) self.show_element(self.git_branch) except Exception as getbranch_ex: logger.debug('Error getting branch: %s', getbranch_ex) # other wise try to get deployment name attachment = Revit.PyRevit.GetAttached(int(HOST_APP.version)) if attachment: try: self.deployname = attachment.Clone.Deployment.Name self.show_element(self.repo_deploy) except Exception as getdepl_ex: logger.debug('Error getting depoyment: %s', getdepl_ex) # get cli version pyrvt_cli_version = 'v' + versionmgr.get_pyrevit_cli_version() self.show_element(self.cli_info) self.cliversion.Text = pyrvt_cli_version # get cpython engine version self.cpyengine = user_config.get_active_cpython_engine() self.short_version_info.Text = short_version self.pyrevit_subtitle.Text = pyrvtabout.subtitle self.version.Text = nice_version self.pyrevit_branch.Text = self.branch_name self.pyrevit_deploy.Text = '{} deployment'.format(self.deployname) self.pyrevit_engine.Text = \ 'Running on IronPython {} (cpython {})'\ .format(sys.version.split('(')[0].strip(), '.'.join(list(str(self.cpyengine.Version)))) rocketmodetext = \ 'Rocket-mode {}' \ .format('enabled' if __cachedengine__ else 'disabled') self.pyrevit_rmode.Text = rocketmodetext if not __cachedengine__: self.hide_element(self.rmode_icon) self.madein_tb.Text = 'in {}'.format(pyrvtabout.madein) self.copyright_tb.Text = pyrvtabout.copyright
def _setup_engines(self): attachment = user_config.get_current_attachment() if attachment and attachment.Clone: engine_cfgs = \ [PyRevitEngineConfig(x) for x in attachment.Clone.GetEngines()] engine_cfgs = \ sorted(engine_cfgs, key=lambda x: x.engine.Version, reverse=True) # add engines to ui self.availableEngines.ItemsSource = \ [x for x in engine_cfgs if x.engine.Runtime] self.cpythonEngines.ItemsSource = \ [x for x in engine_cfgs if not x.engine.Runtime] # now select the current runtime engine for engine_cfg in self.availableEngines.ItemsSource: if engine_cfg.engine.Version == int(EXEC_PARAMS.engine_ver): self.availableEngines.SelectedItem = engine_cfg break # if addin-file is not writable, lock changing of the engine if attachment.IsReadOnly(): self.availableEngines.IsEnabled = False # now select the current runtime engine self.active_cpyengine = user_config.get_active_cpython_engine() if self.active_cpyengine: for engine_cfg in self.cpythonEngines.ItemsSource: if engine_cfg.engine.Version == \ self.active_cpyengine.Version: self.cpythonEngines.SelectedItem = engine_cfg break else: logger.debug('Failed getting active cpython engine.') self.cpythonEngines.IsEnabled = False else: logger.error('Error determining current attached clone.') self.disable_element(self.availableEngines)
def setup_runtime_vars(): """Setup runtime environment variables with session information.""" # set pyrevit version pyrvt_ver = versionmgr.get_pyrevit_version().get_formatted() envvars.set_pyrevit_env_var(envvars.VERSION_ENVVAR, pyrvt_ver) # set app version env var if HOST_APP.is_newer_than(2017): envvars.set_pyrevit_env_var(envvars.APPVERSION_ENVVAR, HOST_APP.subversion) else: envvars.set_pyrevit_env_var(envvars.APPVERSION_ENVVAR, HOST_APP.version) # set ironpython engine version env var attachment = user_config.get_current_attachment() if attachment and attachment.Clone: envvars.set_pyrevit_env_var(envvars.CLONENAME_ENVVAR, attachment.Clone.Name) envvars.set_pyrevit_env_var(envvars.IPYVERSION_ENVVAR, str(attachment.Engine.Version)) else: mlogger.debug('Can not determine attachment.') envvars.set_pyrevit_env_var(envvars.CLONENAME_ENVVAR, "Unknown") envvars.set_pyrevit_env_var(envvars.IPYVERSION_ENVVAR, "0.0.0") # set cpython engine version env var cpyengine = user_config.get_active_cpython_engine() if cpyengine: envvars.set_pyrevit_env_var(envvars.CPYVERSION_ENVVAR, str(cpyengine.Version)) else: envvars.set_pyrevit_env_var(envvars.CPYVERSION_ENVVAR, "0.0.0") # set a list of important assemblies # this is required for dotnet script execution set_loaded_pyrevit_referenced_modules(runtime.get_references())
# template python command availability class CMD_AVAIL_TYPE_NAME_EXTENDED = \ coreutils.make_canonical_name(RUNTIME_NAMESPACE, 'ScriptCommandExtendedAvail') CMD_AVAIL_TYPE_NAME_SELECTION = \ coreutils.make_canonical_name(RUNTIME_NAMESPACE, 'ScriptCommandSelectionAvail') CMD_AVAIL_TYPE_NAME_ZERODOC = \ coreutils.make_canonical_name(RUNTIME_NAMESPACE, 'ScriptCommandZeroDocAvail') CMD_AVAIL_NAME_POSTFIX = '-avail' SOURCE_FILE_EXT = '.cs' SOURCE_FILE_FILTER = r'(\.cs)' if not EXEC_PARAMS.doc_mode: # get and load the active Cpython engine CPYTHON_ENGINE = user_config.get_active_cpython_engine() if CPYTHON_ENGINE: CPYTHON_ENGINE_ASSM = CPYTHON_ENGINE.AssemblyPath mlogger.debug('Loading cpython engine: %s', CPYTHON_ENGINE_ASSM) assmutils.load_asm_file(CPYTHON_ENGINE_ASSM) else: raise PyRevitException('Can not find cpython engines.') # create a hash for the loader assembly # this hash is calculated based on: # - runtime csharp files # - runtime engine version # - cpython engine version BASE_TYPES_DIR_HASH = \ coreutils.get_str_hash( coreutils.calculate_dir_hash(INTERFACE_TYPES_DIR, '', SOURCE_FILE_FILTER)
"""Test pythonnet integration""" # pylint: skip-file import os import sys import os.path as op __context__ = 'zero-doc' import clr # add path of active pyRevitLabs.PythonNet.dll to the sys.path from pyrevit.userconfig import user_config sys.path.append( op.dirname(user_config.get_active_cpython_engine().AssemblyPath)) print('\n'.join(sys.path)) # now load the cpython assembly # clr.AddReference('pyRevitLabs.PythonNet') clr.AddReferenceToFile('pyRevitLabs.PythonNet.dll') import Python.Runtime as py TEST_CODE = """import sys print('\\n'.join(sys.path)) import System print(System) """ pe = py.PythonEngine if not pe.IsInitialized: pe.Initialize()