|
|
from typing import Dict, Any, List |
|
|
|
|
|
|
|
|
def validate_metadata(metadata: Dict[str, Any], required_keys: List[str] = None) -> bool: |
|
|
""" |
|
|
Ensures metadata contains all required keys. |
|
|
""" |
|
|
if not metadata: |
|
|
return not required_keys |
|
|
|
|
|
if required_keys: |
|
|
missing = [k for k in required_keys if k not in metadata] |
|
|
if missing: |
|
|
raise ValueError(f"Missing required metadata keys: {missing}") |
|
|
|
|
|
return True |
|
|
|
|
|
|
|
|
def validate_context(context: Any) -> bool: |
|
|
""" |
|
|
Ensures MCP context is well-formed. |
|
|
Expects an object with: |
|
|
- taxonomy: dict |
|
|
- policies: dict |
|
|
- history: dict |
|
|
- sources: list |
|
|
""" |
|
|
if not hasattr(context, "taxonomy") or not isinstance(context.taxonomy, dict): |
|
|
raise TypeError("Context missing 'taxonomy' dict") |
|
|
if not hasattr(context, "policies") or not isinstance(context.policies, dict): |
|
|
raise TypeError("Context missing 'policies' dict") |
|
|
if not hasattr(context, "history") or not isinstance(context.history, dict): |
|
|
raise TypeError("Context missing 'history' dict") |
|
|
if not hasattr(context, "sources") or not isinstance(context.sources, list): |
|
|
raise TypeError("Context missing 'sources' list") |
|
|
|
|
|
return True |
|
|
|