| single |
====================
``zope.interface``
====================
:alt: Latest Version
:alt: Supported Python versions
:alt: Documentation Status
This package is intended to be independently reusable in any Python
project. It is maintained by the [Zope Toolkit project
].
This package provides an implementation of "object interfaces" for Python.
Interfaces are a mechanism for labeling objects as conforming to a given
API or contract. So, this package can be considered as implementation of
the `Design By Contract`_ methodology support in Python.
.. _Design By Contract: http://en.wikipedia.org/wiki/Design_by_contract
For detailed documentation, please see
https://zopeinterface.readthedocs.io/en/latest/
Change log
==========
8.5 (2026-05-26)
----------------
- Build and upload free-threaded (cp314t, cp315t) wheels for all
platforms.
Expand CI testing for free-threaded Python 3.14t from Linux-only to all
platforms (macOS, Windows), and add 3.15t CI.
See [issue 374].
- Replace all remaining ``PyDict_GetItem()`` calls in the C extension with
exception-safe alternatives (PyDict_Contains, PyDict_GetItemWithError).
PyDict_GetItem silently swallows exceptions from __hash__/__eq__,
causing ``isOrExtends() to return False instead of raising TypeError``
for unhashable objects. Also use ``PyType_GetDict()`` on Python 3.13+ for
free-threading safety when accessing the type dict.
See [issue 357].
8.4 (2026-04-25)
----------------
- Add support for automatically building and publishing Windows/ARM64
wheels.
8.3 (2026-04-10)
----------------
- Add support for free-threaded Python 3.14t: declare Py_mod_gil_not_used
in C extension, replace borrowed-reference ``PyDict_GetItem()`` with
strong-
reference ``PyDict_GetItemRef()`` in cache lookups, and use ``Py_TYPE()
macro instead of direct ob_type`` struct access.
- Add CI testing for free-threaded Python 3.14t (Linux).
- Guard 4 unprotected ``PyErr_Clear() calls in the C extension with
PyErr_ExceptionMatches`` checks, matching the pattern already used at 7
other sites in the same file. Without the guard, KeyboardInterrupt,
MemoryError, and SystemExit are silently swallowed in
implementedBy and providedBy.
See [issue 358].
8.2 (2026-01-09)
----------------
- Move all supported package metadata into ``pyproject.toml``.
- Ignore __annotate_func__ added in Python 3.14b1.
8.1.1 (2025-11-15)
------------------
- Fix the GitHub workflow for publishing wheels, which failed for
Linux/arm64.
(`#348 `_)
8.1 (2025-11-10)
----------------
- Drop support for Python 3.9.
- Add support for Python 3.14.
8.0.1 (2025-09-25)
------------------
- Make tests resilient against different ways of calling them.
- Remove run-time dependency on setuptools.
8.0 (2025-09-12)
----------------
- Replace pkg_resources namespace with PEP 420 native namespace.
|