# This is set to True inside cli._main_run(), and is False otherwise. # If False, we should assume that DeltaGenerator functions are effectively # no-ops, and adapt gracefully. _is_running_with_streamlit = False def _set_log_level(): _logger.set_log_level(_config.get_option("global.logLevel").upper()) _logger.init_tornado_logs() # Make this file only depend on config option in an asynchronous manner. This # avoids a race condition when another file (such as a test file) tries to pass # in an alternative config. _config.on_config_parsed(_set_log_level) def _with_dg(method): @_functools_wraps(method) def wrapped_method(*args, **kwargs): ctx = _get_report_ctx() dg = ctx.main_dg if ctx is not None else _NULL_DELTA_GENERATOR return method.__get__(dg)(*args, **kwargs) return wrapped_method def _reset(main_dg, sidebar_dg): main_dg._reset() sidebar_dg._reset()
# This is set to True inside cli._main_run(), and is False otherwise. # If False, we should assume that DeltaGenerator functions are effectively # no-ops, and adapt gracefully. _is_running_with_streamlit = False def _update_logger(): _logger.set_log_level(_config.get_option("logger.level").upper()) _logger.update_formatter() _logger.init_tornado_logs() # Make this file only depend on config option in an asynchronous manner. This # avoids a race condition when another file (such as a test file) tries to pass # in an alternative config. _config.on_config_parsed(_update_logger, True) _main = _DeltaGenerator(root_container=RootContainer.MAIN) sidebar = _DeltaGenerator(root_container=RootContainer.SIDEBAR, parent=_main) secrets = Secrets(SECRETS_FILE_LOC) # DeltaGenerator methods: altair_chart = _main.altair_chart area_chart = _main.area_chart audio = _main.audio balloons = _main.balloons bar_chart = _main.bar_chart bokeh_chart = _main.bokeh_chart button = _main.button
def __init__( self, ioloop: tornado.ioloop.IOLoop, session_data: SessionData, uploaded_file_manager: UploadedFileManager, message_enqueued_callback: Optional[Callable[[], None]], local_sources_watcher: LocalSourcesWatcher, ): """Initialize the AppSession. Parameters ---------- ioloop : tornado.ioloop.IOLoop The Tornado IOLoop that we're running within. session_data : SessionData Object storing parameters related to running a script uploaded_file_manager : UploadedFileManager The server's UploadedFileManager. message_enqueued_callback : Callable[[], None] After enqueuing a message, this callable notification will be invoked. local_sources_watcher: LocalSourcesWatcher The file watcher that lets the session know local files have changed. """ # Each AppSession has a unique string ID. self.id = str(uuid.uuid4()) self._ioloop = ioloop self._session_data = session_data self._uploaded_file_mgr = uploaded_file_manager self._message_enqueued_callback = message_enqueued_callback self._state = AppSessionState.APP_NOT_RUNNING # Need to remember the client state here because when a script reruns # due to the source code changing we need to pass in the previous client state. self._client_state = ClientState() self._local_sources_watcher = local_sources_watcher self._local_sources_watcher.register_file_change_callback( self._on_source_file_changed) self._stop_config_listener = config.on_config_parsed( self._on_source_file_changed, force_connect=True) # The script should rerun when the `secrets.toml` file has been changed. secrets._file_change_listener.connect(self._on_secrets_file_changed) self._run_on_save = config.get_option("server.runOnSave") self._scriptrunner: Optional[ScriptRunner] = None # This needs to be lazily imported to avoid a dependency cycle. from streamlit.state import SessionState self._session_state = SessionState() LOGGER.debug("AppSession initialized (id=%s)", self.id)