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