Source code for framework.context.base

"""
Pydantic-based Context Base Classes

Clean, production-ready context system using Pydantic for automatic serialization,
validation, and type safety. Eliminates complex custom serialization logic.
"""

import logging
from abc import ABC, abstractmethod
from datetime import datetime
from typing import ClassVar

from pydantic import BaseModel

logger = logging.getLogger(__name__)


[docs] class CapabilityContext(BaseModel): """ Base class for all capability context objects. Uses Pydantic for automatic serialization/deserialization and type validation. This class provides: - Automatic JSON serialization via .model_dump() - Automatic deserialization via .model_validate() - Type validation on field assignment - Consistent interface for all context types """ model_config = { # Enforce JSON-compatible types only (no complex Python objects) "arbitrary_types_allowed": False, # Allow field names for compatibility "populate_by_name": True, # Use enum values for serialization "use_enum_values": True, # JSON encoders for specific types (Pydantic v2 syntax) "json_encoders": { datetime: lambda v: v.isoformat(), } } # Class constants - using ClassVar to exclude from model fields CONTEXT_TYPE: ClassVar[str] = "" CONTEXT_CATEGORY: ClassVar[str] = "" @property def context_type(self) -> str: """Return the context type identifier""" return self.CONTEXT_TYPE
[docs] @abstractmethod def get_access_details(self, key: str) -> dict: """ Get detailed access information for this context data. Args: key: The context key this data is stored under Returns: Dictionary with access details including summary, capabilities, etc. """ pass
[docs] @abstractmethod def get_human_summary(self, key: str) -> dict: """ Get a human-readable summary of this context data. Args: key: The context key this data is stored under Returns: Dictionary with human-readable information about the context """ pass