Ejemplo n.º 1
0
def setup_usage_logfile(session_id=None):
    """Sets up the usage logging default config and environment values."""

    if not session_id:
        session_id = get_session_uuid()

    # default file path and name for usage logging
    filelogging_filename = FILE_LOG_FILENAME_TEMPLATE \
        .format(PYREVIT_FILE_PREFIX, session_id, FILE_LOG_EXT)

    # default server url for usage logging
    usagelog_serverurl = ''

    # initialize env variables related to usage logging
    _init_usagelogging_envvars()

    # setup config section if does not exist
    if not user_config.has_section('usagelogging'):
        user_config.add_section('usagelogging')

    # GLOBAL SWITCH ------------------------------------------------------------
    # setup default value for usage logging global switch
    ul_config = user_config.usagelogging
    usageloggingactive = ul_config.get_option('active', default_value=False)
    set_pyrevit_env_var(USAGELOG_STATE_ISC_KEYNAME, usageloggingactive)

    # FILE usage logging -------------------------------------------------------
    # read or setup default values for file usage logging
    logfilepath = ul_config.get_option('logfilepath',
                                       default_value=PYREVIT_VERSION_APP_DIR)

    # check file usage logging config and setup destination
    if not logfilepath or is_blank(logfilepath):
        # if no config is provided, disable output
        _disable_file_usage_logging()
    else:
        # if config exists, create new usage log file under the same address
        if op.isdir(logfilepath):
            # if directory is valid
            logfile_fullpath = op.join(logfilepath, filelogging_filename)
            _setup_default_logfile(logfile_fullpath)
        else:
            # if not, show error and disable usage logging
            if usageloggingactive:
                logger.error('Provided usage log address does not exits or is '
                             'not a directory. Usage logging disabled.')
            _disable_usage_logging()

    # SERVER usage logging -----------------------------------------------------
    # read or setup default values for server usage logging
    logserverurl = ul_config.get_option('logserverurl',
                                        default_value=usagelog_serverurl)

    # check server usage logging config and setup destination
    if not logserverurl or is_blank(logserverurl):
        # if no config is provided, disable output
        _disable_server_usage_logging()
    else:
        # if config exists, setup server logging
        set_pyrevit_env_var(USAGELOG_SERVERURL_ISC_KEYNAME, logserverurl)
Ejemplo n.º 2
0
def set_file_logging(status):
    """Set file logging status (enable/disable).

    Args:
        status (bool): True to enable, False to disable
    """
    envvars.set_pyrevit_env_var(envvars.FILELOGGING_ENVVAR, status)
Ejemplo n.º 3
0
def set_stylesheet(stylesheet):
    """Set active css stylesheet used by output window.

    Args:
        stylesheet (str): full path to stylesheet file
    """
    envvars.set_pyrevit_env_var(EnvDictionaryKeys.outputStyleSheet, stylesheet)
Ejemplo n.º 4
0
def set_session_uuid(uuid_str):
    """Set session uuid on environment variable.

    Args:
        uuid_str (str): session uuid string
    """
    envvars.set_pyrevit_env_var(PYREVIT_SESSIONUUID_ENVVAR, uuid_str)
Ejemplo n.º 5
0
def init_doc_colorizer(usercfg):
    """Initialize document colorizer from settings"""
    uiapp = HOST_APP.uiapp
    if HOST_APP.is_newer_than(2018):
        current_tabcolorizer = \
            envvars.get_pyrevit_env_var(envvars.TABCOLORIZER_ENVVAR)

        new_theme = get_tabcoloring_theme(usercfg)

        # cancel out the colorizer from previous runtime version
        if current_tabcolorizer:
            # TODO: adopt the previous slots state
            # prev_theme = current_tabcolorizer.TabColoringTheme
            # if prev_theme:
            #     new_theme.InitSlots(prev_theme)
            current_tabcolorizer.StopGroupingDocumentTabs()

        # start or stop the document colorizer
        types.DocumentTabEventUtils.TabColoringTheme = new_theme
        if usercfg.colorize_docs:
            types.DocumentTabEventUtils.StartGroupingDocumentTabs(uiapp)
        else:
            types.DocumentTabEventUtils.StopGroupingDocumentTabs()

        # set the new colorizer
        envvars.set_pyrevit_env_var(envvars.TABCOLORIZER_ENVVAR,
                                    types.DocumentTabEventUtils)
Ejemplo n.º 6
0
def set_loaded_pyrevit_assemblies(loaded_assm_name_list):
    envvars.set_pyrevit_env_var(
        PYREVIT_LOADEDASSMS_ENVVAR,
        coreutils.DEFAULT_SEPARATOR.join(loaded_assm_name_list))

    set_total_loaded_assm_count(get_total_loaded_assm_count() +
                                len(loaded_assm_name_list))
