Esempio n. 1
0
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)
Esempio n. 2
0
    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
Esempio n. 3
0
    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)
Esempio n. 4
0
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())
Esempio n. 5
0
# 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)
Esempio n. 6
0
"""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()