{"id":311,"library":"wrapt","title":"wrapt","description":"wrapt is a Python module designed for decorators, wrappers, and monkey patching. It emphasizes correctness and transparency, ensuring that decorators preserve introspectability and function signatures. The current version is 2.1.2, with a release cadence that reflects active maintenance and updates.","status":"active","version":"2.1.2","language":"python","source_language":"en","source_url":"https://github.com/GrahamDumpleton/wrapt","tags":["decorators","wrappers","monkey patching","Python"],"install":[{"cmd":"pip install wrapt","lang":"bash","label":"Install wrapt"}],"dependencies":[],"imports":[{"note":"The correct import is directly from wrapt; importing from wrapt.decorators is incorrect.","wrong":"from wrapt.decorators import decorator","symbol":"decorator","correct":"from wrapt import decorator"}],"quickstart":{"code":"import wrapt\n\n@wrapt.decorator\ndef pass_through(wrapped, instance, args, kwargs):\n    return wrapped(*args, **kwargs)\n\n@pass_through\ndef function():\n    print(\"Function executed\")\n\nfunction()","lang":"python","description":"This example demonstrates creating a simple pass-through decorator using wrapt."},"warnings":[{"fix":"Apply decorators outside of @classmethod to ensure correct behavior.","message":"In Python 3.13, the behavior of @classmethod.__get__() was reverted to its pre-3.9 state, affecting decorators applied inside @classmethod.","severity":"breaking","affected_versions":"Python 3.13"},{"fix":"Use super(OriginalClass, self).__init__() instead of super().__init__() within decorated classes.","message":"Using a decorated class with super() requires accessing the original wrapped class to avoid issues.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Use Base.__wrapped__ as the base class when deriving from a decorated class.","message":"Deriving from a decorated class necessitates using the original wrapped class as the base to prevent inheritance issues.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Avoid using issubclass() on decorated abstract classes or access the original class using __wrapped__.","message":"Using issubclass() on abstract classes decorated with wrapt can raise TypeError due to Python's handling of abstract base classes.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Ensure wrapt is reinstalled correctly if uninstallation causes issues, particularly when other packages rely on it.","message":"Uninstalling wrapt improperly can lead to Python runtime errors, especially if other packages depend on it.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-05-12T12:59:43.668Z","next_check":"2026-06-26T00:00:00.000Z","problems":[],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":80,"quickstart_tag":"verified","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.12,"mem_mb":4.2,"disk_size":"18.3M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.08,"mem_mb":4.2,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.17,"mem_mb":5,"disk_size":"20.2M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.14,"mem_mb":5,"disk_size":"21M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.14,"mem_mb":4.9,"disk_size":"12.1M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.13,"mem_mb":4.9,"disk_size":"13M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.09,"mem_mb":3.7,"disk_size":"11.7M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.09,"mem_mb":3.5,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.06,"mem_mb":3,"disk_size":"17.8M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.05,"mem_mb":3,"disk_size":"18M"}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}