Ejemplo n.º 7
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)
Ejemplo n.º 8
0
def set_stylesheet(stylesheet):
    """Set active css stylesheet used by output window.

    Args:
        stylesheet (str): full path to stylesheet file
    """
    if op.isfile(stylesheet):
        envvars.set_pyrevit_env_var(envvars.OUTPUT_STYLESHEET_ENVVAR,
                                    stylesheet)
Ejemplo n.º 9
0
def set_loaded_pyrevit_assemblies(loaded_assm_name_list):
    """Set the environment variable with list of loaded assemblies.

    Args:
        loaded_assm_name_list (list[str]): list of assembly names
        val (type): desc
    """
    envvars.set_pyrevit_env_var(
        envvars.LOADEDASSMS_ENVVAR,
        coreutils.DEFAULT_SEPARATOR.join(loaded_assm_name_list))
Ejemplo n.º 10
0
def deactivate_server():
    """Deactivate the active routes server for this host instance"""
    routes_server = envvars.get_pyrevit_env_var(envvars.ROUTES_SERVER)
    if routes_server:
        try:
            routes_server.stop()
            envvars.set_pyrevit_env_var(envvars.ROUTES_SERVER, None)
            serverinfo.unregister()
        except Exception as rs_ex:
            mlogger.error("Error stopping Routes server | %s", str(rs_ex))
Ejemplo n.º 11
0
def get_pyrevit_version():
    try:
        pyrvt_ver = PyRevitVersion(get_pyrevit_repo().last_commit_hash)
    except Exception as ver_err:
        logger.error('Can not get pyRevit patch number. | {}'.format(ver_err))
        pyrvt_ver = PyRevitVersion('?')

    envvars.set_pyrevit_env_var(PYREVIT_VERSION_ENVVAR,
                                pyrvt_ver.get_formatted())

    return pyrvt_ver
Ejemplo n.º 12
0
def set_total_loaded_assm_count(assm_count):
    """Sets the total number of pyRevit assemblies loaded under current
    Revit session. This value is stored in an environment variable and is kept
    updated during the multiple pyRevit sessions.

    This value should not be updated by pyRevit users.

    Args:
        assm_count (int): assembly count
    """
    envvars.set_pyrevit_env_var(PYREVIT_LOADEDASSMCOUNT_ENVVAR, assm_count)
Ejemplo n.º 13
0
def _setup_default_logfile(usagelog_fullfilepath):
    # setup default usage logging file name
    set_pyrevit_env_var(USAGELOG_FILEPATH_ISC_KEYNAME, usagelog_fullfilepath)
    if not op.exists(usagelog_fullfilepath):
        # if file does not exist, let's write the basic JSON list to it.
        try:
            with open(usagelog_fullfilepath, 'w') as log_file:
                log_file.write('[]')
        except Exception as write_err:
            logger.error('Usage logging is active but log file location '
                         'is not accessible. | {}'.format(write_err))
            _disable_usage_logging()
Ejemplo n.º 14
0
def set_total_loaded_assm_count(assm_count):
    """Sets the total number of pyRevit assemblies loaded under current
    Revit session. This value is stored in an environment variable and is kept
    updated during the multiple pyRevit sessions.

    This value should not be updated by pyRevit users.

    Args:
        assm_count (int): Number of loaded assemblies
    """

    set_pyrevit_env_var(LOADEDASSM_COUNT_ISC_KEYNAME, assm_count)
Ejemplo n.º 15
0
def _setup_default_logfile(usagelog_fullfilepath):
    # setup default usage logging file name
    envvars.set_pyrevit_env_var(PYREVIT_USAGELOGFILE_ENVVAR,
                                usagelog_fullfilepath)
    if not op.exists(usagelog_fullfilepath):
        # if file does not exist, let's write the basic JSON list to it.
        try:
            with open(usagelog_fullfilepath, 'w') as log_file:
                log_file.write('[]')
        except Exception as write_err:
            mlogger.error(
                'Usage logging is active but log file location '
                'is not accessible. | %s', write_err)
            _disable_usage_logging()
Ejemplo n.º 16
0
def activate_server():
    """Activate routes server for this host instance"""
    routes_server = envvars.get_pyrevit_env_var(envvars.ROUTES_SERVER)
    if not routes_server:
        try:
            rsinfo = serverinfo.register()
            routes_server = \
                server.RoutesServer(
                    host=rsinfo.server_host,
                    port=rsinfo.server_port
                    )
            routes_server.start()
            envvars.set_pyrevit_env_var(envvars.ROUTES_SERVER, routes_server)
            return routes_server
        except Exception as rs_ex:
            serverinfo.unregister()
            mlogger.error("Error starting Routes server | %s", str(rs_ex))
