← Все статьи
2026-09-11 20:02 · 🤖 AI World

Wrapture: monkey patching для тестов и трейсинга в одном пакете

Graham Dumpleton выпустил wrapture — Python-библиотеку, которая одновременно заменяет unittest.mock в тестах и даёт New Relic-style трейсинг в продакшене. Simon Willison уже назвал её «швейцарским ножом» и удивляется, почему вокруг так мало шума.

Wrapture: monkey patching для тестов и трейсинга в одном пакете

Graham Dumpleton выпустил wrapture — новую Python-библиотеку для monkey patching, закрывающую сразу два сценария: тестирование (аналог unittest.mock) и observability с трейсингом в духе New Relic. Релиз вышел 31 августа 2026 года. Simon Willison назвал её «швейцарским ножом» и публично удивился, почему вокруг так мало шума.

Контекст

Monkey patching — техника подмены методов, атрибутов и объектов в рантайме Python. Обычно её применяют в юнит-тестах: подставляешь мок вместо реального HTTP-запроса или базы данных. Стандартный инструмент — unittest.mock. Wrapture делает то же самое, но параллельно записывает вызовы в тайм-лайн, строит их как дерево и находит медленные участки кода.

Graham Dumpleton известен в Python-сообществе как автор mod_wsgi. С момента релиза он публикует туториалы почти каждый день: базовый мокинг, phased behaviour (смена поведения между вызовами), запись вызовов деревом, живой трейсинг работающего приложения, zero-code трейсинг через TOML без правки кода, экспорт в OpenTelemetry. Параллельно вышли интерактивные воркшопы в виде JupyterLab-ноутбуков.

Отдельный пакет wrapture-instrumentation поддерживает из коробки: FastAPI, Flask, Django, aiohttp, SQLAlchemy, SQLite3, httpx, requests, gRPC, Jinja2, uvicorn, werkzeug и ещё ряд библиотек. Это значит — подключить трейсинг к существующему сервису можно вообще без правки Python-кода, только TOML-конфиг.

Аналитика

Нетривиальность wrapture в том, что он стирает границу между двумя обычно разными инструментами. В типичном проекте: mock-библиотека для тестов и APM-агент (Datadog, New Relic, OpenTelemetry) для продакшена — это два независимых мира с разными моделями мышления. Wrapture объединяет их: трейс, написанный для теста, и трейс в живом приложении используют один и тот же механизм.

Поддержка OpenTelemetry — стратегически важное решение. OTel стал де-факто стандартом distributed tracing: данные из wrapture можно направить в Jaeger, Grafana Tempo, Honeycomb или Datadog без vendor lock-in. Для AI-агентных систем, где цепочки вызовов LLM-пайплайна непрозрачны, наблюдаемость — не опция, а необходимость. Инструмент, позволяющий трейсить Python без модификации кода, — очевидный кандидат для дебага agentic-архитектур.

Wrapture пока в альфа-стадии, но уже пригоден к работе. Это типичное окно ранней адаптации: освоить инструмент до того, как он станет стандартом и войдёт в обязательный стек каждого Python-разработчика.

Кейсы применения в бизнесе

B2B-SaaS стартап на FastAPI без нормального трейсинга: подключите wrapture-instrumentation через TOML-конфиг, не меняя ни строчки кода сервиса. Получаете дерево вызовов с таймингами, экспорт в OpenTelemetry — и смотрите результат в Grafana Tempo. Дешевле и быстрее, чем ставить полноценный коммерческий APM.

Корпорация с legacy Django-монолитом: monkey patching через TOML позволяет трейсить приложение без рефакторинга. Инструментация SQLAlchemy даёт полную картину медленных SQL-запросов — то, что раньше требовало платного агента и долгой настройки.

SMB или небольшая IT-компания в КР/СНГ: если API тормозит у отдельных клиентов и непонятно почему — wrapture с записью тайм-лайна вызовов даёт ответ за часы вместо дней отладки через print-statement. Ноль изменений в продакшн-коде, минимальные затраты.

Кейсы в личной жизни

Разработчик, использующий unittest.mock: замените мокинг в одном тестовом файле на wrapture. Функциональность та же, но дополнительно получаете запись порядка вызовов деревом — помогает разобраться в сложной логике, которую трудно отследить линейно.

Преподаватель Python или автор туториалов: Graham выпустил интерактивные воркшопы в JupyterLab. Готовая учебная среда — можно взять за основу собственного курса или статьи, не строя инфраструктуру с нуля.

Студент или junior-разработчик: zero-code трейсинг через TOML — способ понять, как работает чужой Python-проект. Подключите wrapture к любому open-source Django- или Flask-приложению и посмотрите на его работу изнутри — без единой правки в исходнике.

Как применить сегодня

  • Установите: pip install wrapture
  • Попробуйте zero-code трейсинг: создайте wrapture.toml с описанием того, что трейсить, запустите приложение — Python-код менять не нужно
  • Для FastAPI/Flask: pip install wrapture-instrumentation, добавьте TOML-конфиг — инструментация подключится автоматически
  • Изучите JupyterLab-воркшопы от Graham Dumpleton — интерактивные notebooks с примерами всех возможностей пакета
  • Если уже используете OpenTelemetry в стеке — настройте экспорт трейсов из wrapture в существующий backend (Jaeger, Grafana Tempo и другие)
«Это один из тех инструментов-швейцарских ножей, которые после освоения будут давать ценность годами» — Simon Willison
← Все статьи