function _initialize_session_info
Initializes and manages session information for a web application session, tracking session lifecycle timestamps and user agent data while maintaining a configurable history limit.
/tf/active/vicechatdev/patches/server.py
114 - 132
moderate
Purpose
This function is responsible for creating and storing session metadata when a new session is started in a Panel/Bokeh web application. It tracks session lifecycle events (launched, started, rendered, ended), maintains a rolling history of sessions based on configuration limits, and stores user agent information for analytics. The function implements a session history management system that prevents unlimited memory growth by maintaining only the most recent N sessions as configured.
Source Code
def _initialize_session_info(session_context):
from ..config import config
session_id = session_context.id
sessions = state.session_info['sessions']
if config.session_history == 0 or session_id in sessions:
return
state.session_info['total'] += 1
if config.session_history > 0 and len(sessions) >= config.session_history:
old_history = list(sessions.items())
sessions = OrderedDict(old_history[-(config.session_history-1):])
state.session_info['sessions'] = sessions
sessions[session_id] = {
'launched': dt.datetime.now().timestamp(),
'started': None,
'rendered': None,
'ended': None,
'user_agent': session_context.request.headers.get('User-Agent')
}
Parameters
| Name | Type | Default | Kind |
|---|---|---|---|
session_context |
- | - | positional_or_keyword |
Parameter Details
session_context: A Bokeh session context object that contains session identification (id attribute) and request information (request.headers). This object is typically provided by the Bokeh server framework and represents the current user session being initialized.
Return Value
This function returns None (implicitly). It operates by side effects, modifying the global 'state.session_info' dictionary to add or update session tracking information.
Dependencies
datetimecollectionsparambokeh
Required Imports
import datetime as dt
from collections import OrderedDict
Conditional/Optional Imports
These imports are only needed under specific conditions:
from ..config import config
Condition: Required to access session_history configuration setting
Required (conditional)from state import state
Condition: Required to access and modify the global session_info state dictionary
Required (conditional)Usage Example
# Assuming Panel/Bokeh application context
from collections import OrderedDict
import datetime as dt
# Mock setup (normally provided by framework)
class MockRequest:
def __init__(self):
self.headers = {'User-Agent': 'Mozilla/5.0'}
class MockSessionContext:
def __init__(self, session_id):
self.id = session_id
self.request = MockRequest()
# Initialize state (normally done by framework)
class State:
session_info = {
'total': 0,
'sessions': OrderedDict()
}
class Config:
session_history = 10
state = State()
config = Config()
# Create a session context
session_context = MockSessionContext('session-123')
# Initialize session info
_initialize_session_info(session_context)
# Check result
print(state.session_info['total']) # 1
print('session-123' in state.session_info['sessions']) # True
print(state.session_info['sessions']['session-123']['user_agent']) # 'Mozilla/5.0'
Best Practices
- Ensure state.session_info is properly initialized with 'total' and 'sessions' keys before calling this function
- Configure config.session_history appropriately to prevent memory issues: use 0 to disable tracking, positive numbers for limited history, or -1 for unlimited (use with caution)
- This function should be called early in the session lifecycle, before any session activity tracking begins
- The function is idempotent for existing sessions - it will not reinitialize if session_id already exists in sessions
- The OrderedDict is used to maintain insertion order for proper history trimming based on age
- When session_history limit is reached, the oldest sessions are removed to maintain the configured limit
- User agent tracking can be useful for analytics but may contain PII - handle according to privacy requirements
Tags
Similar Components
AI-powered semantic similarity - components with related functionality:
-
function init_doc 73.0% similar
-
class SessionManager 64.3% similar
-
class _state 61.8% similar
-
class Application 61.4% similar
-
function server_html_page_for_session 58.9% similar