Ejemplo n.º 17
0
def toggle_doc_colorizer(state):
    uiapp = HOST_APP.uiapp
    if HOST_APP.is_newer_than(2018):
        # cancel out the colorizer from previous runtime version
        current_tabcolorizer = \
            envvars.get_pyrevit_env_var(envvars.TABCOLORIZER_ENVVAR)
        if current_tabcolorizer:
            current_tabcolorizer.StopGroupingDocumentTabs()

        # start or stop the document colorizer
        if state:
            types.DocumentTabEventUtils.StartGroupingDocumentTabs(uiapp)
        else:
            types.DocumentTabEventUtils.StopGroupingDocumentTabs()

        # set the new colorizer
        envvars.set_pyrevit_env_var(envvars.TABCOLORIZER_ENVVAR,
                                    types.DocumentTabEventUtils)
Ejemplo n.º 18
0
def get_routes(api_name):
    """Get all registered routes for given API name

    Args:
        api_name (str): unique name of the api
    """
    if api_name is None:
        raise Exception("API name can not be None.")

    routes_map = envvars.get_pyrevit_env_var(envvars.ROUTES_ROUTES)
    if routes_map is None:
        routes_map = {}
        envvars.set_pyrevit_env_var(envvars.ROUTES_ROUTES, routes_map)

    if api_name in routes_map:
        return routes_map[api_name]
    else:
        app_routes = {}
        routes_map[api_name] = app_routes
        return app_routes
Ejemplo n.º 19
0
def set_envvar(envvar, value):
    """Set value of give pyRevit environment variable.

    The environment variable system is used to retain small values in memory
    between script runs (e.g. active/inactive state for toggle tools). Do not
    store large objects in memory using this method. List of currently set
    environment variables could be sees in pyRevit settings window.

    Args:
        envvar (str): name of environment variable
        value (any): value of environment variable

    Example:
        >>> script.set_envvar('ToolActiveState', False)
        >>> script.get_envvar('ToolActiveState')
        False
    """
    return envvars.set_pyrevit_env_var(envvar, value)
Ejemplo n.º 20
0
 def _reset_logger_env_vars(verbose=False, debug=False):
     set_pyrevit_env_var(VERBOSE_ISC_NAME, verbose)
     set_pyrevit_env_var(DEBUG_ISC_NAME, debug)
Ejemplo n.º 21
0
def set_session_uuid(uuid_str):
    envvars.set_pyrevit_env_var(PYREVIT_SESSIONUUID_ENVVAR, uuid_str)
Ejemplo n.º 22
0
def _set_autoupdate_inprogress(state):
    envvars.set_pyrevit_env_var(envvars.AUTOUPDATING_ENVVAR, state)
Ejemplo n.º 23
0
def reset_stylesheet():
    """Reset active stylesheet to default."""
    envvars.set_pyrevit_env_var(envvars.OUTPUT_STYLESHEET_ENVVAR,
                                get_default_stylesheet())
Ejemplo n.º 24
0
def set_telemetry_server_url(server_url):
    envvars.set_pyrevit_env_var(envvars.TELEMETRYSERVER_ENVVAR, server_url)
    user_config.telemetry_server_url = server_url
Ejemplo n.º 25
0
def set_telemetry_include_hooks(state):
    envvars.set_pyrevit_env_var(envvars.TELEMETRYINCLUDEHOOKS_ENVVAR, state)
    user_config.telemetry_include_hooks = state
Ejemplo n.º 26
0
def set_telemetry_file_path(file_path):
    envvars.set_pyrevit_env_var(envvars.TELEMETRYFILE_ENVVAR, file_path)
Ejemplo n.º 27
0
def set_telemetry_file_dir(file_dir):
    if not file_dir or not op.isdir(file_dir):
        disable_telemetry_to_file()
    envvars.set_pyrevit_env_var(envvars.TELEMETRYDIR_ENVVAR, file_dir)
    user_config.telemetry_file_dir = file_dir
Ejemplo n.º 28
0
def set_telemetry_utc_timestamp(state):
    envvars.set_pyrevit_env_var(envvars.TELEMETRYUTCTIMESTAMPS_ENVVAR, state)
    user_config.telemetry_utc_timestamp = state
Ejemplo n.º 29
0
def set_telemetry_state(state):
    envvars.set_pyrevit_env_var(envvars.TELEMETRYSTATE_ENVVAR, state)
    user_config.telemetry_status = state
Ejemplo n.º 30
0
def set_apptelemetry_event_flags(event_flags):
    flags_hex = coreutils.int2hex_long(event_flags)
    user_config.apptelemetry_event_flags = flags_hex
    envvars.set_pyrevit_env_var(envvars.APPTELEMETRYEVENTFLAGS_ENVVAR,
                                flags_hex)