- Fix Python formatting (sync no longer strips blank lines from .py files) - Remove test_community_build.py (tests private sync module) - Fix ruff warnings in test files - Add CODE_OF_CONDUCT.md - Add .github/PULL_REQUEST_TEMPLATE.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
"""
|
|
Request Context Storage
|
|
|
|
Stores request-level information using contextvars for thread-safe access
|
|
across async operations.
|
|
"""
|
|
|
|
from contextvars import ContextVar
|
|
from typing import Any
|
|
|
|
# Context variable for storing API key info during request processing
|
|
# This allows unified handlers to check project access permissions
|
|
_api_key_context: ContextVar[dict[str, Any] | None] = ContextVar("api_key_context", default=None)
|
|
|
|
|
|
def set_api_key_context(key_id: str, project_id: str, scope: str, is_global: bool) -> None:
|
|
"""
|
|
Store API key information in request context.
|
|
|
|
Args:
|
|
key_id: API key identifier
|
|
project_id: Project the key belongs to ('*' for global)
|
|
scope: Access scope (read/write/admin)
|
|
is_global: Whether this is a global key
|
|
"""
|
|
_api_key_context.set(
|
|
{"key_id": key_id, "project_id": project_id, "scope": scope, "is_global": is_global}
|
|
)
|
|
|
|
|
|
def get_api_key_context() -> dict[str, Any] | None:
|
|
"""
|
|
Retrieve API key information from request context.
|
|
|
|
Returns:
|
|
Dict with key_id, project_id, scope, is_global or None
|
|
"""
|
|
return _api_key_context.get()
|
|
|
|
|
|
def clear_api_key_context() -> None:
|
|
"""Clear API key context (for cleanup)."""
|
|
_api_key_context.set(None)
|