🔍 Code Extractor

function _initialize_session_info

Maturity: 34

Initializes and manages session information for a web application session, tracking session lifecycle timestamps and user agent data while maintaining a configurable history limit.

File:
/tf/active/vicechatdev/patches/server.py
Lines:
114 - 132
Complexity:
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

  • datetime
  • collections
  • param
  • bokeh

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

Similar Components

AI-powered semantic similarity - components with related functionality:

  • function init_doc 73.0% similar

    Initializes a Bokeh document by registering session information and setting up document lifecycle event handlers for Panel applications.

    From: /tf/active/vicechatdev/patches/server.py
  • class SessionManager 64.3% similar

    A session management class for Panel applications that provides user authentication and arbitrary key-value storage using Panel's built-in state management system.

    From: /tf/active/vicechatdev/CDocs/auth/session_manager.py
  • class _state 61.8% similar

    A global state management class that tracks and manages the state of running Panel applications, including server information, session data, busy status, and various application-level resources.

    From: /tf/active/vicechatdev/patches/state.py
  • class Application 61.4% similar

    A custom Bokeh Application subclass that extends BkApplication to integrate with Panel's state management system, handling session creation callbacks and document initialization with templates.

    From: /tf/active/vicechatdev/patches/server.py
  • function server_html_page_for_session 58.9% similar

    Generates a complete HTML page for a Bokeh server session by bundling resources and rendering document roots with session token.

    From: /tf/active/vicechatdev/patches/server.py
← Back to Browse