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)
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)
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)
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)
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)
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))
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 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)
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))
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))
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
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)
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()
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)
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()
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))
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)
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
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)
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)
def set_session_uuid(uuid_str): envvars.set_pyrevit_env_var(PYREVIT_SESSIONUUID_ENVVAR, uuid_str)
def _set_autoupdate_inprogress(state): envvars.set_pyrevit_env_var(envvars.AUTOUPDATING_ENVVAR, state)
def reset_stylesheet(): """Reset active stylesheet to default.""" envvars.set_pyrevit_env_var(envvars.OUTPUT_STYLESHEET_ENVVAR, get_default_stylesheet())
def set_telemetry_server_url(server_url): envvars.set_pyrevit_env_var(envvars.TELEMETRYSERVER_ENVVAR, server_url) user_config.telemetry_server_url = server_url
def set_telemetry_include_hooks(state): envvars.set_pyrevit_env_var(envvars.TELEMETRYINCLUDEHOOKS_ENVVAR, state) user_config.telemetry_include_hooks = state
def set_telemetry_file_path(file_path): envvars.set_pyrevit_env_var(envvars.TELEMETRYFILE_ENVVAR, file_path)
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
def set_telemetry_utc_timestamp(state): envvars.set_pyrevit_env_var(envvars.TELEMETRYUTCTIMESTAMPS_ENVVAR, state) user_config.telemetry_utc_timestamp = state
def set_telemetry_state(state): envvars.set_pyrevit_env_var(envvars.TELEMETRYSTATE_ENVVAR, state) user_config.telemetry_status = state
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)