wrapt is a Python module for building decorators, function and object wrappers, and runtime monkey patching. It focuses on preserving decorator introspection and signatures, and uses a C extension for performance-critical parts with a pure Python fallback when needed.
Project status
- Actively maintained, with an upstream push on 2026-05-25 and multiple wrapt 2.2.x updates appearing back to back in late May 2026.
- Apparent update cadence: a busy period around 2026-05-21 to 2026-05-22 (2.2.0.dev1, 2.2.0rc12, 2.2.0, 2.2.1rc1, 2.2.1), followed by a larger gap since 2.1.2 on 2026-03-06, suggesting a roughly multi-month cadence with bursts.
AI summary generated 5 days ago
Recent updates
2.2.1
1 week agoThe release notes for wrapt 2.2.1 provide only general installation and distribution information, without describing specific code changes. The actual diff compared to 2.2.1rc1 shows a single change to the package version metadata.
2.2.1rc1
1 week agoThis release candidate primarily bumps the package version to 2.2.1rc1 and updates documentation (adding an API reference page and related docs navigation). The code change of substance is in the C extension’s descriptor handling logic for FunctionWrapper-based wrappers. It adjusts how NULL versus Py_None is handled when invoking a wrapped descriptor’s tp_descr_get, addressing a regression in class attribute access behavior.
2.2.0
1 week agoThe release notes for wrapt 2.2.0 are minimal and do not enumerate any functional changes. Code diff between 2.2.0rc12 and 2.2.0 shows only a version tuple adjustment in src/wrapt/__init__.py.
2.2.0rc12
1 week agoThe release notes for wrapt 2.2.0rc12 are minimal, describing this as a release candidate and pointing to the upcoming 2.2.0 final changes page. The provided code diff only updates the package version metadata from 2.2.0 dev1 to 2.2.0 rc12.
2.2.0.dev1
1 week agowrapt 2.2.0.dev1 is a development snapshot intended to exercise the release pipeline, with release notes pointing to the in-progress 2.2.0 changelog. The provided release notes do not enumerate any user-facing API changes, fixes, or breaking changes.
Features2.1.2
2 months agowrapt 2.1.2 makes several behavior fixes and adds regression tests. The most notable code changes adjust how weakly-referenced wrapped instance methods behave after the instance is garbage collected, and how attribute deletion for __annotations__ is propagated to the wrapped object. Build-test-release CI was also adjusted to restore riscv64 wheel coverage.
Breaking2.1.1
3 months agowrapt 2.1.1 is a small maintenance release with no runtime/library logic changes shown in the diff. The changes are focused on packaging and documentation build behavior, including fixing the Read the Docs search UI.
2.1.0
4 months agowrapt 2.1.0 updates the package version and refreshes typing support, especially the type stubs for decorator and wrapper behavior on class methods. The repo also removes Python 3.8 from the documented supported versions and adjusts CI/test matrices accordingly.
2.0.1
6 months agowrapt 2.0.1 focuses on fixing lazy_import behavior, especially around correctly presenting the proxy as callable or iterable before the target module is imported. It adds an interface keyword argument to guide LazyObjectProxy to inject the expected special methods up front.
Features2.0.0
7 months agowrapt 2.0.0 introduces a substantially reworked public API surface in `src/wrapt/__init__.py`, including new exports related to proxies (lazy loading) and a new top-level `partial()` helper. The release notes provided for 2.0.0 are effectively empty (they link only to the PyPI page), so the code diff suggests multiple meaningful changes that are not documented there.
BreakingFeatures1.14.2
9 months agowrapt 1.14.2 includes a C-extension bug fix related to reference counting for the PartialCallableObjectProxy type during module initialization. The code diff also shows packaging and CI metadata changes that materially affect supported Python versions, which are not covered by the release notes displayed in the prompt.
Breaking1.17.3
9 months agowrapt 1.17.3 introduces a new module layout, including a conditional C-extension import path (via the WRAPT_DISABLE_EXTENSIONS environment variable), plus newly added pure-Python modules for patching and weak references. The core ObjectProxy C implementation also gained/changed special methods, and the post-import hook mechanism was refactored for locking and proxying behavior.
BreakingFeatures1.17.2
9 months agowrapt 1.17.2 primarily updates build and packaging outputs, specifically adding universal macOS wheels. It also bumps the library version metadata from 1.17.1 to 1.17.2 and refreshes documentation build configuration to match the new release.
Features1.17.1
1/11/2025wrapt 1.17.1 primarily fixes two issues: packaging wheel availability on macOS after GitHub Actions runner changes, and an incorrect NotImplementedError message related to pickling on ObjectProxy. The code change updates the error text raised by __reduce__ (and the corresponding C implementation) to reference the correct method name.
1.17.0
11/22/2024wrapt 1.17.0 adds ObjectProxy.__format__ support and updates ObjectProxy.__round__ to accept an optional ndigits parameter (including forwarding to the wrapped object). It also adds internal support for Python 3.13 free threading, including CI and wheel build changes. Release notes mention Python 3.6/3.7 dropping and a set of binding related bug fixes.
BreakingFeatures