Грэм Дамплтон выпустил Wrapture, Python-библиотеку для тестирования и трейсинга, написанную ИИ

Разработчик Грэм Дамплтон, известный библиотекой wrapt, веб-сервером mod_wsgi и Python-агентом New Relic, выпустил новую библиотеку Wrapture. О ней рассказал в своём блоге Саймон Уиллисон.

Wrapture развивает идею monkey-patching (подмены объектов в рантайме) из wrapt и распространяет её сразу на тестирование и трейсинг. Библиотека позволяет обернуть любую функцию или метод так, чтобы отслеживать все обращения к ним или подменять возвращаемое значение. Тем самым Wrapture служит одновременно альтернативой unittest.mock и способом добавить трейсинг в уже существующий проект.

В библиотеке есть поддержка OpenTelemetry и полностью конфигурационный механизм подключения трейсинга к существующему Python-проекту: правила описываются в файле конфигурации, например, указывается цель наблюдения (в примере из поста это класс Calculator и его методы outer и inner) и приёмник, куда пишется трассировка в формате JSON Lines, без изменения исходного кода проекта.

Отдельно Дамплтон подчёркивает, что Wrapture, его первый крупный проект, полностью написанный ИИ-ассистентом под его руководством. По его словам, это не «вайб-кодинг» (vibe coding), когда код генерируется по одной короткой подсказке, а автор полагается на удачу, не имея знаний, чтобы оценить результат. Дамплтон говорит, что спроектировал Wrapture тщательно с самого начала: он давно работает именно в этой части экосистемы Python и точно знал, каким должен быть результат, а ИИ был лишь средством его получения, а не источником замысла.

В отдельном посте-продолжении «Unit testing with wrapture» Дамплтон показывает паттерны тестирования, которые поддерживает библиотека: подмену возвращаемого значения метода (on_call.returns) для стаба и изменение результата вызова уже после того, как исходный метод отработал (on_call.transforms_result).

Проект пока совсем молодой, ему всего несколько недель, но, по словам Уиллисона, у него многообещающее начало.

Ключевые факты

  • Грэм Дамплтон (автор wrapt, mod_wsgi, Python-агента New Relic) выпустил библиотеку Wrapture
  • Wrapture расширяет monkey-patching из wrapt на тестирование и трейсинг одновременно, с поддержкой OpenTelemetry
  • Библиотека, альтернатива unittest.mock и способ добавить трейсинг к существующему проекту через конфигурационный файл, без правки кода
  • Это первый крупный проект Дамплтона, целиком написанный ИИ-ассистентом под его руководством; сам он подчёркивает, что это не «вайб-кодинг»
  • Проекту всего несколько недель, но, по оценке Саймона Уиллисона, начало многообещающее

Почему это важно

Новость интересна не столько самой библиотекой, сколько тем, как она сделана. Дамплтон, автор давно известных в Python-мире инструментов (wrapt, mod_wsgi, агент New Relic), и Wrapture, его первый крупный проект, где буквально каждая строка кода и документации написана ИИ-ассистентом под его руководством. Он явно противопоставляет это «вайб-кодингу»: не одна короткая подсказка и надежда на лучшее, а тщательное проектирование человеком, который заранее точно знал, каким должен быть результат, а ИИ выступил инструментом реализации, а не источником архитектуры. Это конкретный публичный пример того, как выглядит дисциплинированная разработка с ИИ в руках эксперта, а не новичка.

Кому это важно

Python-разработчикам, которые пишут тесты и сталкиваются с ограничениями unittest.mock, а также инженерам, которым нужно добавить наблюдаемость (трейсинг) к чужому или уже существующему коду без его переписывания. Отдельно это интересно тем, кто следит за практиками разработки с ИИ-ассистентами: перед ними, задокументированный подход опытного инженера к работе с ИИ на крупном проекте.

Как это применить

Wrapture оборачивает произвольную функцию или метод и позволяет либо отслеживать все обращения к ним, либо подменять возвращаемое значение. Трейсинг настраивается декларативно, конфигурационным файлом, где указывается цель наблюдения (например, класс и его методы) и приёмник трассировки в формате JSON Lines, без правки исходного кода проекта. Для тестирования библиотека предлагает конструкции вроде wrapture.binding(...).on_call.returns(...) для подмены результата вызова стабом и on_call.transforms_result(...) для изменения результата уже после реального вызова метода, эти паттерны подробно разбираются во втором посте Дамплтона, «Unit testing with wrapture». Версия, лицензия и точные требования к Python в источнике не указаны.

Можно ли доверять

Материал опубликован в блоге Саймона Уиллисона, известного и надёжного источника новостей Python-мира, а автор самой библиотеки, Грэм Дамплтон, разработчик с большим и проверенным послужным списком (wrapt, mod_wsgi, агент New Relic). Заявление о полностью ИИ-написанном коде исходит от самого автора и не проверено независимо, но подано с явными оговорками о том, чем именно этот подход не является. Сама библиотека при этом совсем свежая, ей всего несколько недель, и внешних отзывов или независимой оценки кода пока нет.

Риски и подводные камни

Источник не приводит номер версии, лицензию, ссылку на репозиторий и инструкции по установке, а также не уточняет, поддерживает ли Wrapture асинхронный код и какие версии Python требует, то есть готовность к продакшену пока не проверена независимо. Monkey-patching как техника сама по себе рискованна при использовании во внешнем коде: подмена методов чужих классов может вести к неожиданным побочным эффектам, если применять её неаккуратно. Наконец, утверждение, что весь код написан ИИ, а качество обеспечено экспертизой автора, это позиция самого создателя проекта; для стороннего пользователя это не отменяет обычной практики, самостоятельно проверять код перед использованием в критичных системах.

«Каждую строку кода и документации в Wrapture написал ИИ-ассистент под моим руководством. Хочу сразу сказать это прямо, и так же прямо сказать, чем это не было. Это не «вайб-кодинг» (vibe coding), когда одна подсказка выдаёт кучу сгенерированного кода, а человек, ведущий процесс, просто надеется на лучшее, потому что не в состоянии оценить результат. У вайб-кодинга репутация вполне заслуженно плохая. Я спроектировал Wrapture тщательно с самого начала: я давно работаю именно в этой части Python и точно знал, каким должен быть результат, а ИИ был лишь средством его получения, а не источником замысла.»

— Грэм Дамплтон