/
pickling
/
mcp-sourcecontrol-python
Обзор
Документация
Войти
/
pickling
/
mcp-sourcecontrol-python
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/mcp_sourcecontrol/runtime.py
65 строк
2 KB
pickling-21
Python-порт mcp-sourcecontrol: 20 инструментов, stdio и Streamable HTTP
29 июл 2026, 02:18
29 июл 2026, 02:18
bc8bde4
Код
Авторство
О чём код?
"""Разрешение конфигурации и клиента для текущего запроса. В TS-версии на каждую HTTP-сессию создаётся отдельный экземпляр McpServer со своим клиентом. Здесь сервер один, а конфигурация сессии передаётся через contextvar: ASGI-middleware разбирает заголовки X-SC-* на каждом запросе и подменяет конфигурацию на время его обработки. В stdio-режиме используется дефолтная конфигурация из ENV. """ from __future__ import annotations from contextvars import ContextVar, Token import httpx from .client import SimpleScClient from .config import ResolvedConfig, resolve_config from .log import logger _default_config: ResolvedConfig | None = None _session_config: ContextVar[ResolvedConfig | None] = ContextVar("sc_session_config", default=None) # Тестовый шов: позволяет подменить httpx-транспорт клиента (например, на MockTransport). _transport_override: httpx.AsyncBaseTransport | None = None def set_default_config(config: ResolvedConfig) -> None: global _default_config _default_config = config def get_default_config() -> ResolvedConfig: global _default_config if _default_config is None: _default_config = resolve_config() return _default_config def use_session_config(config: ResolvedConfig) -> Token[ResolvedConfig | None]: return _session_config.set(config) def reset_session_config(token: Token[ResolvedConfig | None]) -> None: _session_config.reset(token) def current_config() -> ResolvedConfig: return _session_config.get() or get_default_config() def set_transport_override(transport: httpx.AsyncBaseTransport | None) -> None: global _transport_override _transport_override = transport def current_client() -> SimpleScClient: """Клиент SourceControl для конфигурации текущего запроса.""" config = current_config() return SimpleScClient( config.api_url, config.tenant_id, config.token, logger, verify=config.tls_reject_unauthorized, transport=_transport_override, )