Eszközök

Mesterséges intelligenciával generált szöveg

Wrapture: Graham Dumpleton AI-asszisztenssel készült Python eszköze tesztelésre és trace-elésre

Graham Dumpleton bemutatta a wrapture nevű új Python könyvtárát, amely a wrapt projekt monkeypatching ötleteit továbbviszi, és egyszerre tesztelésre és megfigyelésre (tracing) terjeszti ki az alkalmazást.

Wrapture: Graham Dumpleton AI-asszisztenssel készült Python eszköze tesztelésre és trace-elésre

Graham Dumpleton — a wrapt, mod_wsgi és a New Relic Python-ügynök fejlesztéséről ismert munkatárs — bemutatta a wrapture nevű új eszközt. A wrapture a wrapt monkeypatching-ötleteit viszi tovább: lehetővé teszi tetszőleges függvény vagy metódus becsomagolását úgy, hogy a hozzáférések nyomon követhetők legyenek, illetve a visszatérési értékek felülírhatók legyenek.

Mire jó a wrapture?

  • Egyrészt alternatívát kínál a unittest.mock használatára: könnyen be lehet avatkozni egy függvény vagy metódus viselkedésébe tesztek során.
  • Másrészt lehetőséget ad meglévő projektek fölé történő megfigyelésre és trace-elésre: csatolható figyelés olyan kódhoz is, amelyet nem mi kontrollálunk, és a futó program működésének zavarása nélkül rögzíthetők a rajta áthaladó adatok.

Graham Dumpleton saját szavaival: „Attaching observation to code you do not control, recording what flows through it, and doing so without disturbing the program being watched, is a problem I have never really stopped thinking about.”

OpenTelemetry és konfiguráció alapú trace-elés

A wrapture tartalmaz OpenTelemetry támogatást, és van egy teljesen konfigurációalapú mechanizmusa is, amivel egy meglévő Python-projekthez lehet tracinget hozzárendelni. A dokumentációban szereplő példa konfiguráció így néz ki:

capture = "summary"
[[observe]]
target = "domain:Calculator"
name = ["outer","inner"]

[[sink]]
type = "jsonlines"
path = "trace.jsonl"

Projekt állapota és AI-asszisztens szerepe

A wrapture még nagyon fiatal projekt — csupán néhány hete indult —, de ígéretes kezdettel. Érdekesség, hogy ez Graham első olyan komplett, ügynökalapú (agent-driven) projektje, amelynél minden kód- és dokumentációsor egy AI-asszisztens által, az ő irányítása alatt készült. Dumpleton ezt részletesen elmagyarázza: nem egyszeri, felületes generálás történt (a „vibe coding” problémáival), hanem célzott tervezés és gondos mérnöki munka, ahol az AI eszközként szolgált a megvalósításhoz.

Tesztminták a wrapture-rel

A wrapture dokumentációjában külön bejegyzés foglalkozik azzal, hogyan lehet egységteszteket írni a könyvtárral. Példák a használatra:

Egyszerű stub visszaadás tesztelése:

def test_stub_with_wrapture():
    with wrapture.binding(Gateway, "charge").on_call.returns({"id": "stub", "amount": 0}):
        assert OrderService().place(500)["id"] == "stub"

Teszt, amely meghívja az eredeti metódust, majd módosítja annak visszatérési értékét:

def test_pinned_result_with_wrapture():
    charge = wrapture.binding(Gateway, "charge")
    charge.on_call.transforms_result(lambda r: {**r, "id": "ch_TEST"})
    with charge:
        assert OrderService().place(500) == {"id": "ch_TEST", "amount": 500}

A fenti példákban az OrderService().place(...) metódus meghívja a Gateway().charge(...) metódust.

Miért számít ez?

A wrapture egyesíti a monkeypatching és a trace-elési lehetőségeket egy eszközben, ami egyszerűsítheti a tesztelést és az observability integrálását meglévő Python-projektekbe. A projekt korai stádiumban van, de a beépített OpenTelemetry-támogatás és a konfiguráció alapú megközelítés hasznos kiindulópont lehet azok számára, akik kívülről szeretnének megfigyelést csatolni alkalmazásaikhoz.

Kapcsolódó források a szerzőtől

Graham Dumpleton a wrapt, a mod_wsgi és a New Relic Python-ügynök fejlesztéséhez kapcsolódó múltja miatt különös figyelmet fordít a Python-okos megoldásokra; a wrapture dokumentációjában több részletes ismertető és példakód található a használathoz.