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.



