jpayne@68: Metadata-Version: 2.1 jpayne@68: Name: zope.interface jpayne@68: Version: 7.2 jpayne@68: Summary: Interfaces for Python jpayne@68: Home-page: https://github.com/zopefoundation/zope.interface jpayne@68: Author: Zope Foundation and Contributors jpayne@68: Author-email: zope-dev@zope.dev jpayne@68: License: ZPL 2.1 jpayne@68: Keywords: interface,components,plugins jpayne@68: Classifier: Development Status :: 5 - Production/Stable jpayne@68: Classifier: Intended Audience :: Developers jpayne@68: Classifier: License :: OSI Approved :: Zope Public License jpayne@68: Classifier: Operating System :: OS Independent jpayne@68: Classifier: Programming Language :: Python jpayne@68: Classifier: Programming Language :: Python :: 3 jpayne@68: Classifier: Programming Language :: Python :: 3.8 jpayne@68: Classifier: Programming Language :: Python :: 3.9 jpayne@68: Classifier: Programming Language :: Python :: 3.10 jpayne@68: Classifier: Programming Language :: Python :: 3.11 jpayne@68: Classifier: Programming Language :: Python :: 3.12 jpayne@68: Classifier: Programming Language :: Python :: 3.13 jpayne@68: Classifier: Programming Language :: Python :: Implementation :: CPython jpayne@68: Classifier: Programming Language :: Python :: Implementation :: PyPy jpayne@68: Classifier: Framework :: Zope :: 3 jpayne@68: Classifier: Topic :: Software Development :: Libraries :: Python Modules jpayne@68: Requires-Python: >=3.8 jpayne@68: Description-Content-Type: text/x-rst jpayne@68: License-File: LICENSE.txt jpayne@68: Requires-Dist: setuptools jpayne@68: Provides-Extra: docs jpayne@68: Requires-Dist: Sphinx ; extra == 'docs' jpayne@68: Requires-Dist: repoze.sphinx.autointerface ; extra == 'docs' jpayne@68: Requires-Dist: furo ; extra == 'docs' jpayne@68: Provides-Extra: test jpayne@68: Requires-Dist: coverage[toml] ; extra == 'test' jpayne@68: Requires-Dist: zope.event ; extra == 'test' jpayne@68: Requires-Dist: zope.testing ; extra == 'test' jpayne@68: Provides-Extra: testing jpayne@68: Requires-Dist: coverage[toml] ; extra == 'testing' jpayne@68: Requires-Dist: zope.event ; extra == 'testing' jpayne@68: Requires-Dist: zope.testing ; extra == 'testing' jpayne@68: jpayne@68: ==================== jpayne@68: ``zope.interface`` jpayne@68: ==================== jpayne@68: jpayne@68: .. image:: https://img.shields.io/pypi/v/zope.interface.svg jpayne@68: :target: https://pypi.python.org/pypi/zope.interface/ jpayne@68: :alt: Latest Version jpayne@68: jpayne@68: .. image:: https://img.shields.io/pypi/pyversions/zope.interface.svg jpayne@68: :target: https://pypi.org/project/zope.interface/ jpayne@68: :alt: Supported Python versions jpayne@68: jpayne@68: .. image:: https://github.com/zopefoundation/zope.interface/actions/workflows/tests.yml/badge.svg jpayne@68: :target: https://github.com/zopefoundation/zope.interface/actions/workflows/tests.yml jpayne@68: jpayne@68: .. image:: https://readthedocs.org/projects/zopeinterface/badge/?version=latest jpayne@68: :target: https://zopeinterface.readthedocs.io/en/latest/ jpayne@68: :alt: Documentation Status jpayne@68: jpayne@68: This package is intended to be independently reusable in any Python jpayne@68: project. It is maintained by the `Zope Toolkit project jpayne@68: `_. jpayne@68: jpayne@68: This package provides an implementation of "object interfaces" for Python. jpayne@68: Interfaces are a mechanism for labeling objects as conforming to a given jpayne@68: API or contract. So, this package can be considered as implementation of jpayne@68: the `Design By Contract`_ methodology support in Python. jpayne@68: jpayne@68: .. _Design By Contract: http://en.wikipedia.org/wiki/Design_by_contract jpayne@68: jpayne@68: For detailed documentation, please see https://zopeinterface.readthedocs.io/en/latest/ jpayne@68: jpayne@68: ========= jpayne@68: Changes jpayne@68: ========= jpayne@68: jpayne@68: 7.2 (2024-11-28) jpayne@68: ================ jpayne@68: jpayne@68: - Add preliminary support for Python 3.14a2, this means that jpayne@68: ``.common.builtins.IByteString`` and ``.common.collections.IByteString`` are jpayne@68: no longer available from this Python version onwards as Python 3.14 dropped jpayne@68: ``collections.abc.ByteString``. jpayne@68: jpayne@68: jpayne@68: 7.1.1 (2024-10-23) jpayne@68: ================== jpayne@68: jpayne@68: - Fix segmentation faults in `weakrefobject.c` on Python 3.12 and 3.13. jpayne@68: (`#323 `_) jpayne@68: jpayne@68: jpayne@68: 7.1.0 (2024-10-10) jpayne@68: ================== jpayne@68: jpayne@68: - Declare support for Python 3.13. jpayne@68: jpayne@68: - Fix segmentation faults on Python 3.13. jpayne@68: (`#323 `_) jpayne@68: jpayne@68: jpayne@68: 7.0.3 (2024-08-27) jpayne@68: ================== jpayne@68: jpayne@68: - Fix `Assertion 'memb->type == T_PYSSIZET' failed.` for Python < 3.12. jpayne@68: (`#319 `_) jpayne@68: jpayne@68: jpayne@68: 7.0.2 (2024-08-26) jpayne@68: ================== jpayne@68: jpayne@68: - Fix reference-counting bug in C module initialization (broken in 7.0). jpayne@68: (`#316 `_) jpayne@68: jpayne@68: jpayne@68: 7.0.1 (2024-08-06) jpayne@68: ================== jpayne@68: jpayne@68: - Fix subclassability of ``ObjectSpecificationDescriptor`` (broken in 7.0). jpayne@68: (`#312 `_) jpayne@68: jpayne@68: jpayne@68: 7.0 (2024-08-06) jpayne@68: ================ jpayne@68: jpayne@68: - Enable heap-based types (PEP 384) for Python >= 3.11. jpayne@68: jpayne@68: - Adopt multi-phase module initialization (PEP 489). jpayne@68: jpayne@68: - Drop support for Python 3.7. jpayne@68: jpayne@68: jpayne@68: 6.4.post2 (2024-05-24) jpayne@68: ====================== jpayne@68: jpayne@68: - Publish missing Windows wheels, second attempt. jpayne@68: (`#295 `_) jpayne@68: jpayne@68: jpayne@68: 6.4.post1 (2024-05-23) jpayne@68: ====================== jpayne@68: jpayne@68: - Publish missing Windows wheels. jpayne@68: (`#295 `_) jpayne@68: jpayne@68: jpayne@68: 6.4.post0 (2024-05-22) jpayne@68: ====================== jpayne@68: jpayne@68: - The sdist of version 6.4 was uploaded to PyPI as jpayne@68: ``zope_interface-6.4.tar.gz`` instead of ``zope.interface-6.4-py2.tar.gz`` jpayne@68: which cannot be installed by ``zc.buildout``. This release is a re-release jpayne@68: of version 6.4 with the correct sdist name. jpayne@68: (`#298 `_) jpayne@68: jpayne@68: jpayne@68: 6.4 (2024-05-15) jpayne@68: ================ jpayne@68: jpayne@68: - Adjust for incompatible changes in Python 3.13b1. jpayne@68: (`#292 `_) jpayne@68: jpayne@68: - Build windows wheels on GHA. jpayne@68: jpayne@68: 6.3 (2024-04-12) jpayne@68: ================ jpayne@68: jpayne@68: - Add preliminary support for Python 3.13 as of 3.13a6. jpayne@68: jpayne@68: jpayne@68: 6.2 (2024-02-16) jpayne@68: ================ jpayne@68: jpayne@68: - Add preliminary support for Python 3.13 as of 3.13a3. jpayne@68: jpayne@68: - Add support to use the pipe (``|``) syntax for ``typing.Union``. jpayne@68: (`#280 `_) jpayne@68: jpayne@68: jpayne@68: 6.1 (2023-10-05) jpayne@68: ================ jpayne@68: jpayne@68: - Build Linux binary wheels for Python 3.12. jpayne@68: jpayne@68: - Add support for Python 3.12. jpayne@68: jpayne@68: - Fix building of the docs for non-final versions. jpayne@68: jpayne@68: jpayne@68: 6.0 (2023-03-17) jpayne@68: ================ jpayne@68: jpayne@68: - Build Linux binary wheels for Python 3.11. jpayne@68: jpayne@68: - Drop support for Python 2.7, 3.5, 3.6. jpayne@68: jpayne@68: - Fix test deprecation warning on Python 3.11. jpayne@68: jpayne@68: - Add preliminary support for Python 3.12 as of 3.12a5. jpayne@68: jpayne@68: - Drop: jpayne@68: jpayne@68: + `zope.interface.implements` jpayne@68: + `zope.interface.implementsOnly` jpayne@68: + `zope.interface.classProvides` jpayne@68: jpayne@68: jpayne@68: 5.5.2 (2022-11-17) jpayne@68: ================== jpayne@68: jpayne@68: - Add support for building arm64 wheels on macOS. jpayne@68: jpayne@68: jpayne@68: 5.5.1 (2022-11-03) jpayne@68: ================== jpayne@68: jpayne@68: - Add support for final Python 3.11 release. jpayne@68: jpayne@68: jpayne@68: 5.5.0 (2022-10-10) jpayne@68: ================== jpayne@68: jpayne@68: - Add support for Python 3.10 and 3.11 (as of 3.11.0rc2). jpayne@68: jpayne@68: - Add missing Trove classifier showing support for Python 3.9. jpayne@68: jpayne@68: - Add some more entries to ``zope.interface.interfaces.__all__``. jpayne@68: jpayne@68: - Disable unsafe math optimizations in C code. See `pull request 262 jpayne@68: `_. jpayne@68: jpayne@68: jpayne@68: 5.4.0 (2021-04-15) jpayne@68: ================== jpayne@68: jpayne@68: - Make the C implementation of the ``__providedBy__`` descriptor stop jpayne@68: ignoring all errors raised when accessing the instance's jpayne@68: ``__provides__``. Now it behaves like the Python version and only jpayne@68: catches ``AttributeError``. The previous behaviour could lead to jpayne@68: crashing the interpreter in cases of recursion and errors. See jpayne@68: `issue 239 `_. jpayne@68: jpayne@68: - Update the ``repr()`` and ``str()`` of various objects to be shorter jpayne@68: and more informative. In many cases, the ``repr()`` is now something jpayne@68: that can be evaluated to produce an equal object. For example, what jpayne@68: was previously printed as ```` is now jpayne@68: shown as ``classImplements(list, IMutableSequence, IIterable)``. See jpayne@68: `issue 236 `_. jpayne@68: jpayne@68: - Make ``Declaration.__add__`` (as in ``implementedBy(Cls) + jpayne@68: ISomething``) try harder to preserve a consistent resolution order jpayne@68: when the two arguments share overlapping pieces of the interface jpayne@68: inheritance hierarchy. Previously, the right hand side was always jpayne@68: put at the end of the resolution order, which could easily produce jpayne@68: invalid orders. See `issue 193 jpayne@68: `_. jpayne@68: jpayne@68: 5.3.0 (2020-03-21) jpayne@68: ================== jpayne@68: jpayne@68: - No changes from 5.3.0a1 jpayne@68: jpayne@68: jpayne@68: 5.3.0a1 (2021-03-18) jpayne@68: ==================== jpayne@68: jpayne@68: - Improve the repr of ``zope.interface.Provides`` to remove ambiguity jpayne@68: about what is being provided. This is especially helpful diagnosing jpayne@68: IRO issues. jpayne@68: jpayne@68: - Allow subclasses of ``BaseAdapterRegistry`` (including jpayne@68: ``AdapterRegistry`` and ``VerifyingAdapterRegistry``) to have jpayne@68: control over the data structures. This allows persistent jpayne@68: implementations such as those based on ZODB to choose more scalable jpayne@68: options (e.g., BTrees instead of dicts). See `issue 224 jpayne@68: `_. jpayne@68: jpayne@68: - Fix a reference counting issue in ``BaseAdapterRegistry`` that could jpayne@68: lead to references to interfaces being kept around even when all jpayne@68: utilities/adapters/subscribers providing that interface have been jpayne@68: removed. This is mostly an issue for persistent implementations. jpayne@68: Note that this only corrects the issue moving forward, it does not jpayne@68: solve any already corrupted reference counts. See `issue 227 jpayne@68: `_. jpayne@68: jpayne@68: - Add the method ``BaseAdapterRegistry.rebuild()``. This can be used jpayne@68: to fix the reference counting issue mentioned above, as well as to jpayne@68: update the data structures when custom data types have changed. jpayne@68: jpayne@68: - Add the interface method ``IAdapterRegistry.subscribed()`` and jpayne@68: implementation ``BaseAdapterRegistry.subscribed()`` for querying jpayne@68: directly registered subscribers. See `issue 230 jpayne@68: `_. jpayne@68: jpayne@68: - Add the maintenance method jpayne@68: ``Components.rebuildUtilityRegistryFromLocalCache()``. Most users jpayne@68: will not need this, but it can be useful if the ``Components.utilities`` jpayne@68: registry is suspected to be out of sync with the ``Components`` jpayne@68: object itself (this might happen to persistent ``Components`` jpayne@68: implementations in the face of bugs). jpayne@68: jpayne@68: - Fix the ``Provides`` and ``ClassProvides`` descriptors to stop jpayne@68: allowing redundant interfaces (those already implemented by the jpayne@68: underlying class or meta class) to produce an inconsistent jpayne@68: resolution order. This is similar to the change in ``@implementer`` jpayne@68: in 5.1.0, and resolves inconsistent resolution orders with jpayne@68: ``zope.proxy`` and ``zope.location``. See `issue 207 jpayne@68: `_. jpayne@68: jpayne@68: 5.2.0 (2020-11-05) jpayne@68: ================== jpayne@68: jpayne@68: - Add documentation section ``Persistency and Equality`` jpayne@68: (`#218 `_). jpayne@68: jpayne@68: - Create arm64 wheels. jpayne@68: jpayne@68: - Add support for Python 3.9. jpayne@68: jpayne@68: jpayne@68: 5.1.2 (2020-10-01) jpayne@68: ================== jpayne@68: jpayne@68: - Make sure to call each invariant only once when validating invariants. jpayne@68: Previously, invariants could be called multiple times because when an jpayne@68: invariant is defined in an interface, it's found by in all interfaces jpayne@68: inheriting from that interface. See `pull request 215 jpayne@68: `_. jpayne@68: jpayne@68: 5.1.1 (2020-09-30) jpayne@68: ================== jpayne@68: jpayne@68: - Fix the method definitions of ``IAdapterRegistry.subscribe``, jpayne@68: ``subscriptions`` and ``subscribers``. Previously, they all were jpayne@68: defined to accept a ``name`` keyword argument, but subscribers have jpayne@68: no names and the implementation of that interface did not accept jpayne@68: that argument. See `issue 208 jpayne@68: `_. jpayne@68: jpayne@68: - Fix a potential reference leak in the C optimizations. Previously, jpayne@68: applications that dynamically created unique ``Specification`` jpayne@68: objects (e.g., used ``@implementer`` on dynamic classes) could jpayne@68: notice a growth of small objects over time leading to increased jpayne@68: garbage collection times. See `issue 216 jpayne@68: `_. jpayne@68: jpayne@68: .. caution:: jpayne@68: jpayne@68: This leak could prevent interfaces used as the bases of jpayne@68: other interfaces from being garbage collected. Those interfaces jpayne@68: will now be collected. jpayne@68: jpayne@68: One way in which this would manifest was that ``weakref.ref`` jpayne@68: objects (and things built upon them, like jpayne@68: ``Weak[Key|Value]Dictionary``) would continue to have access to jpayne@68: the original object even if there were no other visible jpayne@68: references to Python and the original object *should* have been jpayne@68: collected. This could be especially problematic for the jpayne@68: ``WeakKeyDictionary`` when combined with dynamic or local jpayne@68: (created in the scope of a function) interfaces, since interfaces jpayne@68: are hashed based just on their name and module name. See the jpayne@68: linked issue for an example of a resulting ``KeyError``. jpayne@68: jpayne@68: Note that such potential errors are not new, they are just once jpayne@68: again a possibility. jpayne@68: jpayne@68: 5.1.0 (2020-04-08) jpayne@68: ================== jpayne@68: jpayne@68: - Make ``@implementer(*iface)`` and ``classImplements(cls, *iface)`` jpayne@68: ignore redundant interfaces. If the class already implements an jpayne@68: interface through inheritance, it is no longer redeclared jpayne@68: specifically for *cls*. This solves many instances of inconsistent jpayne@68: resolution orders, while still allowing the interface to be declared jpayne@68: for readability and maintenance purposes. See `issue 199 jpayne@68: `_. jpayne@68: jpayne@68: - Remove all bare ``except:`` statements. Previously, when accessing jpayne@68: special attributes such as ``__provides__``, ``__providedBy__``, jpayne@68: ``__class__`` and ``__conform__``, this package wrapped such access jpayne@68: in a bare ``except:`` statement, meaning that many errors could pass jpayne@68: silently; typically this would result in a fallback path being taken jpayne@68: and sometimes (like with ``providedBy()``) the result would be jpayne@68: non-sensical. This is especially true when those attributes are jpayne@68: implemented with descriptors. Now, only ``AttributeError`` is jpayne@68: caught. This makes errors more obvious. jpayne@68: jpayne@68: Obviously, this means that some exceptions will be propagated jpayne@68: differently than before. In particular, ``RuntimeError`` raised by jpayne@68: Acquisition in the case of circular containment will now be jpayne@68: propagated. Previously, when adapting such a broken object, a jpayne@68: ``TypeError`` would be the common result, but now it will be a more jpayne@68: informative ``RuntimeError``. jpayne@68: jpayne@68: In addition, ZODB errors like ``POSKeyError`` could now be jpayne@68: propagated where previously they would ignored by this package. jpayne@68: jpayne@68: See `issue 200 `_. jpayne@68: jpayne@68: - Require that the second argument (*bases*) to ``InterfaceClass`` is jpayne@68: a tuple. This only matters when directly using ``InterfaceClass`` to jpayne@68: create new interfaces dynamically. Previously, an individual jpayne@68: interface was allowed, but did not work correctly. Now it is jpayne@68: consistent with ``type`` and requires a tuple. jpayne@68: jpayne@68: - Let interfaces define custom ``__adapt__`` methods. This implements jpayne@68: the other side of the :pep:`246` adaptation protocol: objects being jpayne@68: adapted could already implement ``__conform__`` if they know about jpayne@68: the interface, and now interfaces can implement ``__adapt__`` if jpayne@68: they know about particular objects. There is no performance penalty jpayne@68: for interfaces that do not supply custom ``__adapt__`` methods. jpayne@68: jpayne@68: This includes the ability to add new methods, or override existing jpayne@68: interface methods using the new ``@interfacemethod`` decorator. jpayne@68: jpayne@68: See `issue 3 `_. jpayne@68: jpayne@68: - Make the internal singleton object returned by APIs like jpayne@68: ``implementedBy`` and ``directlyProvidedBy`` for objects that jpayne@68: implement or provide no interfaces more immutable. Previously an jpayne@68: internal cache could be mutated. See `issue 204 jpayne@68: `_. jpayne@68: jpayne@68: 5.0.2 (2020-03-30) jpayne@68: ================== jpayne@68: jpayne@68: - Ensure that objects that implement no interfaces (such as direct jpayne@68: subclasses of ``object``) still include ``Interface`` itself in jpayne@68: their ``__iro___`` and ``__sro___``. This fixes adapter registry jpayne@68: lookups for such objects when the adapter is registered for jpayne@68: ``Interface``. See `issue 197 jpayne@68: `_. jpayne@68: jpayne@68: jpayne@68: 5.0.1 (2020-03-21) jpayne@68: ================== jpayne@68: jpayne@68: - Ensure the resolution order for ``InterfaceClass`` is consistent. jpayne@68: See `issue 192 `_. jpayne@68: jpayne@68: - Ensure the resolution order for ``collections.OrderedDict`` is jpayne@68: consistent on CPython 2. (It was already consistent on Python 3 and PyPy). jpayne@68: jpayne@68: - Fix the handling of the ``ZOPE_INTERFACE_STRICT_IRO`` environment jpayne@68: variable. Previously, ``ZOPE_INTERFACE_STRICT_RO`` was read, in jpayne@68: contrast with the documentation. See `issue 194 jpayne@68: `_. jpayne@68: jpayne@68: jpayne@68: 5.0.0 (2020-03-19) jpayne@68: ================== jpayne@68: jpayne@68: - Make an internal singleton object returned by APIs like jpayne@68: ``implementedBy`` and ``directlyProvidedBy`` immutable. Previously, jpayne@68: it was fully mutable and allowed changing its ``__bases___``. That jpayne@68: could potentially lead to wrong results in pathological corner jpayne@68: cases. See `issue 158 jpayne@68: `_. jpayne@68: jpayne@68: - Support the ``PURE_PYTHON`` environment variable at runtime instead jpayne@68: of just at wheel build time. A value of 0 forces the C extensions to jpayne@68: be used (even on PyPy) failing if they aren't present. Any other jpayne@68: value forces the Python implementation to be used, ignoring the C jpayne@68: extensions. See `PR 151 `_. jpayne@68: jpayne@68: - Cache the result of ``__hash__`` method in ``InterfaceClass`` as a jpayne@68: speed optimization. The method is called very often (i.e several jpayne@68: hundred thousand times during Plone 5.2 startup). Because the hash value never jpayne@68: changes it can be cached. This improves test performance from 0.614s jpayne@68: down to 0.575s (1.07x faster). In a real world Plone case a reindex jpayne@68: index came down from 402s to 320s (1.26x faster). See `PR 156 jpayne@68: `_. jpayne@68: jpayne@68: - Change the C classes ``SpecificationBase`` and its subclass jpayne@68: ``ClassProvidesBase`` to store implementation attributes in their structures jpayne@68: instead of their instance dictionaries. This eliminates the use of jpayne@68: an undocumented private C API function, and helps make some jpayne@68: instances require less memory. See `PR 154 `_. jpayne@68: jpayne@68: - Reduce memory usage in other ways based on observations of usage jpayne@68: patterns in Zope (3) and Plone code bases. jpayne@68: jpayne@68: - Specifications with no dependents are common (more than 50%) so jpayne@68: avoid allocating a ``WeakKeyDictionary`` unless we need it. jpayne@68: - Likewise, tagged values are relatively rare, so don't allocate a jpayne@68: dictionary to hold them until they are used. jpayne@68: - Use ``__slots___`` or the C equivalent ``tp_members`` in more jpayne@68: common places. Note that this removes the ability to set arbitrary jpayne@68: instance variables on certain objects. jpayne@68: See `PR 155 `_. jpayne@68: jpayne@68: The changes in this release resulted in a 7% memory reduction after jpayne@68: loading about 6,000 modules that define about 2,200 interfaces. jpayne@68: jpayne@68: .. caution:: jpayne@68: jpayne@68: Details of many private attributes have changed, and external use jpayne@68: of those private attributes may break. In particular, the jpayne@68: lifetime and default value of ``_v_attrs`` has changed. jpayne@68: jpayne@68: - Remove support for hashing uninitialized interfaces. This could only jpayne@68: be done by subclassing ``InterfaceClass``. This has generated a jpayne@68: warning since it was first added in 2011 (3.6.5). Please call the jpayne@68: ``InterfaceClass`` constructor or otherwise set the appropriate jpayne@68: fields in your subclass before attempting to hash or sort it. See jpayne@68: `issue 157 `_. jpayne@68: jpayne@68: - Remove unneeded override of the ``__hash__`` method from jpayne@68: ``zope.interface.declarations.Implements``. Watching a reindex index jpayne@68: process in ZCatalog with on a Py-Spy after 10k samples the time for jpayne@68: ``.adapter._lookup`` was reduced from 27.5s to 18.8s (~1.5x faster). jpayne@68: Overall reindex index time shrunk from 369s to 293s (1.26x faster). jpayne@68: See `PR 161 jpayne@68: `_. jpayne@68: jpayne@68: - Make the Python implementation closer to the C implementation by jpayne@68: ignoring all exceptions, not just ``AttributeError``, during (parts jpayne@68: of) interface adaptation. See `issue 163 jpayne@68: `_. jpayne@68: jpayne@68: - Micro-optimization in ``.adapter._lookup`` , ``.adapter._lookupAll`` jpayne@68: and ``.adapter._subscriptions``: By loading ``components.get`` into jpayne@68: a local variable before entering the loop a bytcode "LOAD_FAST 0 jpayne@68: (components)" in the loop can be eliminated. In Plone, while running jpayne@68: all tests, average speedup of the "owntime" of ``_lookup`` is ~5x. jpayne@68: See `PR 167 jpayne@68: `_. jpayne@68: jpayne@68: - Add ``__all__`` declarations to all modules. This helps tools that jpayne@68: do auto-completion and documentation and results in less cluttered jpayne@68: results. Wildcard ("*") are not recommended and may be affected. See jpayne@68: `issue 153 jpayne@68: `_. jpayne@68: jpayne@68: - Fix ``verifyClass`` and ``verifyObject`` for builtin types like jpayne@68: ``dict`` that have methods taking an optional, unnamed argument with jpayne@68: no default value like ``dict.pop``. On PyPy3, the verification is jpayne@68: strict, but on PyPy2 (as on all versions of CPython) those methods jpayne@68: cannot be verified and are ignored. See `issue 118 jpayne@68: `_. jpayne@68: jpayne@68: - Update the common interfaces ``IEnumerableMapping``, jpayne@68: ``IExtendedReadMapping``, ``IExtendedWriteMapping``, jpayne@68: ``IReadSequence`` and ``IUniqueMemberWriteSequence`` to no longer jpayne@68: require methods that were removed from Python 3 on Python 3, such as jpayne@68: ``__setslice___``. Now, ``dict``, ``list`` and ``tuple`` properly jpayne@68: verify as ``IFullMapping``, ``ISequence`` and ``IReadSequence,`` jpayne@68: respectively on all versions of Python. jpayne@68: jpayne@68: - Add human-readable ``__str___`` and ``__repr___`` to ``Attribute`` jpayne@68: and ``Method``. These contain the name of the defining interface jpayne@68: and the attribute. For methods, it also includes the signature. jpayne@68: jpayne@68: - Change the error strings raised by ``verifyObject`` and jpayne@68: ``verifyClass``. They now include more human-readable information jpayne@68: and exclude extraneous lines and spaces. See `issue 170 jpayne@68: `_. jpayne@68: jpayne@68: .. caution:: This will break consumers (such as doctests) that jpayne@68: depended on the exact error messages. jpayne@68: jpayne@68: - Make ``verifyObject`` and ``verifyClass`` report all errors, if the jpayne@68: candidate object has multiple detectable violations. Previously they jpayne@68: reported only the first error. See `issue jpayne@68: `_. jpayne@68: jpayne@68: Like the above, this will break consumers depending on the exact jpayne@68: output of error messages if more than one error is present. jpayne@68: jpayne@68: - Add ``zope.interface.common.collections``, jpayne@68: ``zope.interface.common.numbers``, and ``zope.interface.common.io``. jpayne@68: These modules define interfaces based on the ABCs defined in the jpayne@68: standard library ``collections.abc``, ``numbers`` and ``io`` jpayne@68: modules, respectively. Importing these modules will make the jpayne@68: standard library concrete classes that are registered with those jpayne@68: ABCs declare the appropriate interface. See `issue 138 jpayne@68: `_. jpayne@68: jpayne@68: - Add ``zope.interface.common.builtins``. This module defines jpayne@68: interfaces of common builtin types, such as ``ITextString`` and jpayne@68: ``IByteString``, ``IDict``, etc. These interfaces extend the jpayne@68: appropriate interfaces from ``collections`` and ``numbers``, and the jpayne@68: standard library classes implement them after importing this module. jpayne@68: This is intended as a replacement for third-party packages like jpayne@68: `dolmen.builtins `_. jpayne@68: See `issue 138 `_. jpayne@68: jpayne@68: - Make ``providedBy()`` and ``implementedBy()`` respect ``super`` jpayne@68: objects. For instance, if class ``Derived`` implements ``IDerived`` jpayne@68: and extends ``Base`` which in turn implements ``IBase``, then jpayne@68: ``providedBy(super(Derived, derived))`` will return ``[IBase]``. jpayne@68: Previously it would have returned ``[IDerived]`` (in general, it jpayne@68: would previously have returned whatever would have been returned jpayne@68: without ``super``). jpayne@68: jpayne@68: Along with this change, adapter registries will unpack ``super`` jpayne@68: objects into their ``__self___`` before passing it to the factory. jpayne@68: Together, this means that ``component.getAdapter(super(Derived, jpayne@68: self), ITarget)`` is now meaningful. jpayne@68: jpayne@68: See `issue 11 `_. jpayne@68: jpayne@68: - Fix a potential interpreter crash in the low-level adapter jpayne@68: registry lookup functions. See issue 11. jpayne@68: jpayne@68: - Adopt Python's standard `C3 resolution order jpayne@68: `_ to compute the jpayne@68: ``__iro__`` and ``__sro__`` of interfaces, with tweaks to support jpayne@68: additional cases that are common in interfaces but disallowed for jpayne@68: Python classes. Previously, an ad-hoc ordering that made no jpayne@68: particular guarantees was used. jpayne@68: jpayne@68: This has many beneficial properties, including the fact that base jpayne@68: interface and base classes tend to appear near the end of the jpayne@68: resolution order instead of the beginning. The resolution order in jpayne@68: general should be more predictable and consistent. jpayne@68: jpayne@68: .. caution:: jpayne@68: In some cases, especially with complex interface inheritance jpayne@68: trees or when manually providing or implementing interfaces, the jpayne@68: resulting IRO may be quite different. This may affect adapter jpayne@68: lookup. jpayne@68: jpayne@68: The C3 order enforces some constraints in order to be able to jpayne@68: guarantee a sensible ordering. Older versions of zope.interface did jpayne@68: not impose similar constraints, so it was possible to create jpayne@68: interfaces and declarations that are inconsistent with the C3 jpayne@68: constraints. In that event, zope.interface will still produce a jpayne@68: resolution order equal to the old order, but it won't be guaranteed jpayne@68: to be fully C3 compliant. In the future, strict enforcement of C3 jpayne@68: order may be the default. jpayne@68: jpayne@68: A set of environment variables and module constants allows jpayne@68: controlling several aspects of this new behaviour. It is possible to jpayne@68: request warnings about inconsistent resolution orders encountered, jpayne@68: and even to forbid them. Differences between the C3 resolution order jpayne@68: and the previous order can be logged, and, in extreme cases, the jpayne@68: previous order can still be used (this ability will be removed in jpayne@68: the future). For details, see the documentation for jpayne@68: ``zope.interface.ro``. jpayne@68: jpayne@68: - Make inherited tagged values in interfaces respect the resolution jpayne@68: order (``__iro__``), as method and attribute lookup does. Previously jpayne@68: tagged values could give inconsistent results. See `issue 190 jpayne@68: `_. jpayne@68: jpayne@68: - Add ``getDirectTaggedValue`` (and related methods) to interfaces to jpayne@68: allow accessing tagged values irrespective of inheritance. See jpayne@68: `issue 190 jpayne@68: `_. jpayne@68: jpayne@68: - Ensure that ``Interface`` is always the last item in the ``__iro__`` jpayne@68: and ``__sro__``. This is usually the case, but if classes that do jpayne@68: not implement any interfaces are part of a class inheritance jpayne@68: hierarchy, ``Interface`` could be assigned too high a priority. jpayne@68: See `issue 8 `_. jpayne@68: jpayne@68: - Implement sorting, equality, and hashing in C for ``Interface`` jpayne@68: objects. In micro benchmarks, this makes those operations 40% to 80% jpayne@68: faster. This translates to a 20% speed up in querying adapters. jpayne@68: jpayne@68: Note that this changes certain implementation details. In jpayne@68: particular, ``InterfaceClass`` now has a non-default metaclass, and jpayne@68: it is enforced that ``__module__`` in instances of jpayne@68: ``InterfaceClass`` is read-only. jpayne@68: jpayne@68: See `PR 183 `_. jpayne@68: jpayne@68: jpayne@68: 4.7.2 (2020-03-10) jpayne@68: ================== jpayne@68: jpayne@68: - Remove deprecated use of setuptools features. See `issue 30 jpayne@68: `_. jpayne@68: jpayne@68: jpayne@68: 4.7.1 (2019-11-11) jpayne@68: ================== jpayne@68: jpayne@68: - Use Python 3 syntax in the documentation. See `issue 119 jpayne@68: `_. jpayne@68: jpayne@68: jpayne@68: 4.7.0 (2019-11-11) jpayne@68: ================== jpayne@68: jpayne@68: - Drop support for Python 3.4. jpayne@68: jpayne@68: - Change ``queryTaggedValue``, ``getTaggedValue``, jpayne@68: ``getTaggedValueTags`` in interfaces. They now include inherited jpayne@68: values by following ``__bases__``. See `PR 144 jpayne@68: `_. jpayne@68: jpayne@68: .. caution:: This may be a breaking change. jpayne@68: jpayne@68: - Add support for Python 3.8. jpayne@68: jpayne@68: jpayne@68: 4.6.0 (2018-10-23) jpayne@68: ================== jpayne@68: jpayne@68: - Add support for Python 3.7 jpayne@68: jpayne@68: - Fix ``verifyObject`` for class objects with staticmethods on jpayne@68: Python 3. See `issue 126 jpayne@68: `_. jpayne@68: jpayne@68: jpayne@68: 4.5.0 (2018-04-19) jpayne@68: ================== jpayne@68: jpayne@68: - Drop support for 3.3, avoid accidental dependence breakage via setup.py. jpayne@68: See `PR 110 `_. jpayne@68: - Allow registering and unregistering instance methods as listeners. jpayne@68: See `issue 12 `_ jpayne@68: and `PR 102 `_. jpayne@68: - Synchronize and simplify zope/__init__.py. See `issue 114 jpayne@68: `_ jpayne@68: jpayne@68: jpayne@68: 4.4.3 (2017-09-22) jpayne@68: ================== jpayne@68: jpayne@68: - Avoid exceptions when the ``__annotations__`` attribute is added to jpayne@68: interface definitions with Python 3.x type hints. See `issue 98 jpayne@68: `_. jpayne@68: - Fix the possibility of a rare crash in the C extension when jpayne@68: deallocating items. See `issue 100 jpayne@68: `_. jpayne@68: jpayne@68: jpayne@68: 4.4.2 (2017-06-14) jpayne@68: ================== jpayne@68: jpayne@68: - Fix a regression storing jpayne@68: ``zope.component.persistentregistry.PersistentRegistry`` instances. jpayne@68: See `issue 85 `_. jpayne@68: jpayne@68: - Fix a regression that could lead to the utility registration cache jpayne@68: of ``Components`` getting out of sync. See `issue 93 jpayne@68: `_. jpayne@68: jpayne@68: 4.4.1 (2017-05-13) jpayne@68: ================== jpayne@68: jpayne@68: - Simplify the caching of utility-registration data. In addition to jpayne@68: simplification, avoids spurious test failures when checking for jpayne@68: leaks in tests with persistent registries. See `pull 84 jpayne@68: `_. jpayne@68: jpayne@68: - Raise ``ValueError`` when non-text names are passed to adapter registry jpayne@68: methods: prevents corruption of lookup caches. jpayne@68: jpayne@68: 4.4.0 (2017-04-21) jpayne@68: ================== jpayne@68: jpayne@68: - Avoid a warning from the C compiler. jpayne@68: (https://github.com/zopefoundation/zope.interface/issues/71) jpayne@68: jpayne@68: - Add support for Python 3.6. jpayne@68: jpayne@68: 4.3.3 (2016-12-13) jpayne@68: ================== jpayne@68: jpayne@68: - Correct typos and ReST formatting errors in documentation. jpayne@68: jpayne@68: - Add API documentation for the adapter registry. jpayne@68: jpayne@68: - Ensure that the ``LICENSE.txt`` file is included in built wheels. jpayne@68: jpayne@68: - Fix C optimizations broken on Py3k. See the Python bug at: jpayne@68: http://bugs.python.org/issue15657 jpayne@68: (https://github.com/zopefoundation/zope.interface/issues/60) jpayne@68: jpayne@68: jpayne@68: 4.3.2 (2016-09-05) jpayne@68: ================== jpayne@68: jpayne@68: - Fix equality testing of ``implementedBy`` objects and proxies. jpayne@68: (https://github.com/zopefoundation/zope.interface/issues/55) jpayne@68: jpayne@68: jpayne@68: 4.3.1 (2016-08-31) jpayne@68: ================== jpayne@68: jpayne@68: - Support Components subclasses that are not hashable. jpayne@68: (https://github.com/zopefoundation/zope.interface/issues/53) jpayne@68: jpayne@68: jpayne@68: 4.3.0 (2016-08-31) jpayne@68: ================== jpayne@68: jpayne@68: - Add the ability to sort the objects returned by ``implementedBy``. jpayne@68: This is compatible with the way interface classes sort so they can jpayne@68: be used together in ordered containers like BTrees. jpayne@68: (https://github.com/zopefoundation/zope.interface/issues/42) jpayne@68: jpayne@68: - Make ``setuptools`` a hard dependency of ``setup.py``. jpayne@68: (https://github.com/zopefoundation/zope.interface/issues/13) jpayne@68: jpayne@68: - Change a linear algorithm (O(n)) in ``Components.registerUtility`` and jpayne@68: ``Components.unregisterUtility`` into a dictionary lookup (O(1)) for jpayne@68: hashable components. This substantially improves the time taken to jpayne@68: manipulate utilities in large registries at the cost of some jpayne@68: additional memory usage. (https://github.com/zopefoundation/zope.interface/issues/46) jpayne@68: jpayne@68: jpayne@68: 4.2.0 (2016-06-10) jpayne@68: ================== jpayne@68: jpayne@68: - Add support for Python 3.5 jpayne@68: jpayne@68: - Drop support for Python 2.6 and 3.2. jpayne@68: jpayne@68: jpayne@68: 4.1.3 (2015-10-05) jpayne@68: ================== jpayne@68: jpayne@68: - Fix installation without a C compiler on Python 3.5 jpayne@68: (https://github.com/zopefoundation/zope.interface/issues/24). jpayne@68: jpayne@68: jpayne@68: 4.1.2 (2014-12-27) jpayne@68: ================== jpayne@68: jpayne@68: - Add support for PyPy3. jpayne@68: jpayne@68: - Remove unittest assertions deprecated in Python3.x. jpayne@68: jpayne@68: - Add ``zope.interface.document.asReStructuredText``, which formats the jpayne@68: generated text for an interface using ReST double-backtick markers. jpayne@68: jpayne@68: jpayne@68: 4.1.1 (2014-03-19) jpayne@68: ================== jpayne@68: jpayne@68: - Add support for Python 3.4. jpayne@68: jpayne@68: jpayne@68: 4.1.0 (2014-02-05) jpayne@68: ================== jpayne@68: jpayne@68: - Update ``boostrap.py`` to version 2.2. jpayne@68: jpayne@68: - Add ``@named(name)`` declaration, that specifies the component name, so it jpayne@68: does not have to be passed in during registration. jpayne@68: jpayne@68: jpayne@68: 4.0.5 (2013-02-28) jpayne@68: ================== jpayne@68: jpayne@68: - Fix a bug where a decorated method caused false positive failures on jpayne@68: ``verifyClass()``. jpayne@68: jpayne@68: jpayne@68: 4.0.4 (2013-02-21) jpayne@68: ================== jpayne@68: jpayne@68: - Fix a bug that was revealed by porting zope.traversing. During a loop, the jpayne@68: loop body modified a weakref dict causing a ``RuntimeError`` error. jpayne@68: jpayne@68: 4.0.3 (2012-12-31) jpayne@68: ================== jpayne@68: jpayne@68: - Fleshed out PyPI Trove classifiers. jpayne@68: jpayne@68: 4.0.2 (2012-11-21) jpayne@68: ================== jpayne@68: jpayne@68: - Add support for Python 3.3. jpayne@68: jpayne@68: - Restored ability to install the package in the absence of ``setuptools``. jpayne@68: jpayne@68: - LP #1055223: Fix test which depended on dictionary order and failed randomly jpayne@68: in Python 3.3. jpayne@68: jpayne@68: 4.0.1 (2012-05-22) jpayne@68: ================== jpayne@68: jpayne@68: - Drop explicit ``DeprecationWarnings`` for "class advice" APIS (these jpayne@68: APIs are still deprecated under Python 2.x, and still raise an exception jpayne@68: under Python 3.x, but no longer cause a warning to be emitted under jpayne@68: Python 2.x). jpayne@68: jpayne@68: 4.0.0 (2012-05-16) jpayne@68: ================== jpayne@68: jpayne@68: - Automated build of Sphinx HTML docs and running doctest snippets via tox. jpayne@68: jpayne@68: - Deprecate the "class advice" APIs from ``zope.interface.declarations``: jpayne@68: ``implements``, ``implementsOnly``, and ``classProvides``. In their place, jpayne@68: prefer the equivalent class decorators: ``@implementer``, jpayne@68: ``@implementer_only``, and ``@provider``. Code which uses the deprecated jpayne@68: APIs will not work as expected under Py3k. jpayne@68: jpayne@68: - Remove use of '2to3' and associated fixers when installing under Py3k. jpayne@68: The code is now in a "compatible subset" which supports Python 2.6, 2.7, jpayne@68: and 3.2, including PyPy 1.8 (the version compatible with the 2.7 language jpayne@68: spec). jpayne@68: jpayne@68: - Drop explicit support for Python 2.4 / 2.5 / 3.1. jpayne@68: jpayne@68: - Add support for PyPy. jpayne@68: jpayne@68: - Add support for continuous integration using ``tox`` and ``jenkins``. jpayne@68: jpayne@68: - Add 'setup.py dev' alias (runs ``setup.py develop`` plus installs jpayne@68: ``nose`` and ``coverage``). jpayne@68: jpayne@68: - Add 'setup.py docs' alias (installs ``Sphinx`` and dependencies). jpayne@68: jpayne@68: - Replace all unittest coverage previously accomplished via doctests with jpayne@68: unittests. The doctests have been moved into a ``docs`` section, managed jpayne@68: as a Sphinx collection. jpayne@68: jpayne@68: - LP #910987: Ensure that the semantics of the ``lookup`` method of jpayne@68: ``zope.interface.adapter.LookupBase`` are the same in both the C and jpayne@68: Python implementations. jpayne@68: jpayne@68: - LP #900906: Avoid exceptions due to tne new ``__qualname__`` attribute jpayne@68: added in Python 3.3 (see PEP 3155 for rationale). Thanks to Antoine jpayne@68: Pitrou for the patch. jpayne@68: jpayne@68: 3.8.0 (2011-09-22) jpayne@68: ================== jpayne@68: jpayne@68: - New module ``zope.interface.registry``. This is code moved from jpayne@68: ``zope.component.registry`` which implements a basic nonperistent component jpayne@68: registry as ``zope.interface.registry.Components``. This class was moved jpayne@68: from ``zope.component`` to make porting systems (such as Pyramid) that rely jpayne@68: only on a basic component registry to Python 3 possible without needing to jpayne@68: port the entirety of the ``zope.component`` package. Backwards jpayne@68: compatibility import shims have been left behind in ``zope.component``, so jpayne@68: this change will not break any existing code. jpayne@68: jpayne@68: - New ``tests_require`` dependency: ``zope.event`` to test events sent by jpayne@68: Components implementation. The ``zope.interface`` package does not have a jpayne@68: hard dependency on ``zope.event``, but if ``zope.event`` is importable, it jpayne@68: will send component registration events when methods of an instance of jpayne@68: ``zope.interface.registry.Components`` are called. jpayne@68: jpayne@68: - New interfaces added to support ``zope.interface.registry.Components`` jpayne@68: addition: ``ComponentLookupError``, ``Invalid``, ``IObjectEvent``, jpayne@68: ``ObjectEvent``, ``IComponentLookup``, ``IRegistration``, jpayne@68: ``IUtilityRegistration``, ``IAdapterRegistration``, jpayne@68: ``ISubscriptionAdapterRegistration``, ``IHandlerRegistration``, jpayne@68: ``IRegistrationEvent``, ``RegistrationEvent``, ``IRegistered``, jpayne@68: ``Registered``, ``IUnregistered``, ``Unregistered``, jpayne@68: ``IComponentRegistry``, and ``IComponents``. jpayne@68: jpayne@68: - No longer Python 2.4 compatible (tested under 2.5, 2.6, 2.7, and 3.2). jpayne@68: jpayne@68: 3.7.0 (2011-08-13) jpayne@68: ================== jpayne@68: jpayne@68: - Move changes from 3.6.2 - 3.6.5 to a new 3.7.x release line. jpayne@68: jpayne@68: 3.6.7 (2011-08-20) jpayne@68: ================== jpayne@68: jpayne@68: - Fix sporadic failures on x86-64 platforms in tests of rich comparisons jpayne@68: of interfaces. jpayne@68: jpayne@68: 3.6.6 (2011-08-13) jpayne@68: ================== jpayne@68: jpayne@68: - LP #570942: Now correctly compare interfaces from different modules but jpayne@68: with the same names. jpayne@68: jpayne@68: N.B.: This is a less intrusive / destabilizing fix than the one applied in jpayne@68: 3.6.3: we only fix the underlying cmp-alike function, rather than adding jpayne@68: the other "rich comparison" functions. jpayne@68: jpayne@68: - Revert to software as released with 3.6.1 for "stable" 3.6 release branch. jpayne@68: jpayne@68: 3.6.5 (2011-08-11) jpayne@68: ================== jpayne@68: jpayne@68: - LP #811792: work around buggy behavior in some subclasses of jpayne@68: ``zope.interface.interface.InterfaceClass``, which invoke ``__hash__`` jpayne@68: before initializing ``__module__`` and ``__name__``. The workaround jpayne@68: returns a fixed constant hash in such cases, and issues a ``UserWarning``. jpayne@68: jpayne@68: - LP #804832: Under PyPy, ``zope.interface`` should not build its C jpayne@68: extension. Also, prevent attempting to build it under Jython. jpayne@68: jpayne@68: - Add a tox.ini for easier xplatform testing. jpayne@68: jpayne@68: - Fix testing deprecation warnings issued when tested under Py3K. jpayne@68: jpayne@68: 3.6.4 (2011-07-04) jpayne@68: ================== jpayne@68: jpayne@68: - LP 804951: InterfaceClass instances were unhashable under Python 3.x. jpayne@68: jpayne@68: 3.6.3 (2011-05-26) jpayne@68: ================== jpayne@68: jpayne@68: - LP #570942: Now correctly compare interfaces from different modules but jpayne@68: with the same names. jpayne@68: jpayne@68: 3.6.2 (2011-05-17) jpayne@68: ================== jpayne@68: jpayne@68: - Moved detailed documentation out-of-line from PyPI page, linking instead to jpayne@68: http://docs.zope.org/zope.interface . jpayne@68: jpayne@68: - Fixes for small issues when running tests under Python 3.2 using jpayne@68: ``zope.testrunner``. jpayne@68: jpayne@68: - LP # 675064: Specify return value type for C optimizations module init jpayne@68: under Python 3: undeclared value caused warnings, and segfaults on some jpayne@68: 64 bit architectures. jpayne@68: jpayne@68: - setup.py now raises RuntimeError if you don't have Distutils installed when jpayne@68: running under Python 3. jpayne@68: jpayne@68: 3.6.1 (2010-05-03) jpayne@68: ================== jpayne@68: jpayne@68: - A non-ASCII character in the changelog made 3.6.0 uninstallable on jpayne@68: Python 3 systems with another default encoding than UTF-8. jpayne@68: jpayne@68: - Fix compiler warnings under GCC 4.3.3. jpayne@68: jpayne@68: 3.6.0 (2010-04-29) jpayne@68: ================== jpayne@68: jpayne@68: - LP #185974: Clear the cache used by ``Specificaton.get`` inside jpayne@68: ``Specification.changed``. Thanks to Jacob Holm for the patch. jpayne@68: jpayne@68: - Add support for Python 3.1. Contributors: jpayne@68: jpayne@68: Lennart Regebro jpayne@68: Martin v Loewis jpayne@68: Thomas Lotze jpayne@68: Wolfgang Schnerring jpayne@68: jpayne@68: The 3.1 support is completely backwards compatible. However, the implements jpayne@68: syntax used under Python 2.X does not work under 3.X, since it depends on jpayne@68: how metaclasses are implemented and this has changed. Instead it now supports jpayne@68: a decorator syntax (also under Python 2.X):: jpayne@68: jpayne@68: class Foo: jpayne@68: implements(IFoo) jpayne@68: ... jpayne@68: jpayne@68: can now also be written:: jpayne@68: jpayne@68: @implementer(IFoo): jpayne@68: class Foo: jpayne@68: ... jpayne@68: jpayne@68: There are 2to3 fixers available to do this change automatically in the jpayne@68: zope.fixers package. jpayne@68: jpayne@68: - Python 2.3 is no longer supported. jpayne@68: jpayne@68: jpayne@68: 3.5.4 (2009-12-23) jpayne@68: ================== jpayne@68: jpayne@68: - Use the standard Python doctest module instead of zope.testing.doctest, which jpayne@68: has been deprecated. jpayne@68: jpayne@68: jpayne@68: 3.5.3 (2009-12-08) jpayne@68: ================== jpayne@68: jpayne@68: - Fix an edge case: make providedBy() work when a class has '__provides__' in jpayne@68: its __slots__ (see http://thread.gmane.org/gmane.comp.web.zope.devel/22490) jpayne@68: jpayne@68: jpayne@68: 3.5.2 (2009-07-01) jpayne@68: ================== jpayne@68: jpayne@68: - BaseAdapterRegistry.unregister, unsubscribe: Remove empty portions of jpayne@68: the data structures when something is removed. This avoids leaving jpayne@68: references to global objects (interfaces) that may be slated for jpayne@68: removal from the calling application. jpayne@68: jpayne@68: jpayne@68: 3.5.1 (2009-03-18) jpayne@68: ================== jpayne@68: jpayne@68: - verifyObject: use getattr instead of hasattr to test for object attributes jpayne@68: in order to let exceptions other than AttributeError raised by properties jpayne@68: propagate to the caller jpayne@68: jpayne@68: - Add Sphinx-based documentation building to the package buildout jpayne@68: configuration. Use the ``bin/docs`` command after buildout. jpayne@68: jpayne@68: - Improve package description a bit. Unify changelog entries formatting. jpayne@68: jpayne@68: - Change package's mailing list address to zope-dev at zope.org as jpayne@68: zope3-dev at zope.org is now retired. jpayne@68: jpayne@68: jpayne@68: 3.5.0 (2008-10-26) jpayne@68: ================== jpayne@68: jpayne@68: - Fix declaration of _zope_interface_coptimizations, it's not a top level jpayne@68: package. jpayne@68: jpayne@68: - Add a DocTestSuite for odd.py module, so their tests are run. jpayne@68: jpayne@68: - Allow to bootstrap on Jython. jpayne@68: jpayne@68: - Fix https://bugs.launchpad.net/zope3/3.3/+bug/98388: ISpecification jpayne@68: was missing a declaration for __iro__. jpayne@68: jpayne@68: - Add optional code optimizations support, which allows the building jpayne@68: of C code optimizations to fail (Jython). jpayne@68: jpayne@68: - Replace `_flatten` with a non-recursive implementation, effectively making jpayne@68: it 3x faster. jpayne@68: jpayne@68: jpayne@68: 3.4.1 (2007-10-02) jpayne@68: ================== jpayne@68: jpayne@68: - Fix a setup bug that prevented installation from source on systems jpayne@68: without setuptools. jpayne@68: jpayne@68: jpayne@68: 3.4.0 (2007-07-19) jpayne@68: ================== jpayne@68: jpayne@68: - Final release for 3.4.0. jpayne@68: jpayne@68: jpayne@68: 3.4.0b3 (2007-05-22) jpayne@68: ==================== jpayne@68: jpayne@68: jpayne@68: - When checking whether an object is already registered, use identity jpayne@68: comparison, to allow adding registering with picky custom comparison methods. jpayne@68: jpayne@68: jpayne@68: 3.3.0.1 (2007-01-03) jpayne@68: ==================== jpayne@68: jpayne@68: - Made a reference to OverflowWarning, which disappeared in Python jpayne@68: 2.5, conditional. jpayne@68: jpayne@68: jpayne@68: 3.3.0 (2007/01/03) jpayne@68: ================== jpayne@68: jpayne@68: New Features jpayne@68: ------------ jpayne@68: jpayne@68: - Refactor the adapter-lookup algorithim to make it much simpler and faster. jpayne@68: jpayne@68: Also, implement more of the adapter-lookup logic in C, making jpayne@68: debugging of application code easier, since there is less jpayne@68: infrastructre code to step through. jpayne@68: jpayne@68: - Treat objects without interface declarations as if they jpayne@68: declared that they provide ``zope.interface.Interface``. jpayne@68: jpayne@68: - Add a number of richer new adapter-registration interfaces jpayne@68: that provide greater control and introspection. jpayne@68: jpayne@68: - Add a new interface decorator to zope.interface that allows the jpayne@68: setting of tagged values on an interface at definition time (see jpayne@68: zope.interface.taggedValue). jpayne@68: jpayne@68: Bug Fixes jpayne@68: --------- jpayne@68: jpayne@68: - A bug in multi-adapter lookup sometimes caused incorrect adapters to jpayne@68: be returned. jpayne@68: jpayne@68: jpayne@68: 3.2.0.2 (2006-04-15) jpayne@68: ==================== jpayne@68: jpayne@68: - Fix packaging bug: 'package_dir' must be a *relative* path. jpayne@68: jpayne@68: jpayne@68: 3.2.0.1 (2006-04-14) jpayne@68: ==================== jpayne@68: jpayne@68: - Packaging change: suppress inclusion of 'setup.cfg' in 'sdist' builds. jpayne@68: jpayne@68: jpayne@68: 3.2.0 (2006-01-05) jpayne@68: ================== jpayne@68: jpayne@68: - Corresponds to the version of the zope.interface package shipped as part of jpayne@68: the Zope 3.2.0 release. jpayne@68: jpayne@68: jpayne@68: 3.1.0 (2005-10-03) jpayne@68: ================== jpayne@68: jpayne@68: - Corresponds to the version of the zope.interface package shipped as part of jpayne@68: the Zope 3.1.0 release. jpayne@68: jpayne@68: - Made attribute resolution order consistent with component lookup order, jpayne@68: i.e. new-style class MRO semantics. jpayne@68: jpayne@68: - Deprecate 'isImplementedBy' and 'isImplementedByInstancesOf' APIs in jpayne@68: favor of 'implementedBy' and 'providedBy'. jpayne@68: jpayne@68: jpayne@68: 3.0.1 (2005-07-27) jpayne@68: ================== jpayne@68: jpayne@68: - Corresponds to the version of the zope.interface package shipped as part of jpayne@68: the Zope X3.0.1 release. jpayne@68: jpayne@68: - Fix a bug reported by James Knight, which caused adapter registries jpayne@68: to fail occasionally to reflect declaration changes. jpayne@68: jpayne@68: jpayne@68: 3.0.0 (2004-11-07) jpayne@68: ================== jpayne@68: jpayne@68: - Corresponds to the version of the zope.interface package shipped as part of jpayne@68: the Zope X3.0.0 release.