annotate CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/site-packages/zope.interface-7.2.dist-info/METADATA @ 69:33d812a61356

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 17:55:14 -0400
parents
children
rev   line source
jpayne@69 1 Metadata-Version: 2.1
jpayne@69 2 Name: zope.interface
jpayne@69 3 Version: 7.2
jpayne@69 4 Summary: Interfaces for Python
jpayne@69 5 Home-page: https://github.com/zopefoundation/zope.interface
jpayne@69 6 Author: Zope Foundation and Contributors
jpayne@69 7 Author-email: zope-dev@zope.dev
jpayne@69 8 License: ZPL 2.1
jpayne@69 9 Keywords: interface,components,plugins
jpayne@69 10 Classifier: Development Status :: 5 - Production/Stable
jpayne@69 11 Classifier: Intended Audience :: Developers
jpayne@69 12 Classifier: License :: OSI Approved :: Zope Public License
jpayne@69 13 Classifier: Operating System :: OS Independent
jpayne@69 14 Classifier: Programming Language :: Python
jpayne@69 15 Classifier: Programming Language :: Python :: 3
jpayne@69 16 Classifier: Programming Language :: Python :: 3.8
jpayne@69 17 Classifier: Programming Language :: Python :: 3.9
jpayne@69 18 Classifier: Programming Language :: Python :: 3.10
jpayne@69 19 Classifier: Programming Language :: Python :: 3.11
jpayne@69 20 Classifier: Programming Language :: Python :: 3.12
jpayne@69 21 Classifier: Programming Language :: Python :: 3.13
jpayne@69 22 Classifier: Programming Language :: Python :: Implementation :: CPython
jpayne@69 23 Classifier: Programming Language :: Python :: Implementation :: PyPy
jpayne@69 24 Classifier: Framework :: Zope :: 3
jpayne@69 25 Classifier: Topic :: Software Development :: Libraries :: Python Modules
jpayne@69 26 Requires-Python: >=3.8
jpayne@69 27 Description-Content-Type: text/x-rst
jpayne@69 28 License-File: LICENSE.txt
jpayne@69 29 Requires-Dist: setuptools
jpayne@69 30 Provides-Extra: docs
jpayne@69 31 Requires-Dist: Sphinx ; extra == 'docs'
jpayne@69 32 Requires-Dist: repoze.sphinx.autointerface ; extra == 'docs'
jpayne@69 33 Requires-Dist: furo ; extra == 'docs'
jpayne@69 34 Provides-Extra: test
jpayne@69 35 Requires-Dist: coverage[toml] ; extra == 'test'
jpayne@69 36 Requires-Dist: zope.event ; extra == 'test'
jpayne@69 37 Requires-Dist: zope.testing ; extra == 'test'
jpayne@69 38 Provides-Extra: testing
jpayne@69 39 Requires-Dist: coverage[toml] ; extra == 'testing'
jpayne@69 40 Requires-Dist: zope.event ; extra == 'testing'
jpayne@69 41 Requires-Dist: zope.testing ; extra == 'testing'
jpayne@69 42
jpayne@69 43 ====================
jpayne@69 44 ``zope.interface``
jpayne@69 45 ====================
jpayne@69 46
jpayne@69 47 .. image:: https://img.shields.io/pypi/v/zope.interface.svg
jpayne@69 48 :target: https://pypi.python.org/pypi/zope.interface/
jpayne@69 49 :alt: Latest Version
jpayne@69 50
jpayne@69 51 .. image:: https://img.shields.io/pypi/pyversions/zope.interface.svg
jpayne@69 52 :target: https://pypi.org/project/zope.interface/
jpayne@69 53 :alt: Supported Python versions
jpayne@69 54
jpayne@69 55 .. image:: https://github.com/zopefoundation/zope.interface/actions/workflows/tests.yml/badge.svg
jpayne@69 56 :target: https://github.com/zopefoundation/zope.interface/actions/workflows/tests.yml
jpayne@69 57
jpayne@69 58 .. image:: https://readthedocs.org/projects/zopeinterface/badge/?version=latest
jpayne@69 59 :target: https://zopeinterface.readthedocs.io/en/latest/
jpayne@69 60 :alt: Documentation Status
jpayne@69 61
jpayne@69 62 This package is intended to be independently reusable in any Python
jpayne@69 63 project. It is maintained by the `Zope Toolkit project
jpayne@69 64 <https://zopetoolkit.readthedocs.io/>`_.
jpayne@69 65
jpayne@69 66 This package provides an implementation of "object interfaces" for Python.
jpayne@69 67 Interfaces are a mechanism for labeling objects as conforming to a given
jpayne@69 68 API or contract. So, this package can be considered as implementation of
jpayne@69 69 the `Design By Contract`_ methodology support in Python.
jpayne@69 70
jpayne@69 71 .. _Design By Contract: http://en.wikipedia.org/wiki/Design_by_contract
jpayne@69 72
jpayne@69 73 For detailed documentation, please see https://zopeinterface.readthedocs.io/en/latest/
jpayne@69 74
jpayne@69 75 =========
jpayne@69 76 Changes
jpayne@69 77 =========
jpayne@69 78
jpayne@69 79 7.2 (2024-11-28)
jpayne@69 80 ================
jpayne@69 81
jpayne@69 82 - Add preliminary support for Python 3.14a2, this means that
jpayne@69 83 ``.common.builtins.IByteString`` and ``.common.collections.IByteString`` are
jpayne@69 84 no longer available from this Python version onwards as Python 3.14 dropped
jpayne@69 85 ``collections.abc.ByteString``.
jpayne@69 86
jpayne@69 87
jpayne@69 88 7.1.1 (2024-10-23)
jpayne@69 89 ==================
jpayne@69 90
jpayne@69 91 - Fix segmentation faults in `weakrefobject.c` on Python 3.12 and 3.13.
jpayne@69 92 (`#323 <https://github.com/zopefoundation/zope.interface/issues/323>`_)
jpayne@69 93
jpayne@69 94
jpayne@69 95 7.1.0 (2024-10-10)
jpayne@69 96 ==================
jpayne@69 97
jpayne@69 98 - Declare support for Python 3.13.
jpayne@69 99
jpayne@69 100 - Fix segmentation faults on Python 3.13.
jpayne@69 101 (`#323 <https://github.com/zopefoundation/zope.interface/issues/323>`_)
jpayne@69 102
jpayne@69 103
jpayne@69 104 7.0.3 (2024-08-27)
jpayne@69 105 ==================
jpayne@69 106
jpayne@69 107 - Fix `Assertion 'memb->type == T_PYSSIZET' failed.` for Python < 3.12.
jpayne@69 108 (`#319 <https://github.com/zopefoundation/zope.interface/issues/319>`_)
jpayne@69 109
jpayne@69 110
jpayne@69 111 7.0.2 (2024-08-26)
jpayne@69 112 ==================
jpayne@69 113
jpayne@69 114 - Fix reference-counting bug in C module initialization (broken in 7.0).
jpayne@69 115 (`#316 <https://github.com/zopefoundation/zope.interface/issues/316>`_)
jpayne@69 116
jpayne@69 117
jpayne@69 118 7.0.1 (2024-08-06)
jpayne@69 119 ==================
jpayne@69 120
jpayne@69 121 - Fix subclassability of ``ObjectSpecificationDescriptor`` (broken in 7.0).
jpayne@69 122 (`#312 <https://github.com/zopefoundation/zope.interface/issues/312>`_)
jpayne@69 123
jpayne@69 124
jpayne@69 125 7.0 (2024-08-06)
jpayne@69 126 ================
jpayne@69 127
jpayne@69 128 - Enable heap-based types (PEP 384) for Python >= 3.11.
jpayne@69 129
jpayne@69 130 - Adopt multi-phase module initialization (PEP 489).
jpayne@69 131
jpayne@69 132 - Drop support for Python 3.7.
jpayne@69 133
jpayne@69 134
jpayne@69 135 6.4.post2 (2024-05-24)
jpayne@69 136 ======================
jpayne@69 137
jpayne@69 138 - Publish missing Windows wheels, second attempt.
jpayne@69 139 (`#295 <https://github.com/zopefoundation/zope.interface/issues/295>`_)
jpayne@69 140
jpayne@69 141
jpayne@69 142 6.4.post1 (2024-05-23)
jpayne@69 143 ======================
jpayne@69 144
jpayne@69 145 - Publish missing Windows wheels.
jpayne@69 146 (`#295 <https://github.com/zopefoundation/zope.interface/issues/295>`_)
jpayne@69 147
jpayne@69 148
jpayne@69 149 6.4.post0 (2024-05-22)
jpayne@69 150 ======================
jpayne@69 151
jpayne@69 152 - The sdist of version 6.4 was uploaded to PyPI as
jpayne@69 153 ``zope_interface-6.4.tar.gz`` instead of ``zope.interface-6.4-py2.tar.gz``
jpayne@69 154 which cannot be installed by ``zc.buildout``. This release is a re-release
jpayne@69 155 of version 6.4 with the correct sdist name.
jpayne@69 156 (`#298 <https://github.com/zopefoundation/zope.interface/issues/298>`_)
jpayne@69 157
jpayne@69 158
jpayne@69 159 6.4 (2024-05-15)
jpayne@69 160 ================
jpayne@69 161
jpayne@69 162 - Adjust for incompatible changes in Python 3.13b1.
jpayne@69 163 (`#292 <https://github.com/zopefoundation/zope.interface/issues/292>`_)
jpayne@69 164
jpayne@69 165 - Build windows wheels on GHA.
jpayne@69 166
jpayne@69 167 6.3 (2024-04-12)
jpayne@69 168 ================
jpayne@69 169
jpayne@69 170 - Add preliminary support for Python 3.13 as of 3.13a6.
jpayne@69 171
jpayne@69 172
jpayne@69 173 6.2 (2024-02-16)
jpayne@69 174 ================
jpayne@69 175
jpayne@69 176 - Add preliminary support for Python 3.13 as of 3.13a3.
jpayne@69 177
jpayne@69 178 - Add support to use the pipe (``|``) syntax for ``typing.Union``.
jpayne@69 179 (`#280 <https://github.com/zopefoundation/zope.interface/issues/280>`_)
jpayne@69 180
jpayne@69 181
jpayne@69 182 6.1 (2023-10-05)
jpayne@69 183 ================
jpayne@69 184
jpayne@69 185 - Build Linux binary wheels for Python 3.12.
jpayne@69 186
jpayne@69 187 - Add support for Python 3.12.
jpayne@69 188
jpayne@69 189 - Fix building of the docs for non-final versions.
jpayne@69 190
jpayne@69 191
jpayne@69 192 6.0 (2023-03-17)
jpayne@69 193 ================
jpayne@69 194
jpayne@69 195 - Build Linux binary wheels for Python 3.11.
jpayne@69 196
jpayne@69 197 - Drop support for Python 2.7, 3.5, 3.6.
jpayne@69 198
jpayne@69 199 - Fix test deprecation warning on Python 3.11.
jpayne@69 200
jpayne@69 201 - Add preliminary support for Python 3.12 as of 3.12a5.
jpayne@69 202
jpayne@69 203 - Drop:
jpayne@69 204
jpayne@69 205 + `zope.interface.implements`
jpayne@69 206 + `zope.interface.implementsOnly`
jpayne@69 207 + `zope.interface.classProvides`
jpayne@69 208
jpayne@69 209
jpayne@69 210 5.5.2 (2022-11-17)
jpayne@69 211 ==================
jpayne@69 212
jpayne@69 213 - Add support for building arm64 wheels on macOS.
jpayne@69 214
jpayne@69 215
jpayne@69 216 5.5.1 (2022-11-03)
jpayne@69 217 ==================
jpayne@69 218
jpayne@69 219 - Add support for final Python 3.11 release.
jpayne@69 220
jpayne@69 221
jpayne@69 222 5.5.0 (2022-10-10)
jpayne@69 223 ==================
jpayne@69 224
jpayne@69 225 - Add support for Python 3.10 and 3.11 (as of 3.11.0rc2).
jpayne@69 226
jpayne@69 227 - Add missing Trove classifier showing support for Python 3.9.
jpayne@69 228
jpayne@69 229 - Add some more entries to ``zope.interface.interfaces.__all__``.
jpayne@69 230
jpayne@69 231 - Disable unsafe math optimizations in C code. See `pull request 262
jpayne@69 232 <https://github.com/zopefoundation/zope.interface/pull/262>`_.
jpayne@69 233
jpayne@69 234
jpayne@69 235 5.4.0 (2021-04-15)
jpayne@69 236 ==================
jpayne@69 237
jpayne@69 238 - Make the C implementation of the ``__providedBy__`` descriptor stop
jpayne@69 239 ignoring all errors raised when accessing the instance's
jpayne@69 240 ``__provides__``. Now it behaves like the Python version and only
jpayne@69 241 catches ``AttributeError``. The previous behaviour could lead to
jpayne@69 242 crashing the interpreter in cases of recursion and errors. See
jpayne@69 243 `issue 239 <https://github.com/zopefoundation/zope.interface/issues>`_.
jpayne@69 244
jpayne@69 245 - Update the ``repr()`` and ``str()`` of various objects to be shorter
jpayne@69 246 and more informative. In many cases, the ``repr()`` is now something
jpayne@69 247 that can be evaluated to produce an equal object. For example, what
jpayne@69 248 was previously printed as ``<implementedBy builtins.list>`` is now
jpayne@69 249 shown as ``classImplements(list, IMutableSequence, IIterable)``. See
jpayne@69 250 `issue 236 <https://github.com/zopefoundation/zope.interface/issues/236>`_.
jpayne@69 251
jpayne@69 252 - Make ``Declaration.__add__`` (as in ``implementedBy(Cls) +
jpayne@69 253 ISomething``) try harder to preserve a consistent resolution order
jpayne@69 254 when the two arguments share overlapping pieces of the interface
jpayne@69 255 inheritance hierarchy. Previously, the right hand side was always
jpayne@69 256 put at the end of the resolution order, which could easily produce
jpayne@69 257 invalid orders. See `issue 193
jpayne@69 258 <https://github.com/zopefoundation/zope.interface/issues/193>`_.
jpayne@69 259
jpayne@69 260 5.3.0 (2020-03-21)
jpayne@69 261 ==================
jpayne@69 262
jpayne@69 263 - No changes from 5.3.0a1
jpayne@69 264
jpayne@69 265
jpayne@69 266 5.3.0a1 (2021-03-18)
jpayne@69 267 ====================
jpayne@69 268
jpayne@69 269 - Improve the repr of ``zope.interface.Provides`` to remove ambiguity
jpayne@69 270 about what is being provided. This is especially helpful diagnosing
jpayne@69 271 IRO issues.
jpayne@69 272
jpayne@69 273 - Allow subclasses of ``BaseAdapterRegistry`` (including
jpayne@69 274 ``AdapterRegistry`` and ``VerifyingAdapterRegistry``) to have
jpayne@69 275 control over the data structures. This allows persistent
jpayne@69 276 implementations such as those based on ZODB to choose more scalable
jpayne@69 277 options (e.g., BTrees instead of dicts). See `issue 224
jpayne@69 278 <https://github.com/zopefoundation/zope.interface/issues/224>`_.
jpayne@69 279
jpayne@69 280 - Fix a reference counting issue in ``BaseAdapterRegistry`` that could
jpayne@69 281 lead to references to interfaces being kept around even when all
jpayne@69 282 utilities/adapters/subscribers providing that interface have been
jpayne@69 283 removed. This is mostly an issue for persistent implementations.
jpayne@69 284 Note that this only corrects the issue moving forward, it does not
jpayne@69 285 solve any already corrupted reference counts. See `issue 227
jpayne@69 286 <https://github.com/zopefoundation/zope.interface/issues/227>`_.
jpayne@69 287
jpayne@69 288 - Add the method ``BaseAdapterRegistry.rebuild()``. This can be used
jpayne@69 289 to fix the reference counting issue mentioned above, as well as to
jpayne@69 290 update the data structures when custom data types have changed.
jpayne@69 291
jpayne@69 292 - Add the interface method ``IAdapterRegistry.subscribed()`` and
jpayne@69 293 implementation ``BaseAdapterRegistry.subscribed()`` for querying
jpayne@69 294 directly registered subscribers. See `issue 230
jpayne@69 295 <https://github.com/zopefoundation/zope.interface/issues/230>`_.
jpayne@69 296
jpayne@69 297 - Add the maintenance method
jpayne@69 298 ``Components.rebuildUtilityRegistryFromLocalCache()``. Most users
jpayne@69 299 will not need this, but it can be useful if the ``Components.utilities``
jpayne@69 300 registry is suspected to be out of sync with the ``Components``
jpayne@69 301 object itself (this might happen to persistent ``Components``
jpayne@69 302 implementations in the face of bugs).
jpayne@69 303
jpayne@69 304 - Fix the ``Provides`` and ``ClassProvides`` descriptors to stop
jpayne@69 305 allowing redundant interfaces (those already implemented by the
jpayne@69 306 underlying class or meta class) to produce an inconsistent
jpayne@69 307 resolution order. This is similar to the change in ``@implementer``
jpayne@69 308 in 5.1.0, and resolves inconsistent resolution orders with
jpayne@69 309 ``zope.proxy`` and ``zope.location``. See `issue 207
jpayne@69 310 <https://github.com/zopefoundation/zope.interface/issues/207>`_.
jpayne@69 311
jpayne@69 312 5.2.0 (2020-11-05)
jpayne@69 313 ==================
jpayne@69 314
jpayne@69 315 - Add documentation section ``Persistency and Equality``
jpayne@69 316 (`#218 <https://github.com/zopefoundation/zope.interface/issues/218>`_).
jpayne@69 317
jpayne@69 318 - Create arm64 wheels.
jpayne@69 319
jpayne@69 320 - Add support for Python 3.9.
jpayne@69 321
jpayne@69 322
jpayne@69 323 5.1.2 (2020-10-01)
jpayne@69 324 ==================
jpayne@69 325
jpayne@69 326 - Make sure to call each invariant only once when validating invariants.
jpayne@69 327 Previously, invariants could be called multiple times because when an
jpayne@69 328 invariant is defined in an interface, it's found by in all interfaces
jpayne@69 329 inheriting from that interface. See `pull request 215
jpayne@69 330 <https://github.com/zopefoundation/zope.interface/pull/215/>`_.
jpayne@69 331
jpayne@69 332 5.1.1 (2020-09-30)
jpayne@69 333 ==================
jpayne@69 334
jpayne@69 335 - Fix the method definitions of ``IAdapterRegistry.subscribe``,
jpayne@69 336 ``subscriptions`` and ``subscribers``. Previously, they all were
jpayne@69 337 defined to accept a ``name`` keyword argument, but subscribers have
jpayne@69 338 no names and the implementation of that interface did not accept
jpayne@69 339 that argument. See `issue 208
jpayne@69 340 <https://github.com/zopefoundation/zope.interface/issues/208>`_.
jpayne@69 341
jpayne@69 342 - Fix a potential reference leak in the C optimizations. Previously,
jpayne@69 343 applications that dynamically created unique ``Specification``
jpayne@69 344 objects (e.g., used ``@implementer`` on dynamic classes) could
jpayne@69 345 notice a growth of small objects over time leading to increased
jpayne@69 346 garbage collection times. See `issue 216
jpayne@69 347 <https://github.com/zopefoundation/zope.interface/issues/216>`_.
jpayne@69 348
jpayne@69 349 .. caution::
jpayne@69 350
jpayne@69 351 This leak could prevent interfaces used as the bases of
jpayne@69 352 other interfaces from being garbage collected. Those interfaces
jpayne@69 353 will now be collected.
jpayne@69 354
jpayne@69 355 One way in which this would manifest was that ``weakref.ref``
jpayne@69 356 objects (and things built upon them, like
jpayne@69 357 ``Weak[Key|Value]Dictionary``) would continue to have access to
jpayne@69 358 the original object even if there were no other visible
jpayne@69 359 references to Python and the original object *should* have been
jpayne@69 360 collected. This could be especially problematic for the
jpayne@69 361 ``WeakKeyDictionary`` when combined with dynamic or local
jpayne@69 362 (created in the scope of a function) interfaces, since interfaces
jpayne@69 363 are hashed based just on their name and module name. See the
jpayne@69 364 linked issue for an example of a resulting ``KeyError``.
jpayne@69 365
jpayne@69 366 Note that such potential errors are not new, they are just once
jpayne@69 367 again a possibility.
jpayne@69 368
jpayne@69 369 5.1.0 (2020-04-08)
jpayne@69 370 ==================
jpayne@69 371
jpayne@69 372 - Make ``@implementer(*iface)`` and ``classImplements(cls, *iface)``
jpayne@69 373 ignore redundant interfaces. If the class already implements an
jpayne@69 374 interface through inheritance, it is no longer redeclared
jpayne@69 375 specifically for *cls*. This solves many instances of inconsistent
jpayne@69 376 resolution orders, while still allowing the interface to be declared
jpayne@69 377 for readability and maintenance purposes. See `issue 199
jpayne@69 378 <https://github.com/zopefoundation/zope.interface/issues/199>`_.
jpayne@69 379
jpayne@69 380 - Remove all bare ``except:`` statements. Previously, when accessing
jpayne@69 381 special attributes such as ``__provides__``, ``__providedBy__``,
jpayne@69 382 ``__class__`` and ``__conform__``, this package wrapped such access
jpayne@69 383 in a bare ``except:`` statement, meaning that many errors could pass
jpayne@69 384 silently; typically this would result in a fallback path being taken
jpayne@69 385 and sometimes (like with ``providedBy()``) the result would be
jpayne@69 386 non-sensical. This is especially true when those attributes are
jpayne@69 387 implemented with descriptors. Now, only ``AttributeError`` is
jpayne@69 388 caught. This makes errors more obvious.
jpayne@69 389
jpayne@69 390 Obviously, this means that some exceptions will be propagated
jpayne@69 391 differently than before. In particular, ``RuntimeError`` raised by
jpayne@69 392 Acquisition in the case of circular containment will now be
jpayne@69 393 propagated. Previously, when adapting such a broken object, a
jpayne@69 394 ``TypeError`` would be the common result, but now it will be a more
jpayne@69 395 informative ``RuntimeError``.
jpayne@69 396
jpayne@69 397 In addition, ZODB errors like ``POSKeyError`` could now be
jpayne@69 398 propagated where previously they would ignored by this package.
jpayne@69 399
jpayne@69 400 See `issue 200 <https://github.com/zopefoundation/zope.interface/issues/200>`_.
jpayne@69 401
jpayne@69 402 - Require that the second argument (*bases*) to ``InterfaceClass`` is
jpayne@69 403 a tuple. This only matters when directly using ``InterfaceClass`` to
jpayne@69 404 create new interfaces dynamically. Previously, an individual
jpayne@69 405 interface was allowed, but did not work correctly. Now it is
jpayne@69 406 consistent with ``type`` and requires a tuple.
jpayne@69 407
jpayne@69 408 - Let interfaces define custom ``__adapt__`` methods. This implements
jpayne@69 409 the other side of the :pep:`246` adaptation protocol: objects being
jpayne@69 410 adapted could already implement ``__conform__`` if they know about
jpayne@69 411 the interface, and now interfaces can implement ``__adapt__`` if
jpayne@69 412 they know about particular objects. There is no performance penalty
jpayne@69 413 for interfaces that do not supply custom ``__adapt__`` methods.
jpayne@69 414
jpayne@69 415 This includes the ability to add new methods, or override existing
jpayne@69 416 interface methods using the new ``@interfacemethod`` decorator.
jpayne@69 417
jpayne@69 418 See `issue 3 <https://github.com/zopefoundation/zope.interface/issues/3>`_.
jpayne@69 419
jpayne@69 420 - Make the internal singleton object returned by APIs like
jpayne@69 421 ``implementedBy`` and ``directlyProvidedBy`` for objects that
jpayne@69 422 implement or provide no interfaces more immutable. Previously an
jpayne@69 423 internal cache could be mutated. See `issue 204
jpayne@69 424 <https://github.com/zopefoundation/zope.interface/issues/204>`_.
jpayne@69 425
jpayne@69 426 5.0.2 (2020-03-30)
jpayne@69 427 ==================
jpayne@69 428
jpayne@69 429 - Ensure that objects that implement no interfaces (such as direct
jpayne@69 430 subclasses of ``object``) still include ``Interface`` itself in
jpayne@69 431 their ``__iro___`` and ``__sro___``. This fixes adapter registry
jpayne@69 432 lookups for such objects when the adapter is registered for
jpayne@69 433 ``Interface``. See `issue 197
jpayne@69 434 <https://github.com/zopefoundation/zope.interface/issues/197>`_.
jpayne@69 435
jpayne@69 436
jpayne@69 437 5.0.1 (2020-03-21)
jpayne@69 438 ==================
jpayne@69 439
jpayne@69 440 - Ensure the resolution order for ``InterfaceClass`` is consistent.
jpayne@69 441 See `issue 192 <https://github.com/zopefoundation/zope.interface/issues/192>`_.
jpayne@69 442
jpayne@69 443 - Ensure the resolution order for ``collections.OrderedDict`` is
jpayne@69 444 consistent on CPython 2. (It was already consistent on Python 3 and PyPy).
jpayne@69 445
jpayne@69 446 - Fix the handling of the ``ZOPE_INTERFACE_STRICT_IRO`` environment
jpayne@69 447 variable. Previously, ``ZOPE_INTERFACE_STRICT_RO`` was read, in
jpayne@69 448 contrast with the documentation. See `issue 194
jpayne@69 449 <https://github.com/zopefoundation/zope.interface/issues/194>`_.
jpayne@69 450
jpayne@69 451
jpayne@69 452 5.0.0 (2020-03-19)
jpayne@69 453 ==================
jpayne@69 454
jpayne@69 455 - Make an internal singleton object returned by APIs like
jpayne@69 456 ``implementedBy`` and ``directlyProvidedBy`` immutable. Previously,
jpayne@69 457 it was fully mutable and allowed changing its ``__bases___``. That
jpayne@69 458 could potentially lead to wrong results in pathological corner
jpayne@69 459 cases. See `issue 158
jpayne@69 460 <https://github.com/zopefoundation/zope.interface/issues/158>`_.
jpayne@69 461
jpayne@69 462 - Support the ``PURE_PYTHON`` environment variable at runtime instead
jpayne@69 463 of just at wheel build time. A value of 0 forces the C extensions to
jpayne@69 464 be used (even on PyPy) failing if they aren't present. Any other
jpayne@69 465 value forces the Python implementation to be used, ignoring the C
jpayne@69 466 extensions. See `PR 151 <https://github.com/zopefoundation/zope.interface/pull/151>`_.
jpayne@69 467
jpayne@69 468 - Cache the result of ``__hash__`` method in ``InterfaceClass`` as a
jpayne@69 469 speed optimization. The method is called very often (i.e several
jpayne@69 470 hundred thousand times during Plone 5.2 startup). Because the hash value never
jpayne@69 471 changes it can be cached. This improves test performance from 0.614s
jpayne@69 472 down to 0.575s (1.07x faster). In a real world Plone case a reindex
jpayne@69 473 index came down from 402s to 320s (1.26x faster). See `PR 156
jpayne@69 474 <https://github.com/zopefoundation/zope.interface/pull/156>`_.
jpayne@69 475
jpayne@69 476 - Change the C classes ``SpecificationBase`` and its subclass
jpayne@69 477 ``ClassProvidesBase`` to store implementation attributes in their structures
jpayne@69 478 instead of their instance dictionaries. This eliminates the use of
jpayne@69 479 an undocumented private C API function, and helps make some
jpayne@69 480 instances require less memory. See `PR 154 <https://github.com/zopefoundation/zope.interface/pull/154>`_.
jpayne@69 481
jpayne@69 482 - Reduce memory usage in other ways based on observations of usage
jpayne@69 483 patterns in Zope (3) and Plone code bases.
jpayne@69 484
jpayne@69 485 - Specifications with no dependents are common (more than 50%) so
jpayne@69 486 avoid allocating a ``WeakKeyDictionary`` unless we need it.
jpayne@69 487 - Likewise, tagged values are relatively rare, so don't allocate a
jpayne@69 488 dictionary to hold them until they are used.
jpayne@69 489 - Use ``__slots___`` or the C equivalent ``tp_members`` in more
jpayne@69 490 common places. Note that this removes the ability to set arbitrary
jpayne@69 491 instance variables on certain objects.
jpayne@69 492 See `PR 155 <https://github.com/zopefoundation/zope.interface/pull/155>`_.
jpayne@69 493
jpayne@69 494 The changes in this release resulted in a 7% memory reduction after
jpayne@69 495 loading about 6,000 modules that define about 2,200 interfaces.
jpayne@69 496
jpayne@69 497 .. caution::
jpayne@69 498
jpayne@69 499 Details of many private attributes have changed, and external use
jpayne@69 500 of those private attributes may break. In particular, the
jpayne@69 501 lifetime and default value of ``_v_attrs`` has changed.
jpayne@69 502
jpayne@69 503 - Remove support for hashing uninitialized interfaces. This could only
jpayne@69 504 be done by subclassing ``InterfaceClass``. This has generated a
jpayne@69 505 warning since it was first added in 2011 (3.6.5). Please call the
jpayne@69 506 ``InterfaceClass`` constructor or otherwise set the appropriate
jpayne@69 507 fields in your subclass before attempting to hash or sort it. See
jpayne@69 508 `issue 157 <https://github.com/zopefoundation/zope.interface/issues/157>`_.
jpayne@69 509
jpayne@69 510 - Remove unneeded override of the ``__hash__`` method from
jpayne@69 511 ``zope.interface.declarations.Implements``. Watching a reindex index
jpayne@69 512 process in ZCatalog with on a Py-Spy after 10k samples the time for
jpayne@69 513 ``.adapter._lookup`` was reduced from 27.5s to 18.8s (~1.5x faster).
jpayne@69 514 Overall reindex index time shrunk from 369s to 293s (1.26x faster).
jpayne@69 515 See `PR 161
jpayne@69 516 <https://github.com/zopefoundation/zope.interface/pull/161>`_.
jpayne@69 517
jpayne@69 518 - Make the Python implementation closer to the C implementation by
jpayne@69 519 ignoring all exceptions, not just ``AttributeError``, during (parts
jpayne@69 520 of) interface adaptation. See `issue 163
jpayne@69 521 <https://github.com/zopefoundation/zope.interface/issues/163>`_.
jpayne@69 522
jpayne@69 523 - Micro-optimization in ``.adapter._lookup`` , ``.adapter._lookupAll``
jpayne@69 524 and ``.adapter._subscriptions``: By loading ``components.get`` into
jpayne@69 525 a local variable before entering the loop a bytcode "LOAD_FAST 0
jpayne@69 526 (components)" in the loop can be eliminated. In Plone, while running
jpayne@69 527 all tests, average speedup of the "owntime" of ``_lookup`` is ~5x.
jpayne@69 528 See `PR 167
jpayne@69 529 <https://github.com/zopefoundation/zope.interface/pull/167>`_.
jpayne@69 530
jpayne@69 531 - Add ``__all__`` declarations to all modules. This helps tools that
jpayne@69 532 do auto-completion and documentation and results in less cluttered
jpayne@69 533 results. Wildcard ("*") are not recommended and may be affected. See
jpayne@69 534 `issue 153
jpayne@69 535 <https://github.com/zopefoundation/zope.interface/issues/153>`_.
jpayne@69 536
jpayne@69 537 - Fix ``verifyClass`` and ``verifyObject`` for builtin types like
jpayne@69 538 ``dict`` that have methods taking an optional, unnamed argument with
jpayne@69 539 no default value like ``dict.pop``. On PyPy3, the verification is
jpayne@69 540 strict, but on PyPy2 (as on all versions of CPython) those methods
jpayne@69 541 cannot be verified and are ignored. See `issue 118
jpayne@69 542 <https://github.com/zopefoundation/zope.interface/issues/118>`_.
jpayne@69 543
jpayne@69 544 - Update the common interfaces ``IEnumerableMapping``,
jpayne@69 545 ``IExtendedReadMapping``, ``IExtendedWriteMapping``,
jpayne@69 546 ``IReadSequence`` and ``IUniqueMemberWriteSequence`` to no longer
jpayne@69 547 require methods that were removed from Python 3 on Python 3, such as
jpayne@69 548 ``__setslice___``. Now, ``dict``, ``list`` and ``tuple`` properly
jpayne@69 549 verify as ``IFullMapping``, ``ISequence`` and ``IReadSequence,``
jpayne@69 550 respectively on all versions of Python.
jpayne@69 551
jpayne@69 552 - Add human-readable ``__str___`` and ``__repr___`` to ``Attribute``
jpayne@69 553 and ``Method``. These contain the name of the defining interface
jpayne@69 554 and the attribute. For methods, it also includes the signature.
jpayne@69 555
jpayne@69 556 - Change the error strings raised by ``verifyObject`` and
jpayne@69 557 ``verifyClass``. They now include more human-readable information
jpayne@69 558 and exclude extraneous lines and spaces. See `issue 170
jpayne@69 559 <https://github.com/zopefoundation/zope.interface/issues/170>`_.
jpayne@69 560
jpayne@69 561 .. caution:: This will break consumers (such as doctests) that
jpayne@69 562 depended on the exact error messages.
jpayne@69 563
jpayne@69 564 - Make ``verifyObject`` and ``verifyClass`` report all errors, if the
jpayne@69 565 candidate object has multiple detectable violations. Previously they
jpayne@69 566 reported only the first error. See `issue
jpayne@69 567 <https://github.com/zopefoundation/zope.interface/issues/171>`_.
jpayne@69 568
jpayne@69 569 Like the above, this will break consumers depending on the exact
jpayne@69 570 output of error messages if more than one error is present.
jpayne@69 571
jpayne@69 572 - Add ``zope.interface.common.collections``,
jpayne@69 573 ``zope.interface.common.numbers``, and ``zope.interface.common.io``.
jpayne@69 574 These modules define interfaces based on the ABCs defined in the
jpayne@69 575 standard library ``collections.abc``, ``numbers`` and ``io``
jpayne@69 576 modules, respectively. Importing these modules will make the
jpayne@69 577 standard library concrete classes that are registered with those
jpayne@69 578 ABCs declare the appropriate interface. See `issue 138
jpayne@69 579 <https://github.com/zopefoundation/zope.interface/issues/138>`_.
jpayne@69 580
jpayne@69 581 - Add ``zope.interface.common.builtins``. This module defines
jpayne@69 582 interfaces of common builtin types, such as ``ITextString`` and
jpayne@69 583 ``IByteString``, ``IDict``, etc. These interfaces extend the
jpayne@69 584 appropriate interfaces from ``collections`` and ``numbers``, and the
jpayne@69 585 standard library classes implement them after importing this module.
jpayne@69 586 This is intended as a replacement for third-party packages like
jpayne@69 587 `dolmen.builtins <https://pypi.org/project/dolmen.builtins/>`_.
jpayne@69 588 See `issue 138 <https://github.com/zopefoundation/zope.interface/issues/138>`_.
jpayne@69 589
jpayne@69 590 - Make ``providedBy()`` and ``implementedBy()`` respect ``super``
jpayne@69 591 objects. For instance, if class ``Derived`` implements ``IDerived``
jpayne@69 592 and extends ``Base`` which in turn implements ``IBase``, then
jpayne@69 593 ``providedBy(super(Derived, derived))`` will return ``[IBase]``.
jpayne@69 594 Previously it would have returned ``[IDerived]`` (in general, it
jpayne@69 595 would previously have returned whatever would have been returned
jpayne@69 596 without ``super``).
jpayne@69 597
jpayne@69 598 Along with this change, adapter registries will unpack ``super``
jpayne@69 599 objects into their ``__self___`` before passing it to the factory.
jpayne@69 600 Together, this means that ``component.getAdapter(super(Derived,
jpayne@69 601 self), ITarget)`` is now meaningful.
jpayne@69 602
jpayne@69 603 See `issue 11 <https://github.com/zopefoundation/zope.interface/issues/11>`_.
jpayne@69 604
jpayne@69 605 - Fix a potential interpreter crash in the low-level adapter
jpayne@69 606 registry lookup functions. See issue 11.
jpayne@69 607
jpayne@69 608 - Adopt Python's standard `C3 resolution order
jpayne@69 609 <https://www.python.org/download/releases/2.3/mro/>`_ to compute the
jpayne@69 610 ``__iro__`` and ``__sro__`` of interfaces, with tweaks to support
jpayne@69 611 additional cases that are common in interfaces but disallowed for
jpayne@69 612 Python classes. Previously, an ad-hoc ordering that made no
jpayne@69 613 particular guarantees was used.
jpayne@69 614
jpayne@69 615 This has many beneficial properties, including the fact that base
jpayne@69 616 interface and base classes tend to appear near the end of the
jpayne@69 617 resolution order instead of the beginning. The resolution order in
jpayne@69 618 general should be more predictable and consistent.
jpayne@69 619
jpayne@69 620 .. caution::
jpayne@69 621 In some cases, especially with complex interface inheritance
jpayne@69 622 trees or when manually providing or implementing interfaces, the
jpayne@69 623 resulting IRO may be quite different. This may affect adapter
jpayne@69 624 lookup.
jpayne@69 625
jpayne@69 626 The C3 order enforces some constraints in order to be able to
jpayne@69 627 guarantee a sensible ordering. Older versions of zope.interface did
jpayne@69 628 not impose similar constraints, so it was possible to create
jpayne@69 629 interfaces and declarations that are inconsistent with the C3
jpayne@69 630 constraints. In that event, zope.interface will still produce a
jpayne@69 631 resolution order equal to the old order, but it won't be guaranteed
jpayne@69 632 to be fully C3 compliant. In the future, strict enforcement of C3
jpayne@69 633 order may be the default.
jpayne@69 634
jpayne@69 635 A set of environment variables and module constants allows
jpayne@69 636 controlling several aspects of this new behaviour. It is possible to
jpayne@69 637 request warnings about inconsistent resolution orders encountered,
jpayne@69 638 and even to forbid them. Differences between the C3 resolution order
jpayne@69 639 and the previous order can be logged, and, in extreme cases, the
jpayne@69 640 previous order can still be used (this ability will be removed in
jpayne@69 641 the future). For details, see the documentation for
jpayne@69 642 ``zope.interface.ro``.
jpayne@69 643
jpayne@69 644 - Make inherited tagged values in interfaces respect the resolution
jpayne@69 645 order (``__iro__``), as method and attribute lookup does. Previously
jpayne@69 646 tagged values could give inconsistent results. See `issue 190
jpayne@69 647 <https://github.com/zopefoundation/zope.interface/issues/190>`_.
jpayne@69 648
jpayne@69 649 - Add ``getDirectTaggedValue`` (and related methods) to interfaces to
jpayne@69 650 allow accessing tagged values irrespective of inheritance. See
jpayne@69 651 `issue 190
jpayne@69 652 <https://github.com/zopefoundation/zope.interface/issues/190>`_.
jpayne@69 653
jpayne@69 654 - Ensure that ``Interface`` is always the last item in the ``__iro__``
jpayne@69 655 and ``__sro__``. This is usually the case, but if classes that do
jpayne@69 656 not implement any interfaces are part of a class inheritance
jpayne@69 657 hierarchy, ``Interface`` could be assigned too high a priority.
jpayne@69 658 See `issue 8 <https://github.com/zopefoundation/zope.interface/issues/8>`_.
jpayne@69 659
jpayne@69 660 - Implement sorting, equality, and hashing in C for ``Interface``
jpayne@69 661 objects. In micro benchmarks, this makes those operations 40% to 80%
jpayne@69 662 faster. This translates to a 20% speed up in querying adapters.
jpayne@69 663
jpayne@69 664 Note that this changes certain implementation details. In
jpayne@69 665 particular, ``InterfaceClass`` now has a non-default metaclass, and
jpayne@69 666 it is enforced that ``__module__`` in instances of
jpayne@69 667 ``InterfaceClass`` is read-only.
jpayne@69 668
jpayne@69 669 See `PR 183 <https://github.com/zopefoundation/zope.interface/pull/183>`_.
jpayne@69 670
jpayne@69 671
jpayne@69 672 4.7.2 (2020-03-10)
jpayne@69 673 ==================
jpayne@69 674
jpayne@69 675 - Remove deprecated use of setuptools features. See `issue 30
jpayne@69 676 <https://github.com/zopefoundation/zope.interface/issues/30>`_.
jpayne@69 677
jpayne@69 678
jpayne@69 679 4.7.1 (2019-11-11)
jpayne@69 680 ==================
jpayne@69 681
jpayne@69 682 - Use Python 3 syntax in the documentation. See `issue 119
jpayne@69 683 <https://github.com/zopefoundation/zope.interface/issues/119>`_.
jpayne@69 684
jpayne@69 685
jpayne@69 686 4.7.0 (2019-11-11)
jpayne@69 687 ==================
jpayne@69 688
jpayne@69 689 - Drop support for Python 3.4.
jpayne@69 690
jpayne@69 691 - Change ``queryTaggedValue``, ``getTaggedValue``,
jpayne@69 692 ``getTaggedValueTags`` in interfaces. They now include inherited
jpayne@69 693 values by following ``__bases__``. See `PR 144
jpayne@69 694 <https://github.com/zopefoundation/zope.interface/pull/144>`_.
jpayne@69 695
jpayne@69 696 .. caution:: This may be a breaking change.
jpayne@69 697
jpayne@69 698 - Add support for Python 3.8.
jpayne@69 699
jpayne@69 700
jpayne@69 701 4.6.0 (2018-10-23)
jpayne@69 702 ==================
jpayne@69 703
jpayne@69 704 - Add support for Python 3.7
jpayne@69 705
jpayne@69 706 - Fix ``verifyObject`` for class objects with staticmethods on
jpayne@69 707 Python 3. See `issue 126
jpayne@69 708 <https://github.com/zopefoundation/zope.interface/issues/126>`_.
jpayne@69 709
jpayne@69 710
jpayne@69 711 4.5.0 (2018-04-19)
jpayne@69 712 ==================
jpayne@69 713
jpayne@69 714 - Drop support for 3.3, avoid accidental dependence breakage via setup.py.
jpayne@69 715 See `PR 110 <https://github.com/zopefoundation/zope.interface/pull/110>`_.
jpayne@69 716 - Allow registering and unregistering instance methods as listeners.
jpayne@69 717 See `issue 12 <https://github.com/zopefoundation/zope.interface/issues/12>`_
jpayne@69 718 and `PR 102 <https://github.com/zopefoundation/zope.interface/pull/102>`_.
jpayne@69 719 - Synchronize and simplify zope/__init__.py. See `issue 114
jpayne@69 720 <https://github.com/zopefoundation/zope.interface/issues/114>`_
jpayne@69 721
jpayne@69 722
jpayne@69 723 4.4.3 (2017-09-22)
jpayne@69 724 ==================
jpayne@69 725
jpayne@69 726 - Avoid exceptions when the ``__annotations__`` attribute is added to
jpayne@69 727 interface definitions with Python 3.x type hints. See `issue 98
jpayne@69 728 <https://github.com/zopefoundation/zope.interface/issues/98>`_.
jpayne@69 729 - Fix the possibility of a rare crash in the C extension when
jpayne@69 730 deallocating items. See `issue 100
jpayne@69 731 <https://github.com/zopefoundation/zope.interface/issues/100>`_.
jpayne@69 732
jpayne@69 733
jpayne@69 734 4.4.2 (2017-06-14)
jpayne@69 735 ==================
jpayne@69 736
jpayne@69 737 - Fix a regression storing
jpayne@69 738 ``zope.component.persistentregistry.PersistentRegistry`` instances.
jpayne@69 739 See `issue 85 <https://github.com/zopefoundation/zope.interface/issues/85>`_.
jpayne@69 740
jpayne@69 741 - Fix a regression that could lead to the utility registration cache
jpayne@69 742 of ``Components`` getting out of sync. See `issue 93
jpayne@69 743 <https://github.com/zopefoundation/zope.interface/issues/93>`_.
jpayne@69 744
jpayne@69 745 4.4.1 (2017-05-13)
jpayne@69 746 ==================
jpayne@69 747
jpayne@69 748 - Simplify the caching of utility-registration data. In addition to
jpayne@69 749 simplification, avoids spurious test failures when checking for
jpayne@69 750 leaks in tests with persistent registries. See `pull 84
jpayne@69 751 <https://github.com/zopefoundation/zope.interface/pull/84>`_.
jpayne@69 752
jpayne@69 753 - Raise ``ValueError`` when non-text names are passed to adapter registry
jpayne@69 754 methods: prevents corruption of lookup caches.
jpayne@69 755
jpayne@69 756 4.4.0 (2017-04-21)
jpayne@69 757 ==================
jpayne@69 758
jpayne@69 759 - Avoid a warning from the C compiler.
jpayne@69 760 (https://github.com/zopefoundation/zope.interface/issues/71)
jpayne@69 761
jpayne@69 762 - Add support for Python 3.6.
jpayne@69 763
jpayne@69 764 4.3.3 (2016-12-13)
jpayne@69 765 ==================
jpayne@69 766
jpayne@69 767 - Correct typos and ReST formatting errors in documentation.
jpayne@69 768
jpayne@69 769 - Add API documentation for the adapter registry.
jpayne@69 770
jpayne@69 771 - Ensure that the ``LICENSE.txt`` file is included in built wheels.
jpayne@69 772
jpayne@69 773 - Fix C optimizations broken on Py3k. See the Python bug at:
jpayne@69 774 http://bugs.python.org/issue15657
jpayne@69 775 (https://github.com/zopefoundation/zope.interface/issues/60)
jpayne@69 776
jpayne@69 777
jpayne@69 778 4.3.2 (2016-09-05)
jpayne@69 779 ==================
jpayne@69 780
jpayne@69 781 - Fix equality testing of ``implementedBy`` objects and proxies.
jpayne@69 782 (https://github.com/zopefoundation/zope.interface/issues/55)
jpayne@69 783
jpayne@69 784
jpayne@69 785 4.3.1 (2016-08-31)
jpayne@69 786 ==================
jpayne@69 787
jpayne@69 788 - Support Components subclasses that are not hashable.
jpayne@69 789 (https://github.com/zopefoundation/zope.interface/issues/53)
jpayne@69 790
jpayne@69 791
jpayne@69 792 4.3.0 (2016-08-31)
jpayne@69 793 ==================
jpayne@69 794
jpayne@69 795 - Add the ability to sort the objects returned by ``implementedBy``.
jpayne@69 796 This is compatible with the way interface classes sort so they can
jpayne@69 797 be used together in ordered containers like BTrees.
jpayne@69 798 (https://github.com/zopefoundation/zope.interface/issues/42)
jpayne@69 799
jpayne@69 800 - Make ``setuptools`` a hard dependency of ``setup.py``.
jpayne@69 801 (https://github.com/zopefoundation/zope.interface/issues/13)
jpayne@69 802
jpayne@69 803 - Change a linear algorithm (O(n)) in ``Components.registerUtility`` and
jpayne@69 804 ``Components.unregisterUtility`` into a dictionary lookup (O(1)) for
jpayne@69 805 hashable components. This substantially improves the time taken to
jpayne@69 806 manipulate utilities in large registries at the cost of some
jpayne@69 807 additional memory usage. (https://github.com/zopefoundation/zope.interface/issues/46)
jpayne@69 808
jpayne@69 809
jpayne@69 810 4.2.0 (2016-06-10)
jpayne@69 811 ==================
jpayne@69 812
jpayne@69 813 - Add support for Python 3.5
jpayne@69 814
jpayne@69 815 - Drop support for Python 2.6 and 3.2.
jpayne@69 816
jpayne@69 817
jpayne@69 818 4.1.3 (2015-10-05)
jpayne@69 819 ==================
jpayne@69 820
jpayne@69 821 - Fix installation without a C compiler on Python 3.5
jpayne@69 822 (https://github.com/zopefoundation/zope.interface/issues/24).
jpayne@69 823
jpayne@69 824
jpayne@69 825 4.1.2 (2014-12-27)
jpayne@69 826 ==================
jpayne@69 827
jpayne@69 828 - Add support for PyPy3.
jpayne@69 829
jpayne@69 830 - Remove unittest assertions deprecated in Python3.x.
jpayne@69 831
jpayne@69 832 - Add ``zope.interface.document.asReStructuredText``, which formats the
jpayne@69 833 generated text for an interface using ReST double-backtick markers.
jpayne@69 834
jpayne@69 835
jpayne@69 836 4.1.1 (2014-03-19)
jpayne@69 837 ==================
jpayne@69 838
jpayne@69 839 - Add support for Python 3.4.
jpayne@69 840
jpayne@69 841
jpayne@69 842 4.1.0 (2014-02-05)
jpayne@69 843 ==================
jpayne@69 844
jpayne@69 845 - Update ``boostrap.py`` to version 2.2.
jpayne@69 846
jpayne@69 847 - Add ``@named(name)`` declaration, that specifies the component name, so it
jpayne@69 848 does not have to be passed in during registration.
jpayne@69 849
jpayne@69 850
jpayne@69 851 4.0.5 (2013-02-28)
jpayne@69 852 ==================
jpayne@69 853
jpayne@69 854 - Fix a bug where a decorated method caused false positive failures on
jpayne@69 855 ``verifyClass()``.
jpayne@69 856
jpayne@69 857
jpayne@69 858 4.0.4 (2013-02-21)
jpayne@69 859 ==================
jpayne@69 860
jpayne@69 861 - Fix a bug that was revealed by porting zope.traversing. During a loop, the
jpayne@69 862 loop body modified a weakref dict causing a ``RuntimeError`` error.
jpayne@69 863
jpayne@69 864 4.0.3 (2012-12-31)
jpayne@69 865 ==================
jpayne@69 866
jpayne@69 867 - Fleshed out PyPI Trove classifiers.
jpayne@69 868
jpayne@69 869 4.0.2 (2012-11-21)
jpayne@69 870 ==================
jpayne@69 871
jpayne@69 872 - Add support for Python 3.3.
jpayne@69 873
jpayne@69 874 - Restored ability to install the package in the absence of ``setuptools``.
jpayne@69 875
jpayne@69 876 - LP #1055223: Fix test which depended on dictionary order and failed randomly
jpayne@69 877 in Python 3.3.
jpayne@69 878
jpayne@69 879 4.0.1 (2012-05-22)
jpayne@69 880 ==================
jpayne@69 881
jpayne@69 882 - Drop explicit ``DeprecationWarnings`` for "class advice" APIS (these
jpayne@69 883 APIs are still deprecated under Python 2.x, and still raise an exception
jpayne@69 884 under Python 3.x, but no longer cause a warning to be emitted under
jpayne@69 885 Python 2.x).
jpayne@69 886
jpayne@69 887 4.0.0 (2012-05-16)
jpayne@69 888 ==================
jpayne@69 889
jpayne@69 890 - Automated build of Sphinx HTML docs and running doctest snippets via tox.
jpayne@69 891
jpayne@69 892 - Deprecate the "class advice" APIs from ``zope.interface.declarations``:
jpayne@69 893 ``implements``, ``implementsOnly``, and ``classProvides``. In their place,
jpayne@69 894 prefer the equivalent class decorators: ``@implementer``,
jpayne@69 895 ``@implementer_only``, and ``@provider``. Code which uses the deprecated
jpayne@69 896 APIs will not work as expected under Py3k.
jpayne@69 897
jpayne@69 898 - Remove use of '2to3' and associated fixers when installing under Py3k.
jpayne@69 899 The code is now in a "compatible subset" which supports Python 2.6, 2.7,
jpayne@69 900 and 3.2, including PyPy 1.8 (the version compatible with the 2.7 language
jpayne@69 901 spec).
jpayne@69 902
jpayne@69 903 - Drop explicit support for Python 2.4 / 2.5 / 3.1.
jpayne@69 904
jpayne@69 905 - Add support for PyPy.
jpayne@69 906
jpayne@69 907 - Add support for continuous integration using ``tox`` and ``jenkins``.
jpayne@69 908
jpayne@69 909 - Add 'setup.py dev' alias (runs ``setup.py develop`` plus installs
jpayne@69 910 ``nose`` and ``coverage``).
jpayne@69 911
jpayne@69 912 - Add 'setup.py docs' alias (installs ``Sphinx`` and dependencies).
jpayne@69 913
jpayne@69 914 - Replace all unittest coverage previously accomplished via doctests with
jpayne@69 915 unittests. The doctests have been moved into a ``docs`` section, managed
jpayne@69 916 as a Sphinx collection.
jpayne@69 917
jpayne@69 918 - LP #910987: Ensure that the semantics of the ``lookup`` method of
jpayne@69 919 ``zope.interface.adapter.LookupBase`` are the same in both the C and
jpayne@69 920 Python implementations.
jpayne@69 921
jpayne@69 922 - LP #900906: Avoid exceptions due to tne new ``__qualname__`` attribute
jpayne@69 923 added in Python 3.3 (see PEP 3155 for rationale). Thanks to Antoine
jpayne@69 924 Pitrou for the patch.
jpayne@69 925
jpayne@69 926 3.8.0 (2011-09-22)
jpayne@69 927 ==================
jpayne@69 928
jpayne@69 929 - New module ``zope.interface.registry``. This is code moved from
jpayne@69 930 ``zope.component.registry`` which implements a basic nonperistent component
jpayne@69 931 registry as ``zope.interface.registry.Components``. This class was moved
jpayne@69 932 from ``zope.component`` to make porting systems (such as Pyramid) that rely
jpayne@69 933 only on a basic component registry to Python 3 possible without needing to
jpayne@69 934 port the entirety of the ``zope.component`` package. Backwards
jpayne@69 935 compatibility import shims have been left behind in ``zope.component``, so
jpayne@69 936 this change will not break any existing code.
jpayne@69 937
jpayne@69 938 - New ``tests_require`` dependency: ``zope.event`` to test events sent by
jpayne@69 939 Components implementation. The ``zope.interface`` package does not have a
jpayne@69 940 hard dependency on ``zope.event``, but if ``zope.event`` is importable, it
jpayne@69 941 will send component registration events when methods of an instance of
jpayne@69 942 ``zope.interface.registry.Components`` are called.
jpayne@69 943
jpayne@69 944 - New interfaces added to support ``zope.interface.registry.Components``
jpayne@69 945 addition: ``ComponentLookupError``, ``Invalid``, ``IObjectEvent``,
jpayne@69 946 ``ObjectEvent``, ``IComponentLookup``, ``IRegistration``,
jpayne@69 947 ``IUtilityRegistration``, ``IAdapterRegistration``,
jpayne@69 948 ``ISubscriptionAdapterRegistration``, ``IHandlerRegistration``,
jpayne@69 949 ``IRegistrationEvent``, ``RegistrationEvent``, ``IRegistered``,
jpayne@69 950 ``Registered``, ``IUnregistered``, ``Unregistered``,
jpayne@69 951 ``IComponentRegistry``, and ``IComponents``.
jpayne@69 952
jpayne@69 953 - No longer Python 2.4 compatible (tested under 2.5, 2.6, 2.7, and 3.2).
jpayne@69 954
jpayne@69 955 3.7.0 (2011-08-13)
jpayne@69 956 ==================
jpayne@69 957
jpayne@69 958 - Move changes from 3.6.2 - 3.6.5 to a new 3.7.x release line.
jpayne@69 959
jpayne@69 960 3.6.7 (2011-08-20)
jpayne@69 961 ==================
jpayne@69 962
jpayne@69 963 - Fix sporadic failures on x86-64 platforms in tests of rich comparisons
jpayne@69 964 of interfaces.
jpayne@69 965
jpayne@69 966 3.6.6 (2011-08-13)
jpayne@69 967 ==================
jpayne@69 968
jpayne@69 969 - LP #570942: Now correctly compare interfaces from different modules but
jpayne@69 970 with the same names.
jpayne@69 971
jpayne@69 972 N.B.: This is a less intrusive / destabilizing fix than the one applied in
jpayne@69 973 3.6.3: we only fix the underlying cmp-alike function, rather than adding
jpayne@69 974 the other "rich comparison" functions.
jpayne@69 975
jpayne@69 976 - Revert to software as released with 3.6.1 for "stable" 3.6 release branch.
jpayne@69 977
jpayne@69 978 3.6.5 (2011-08-11)
jpayne@69 979 ==================
jpayne@69 980
jpayne@69 981 - LP #811792: work around buggy behavior in some subclasses of
jpayne@69 982 ``zope.interface.interface.InterfaceClass``, which invoke ``__hash__``
jpayne@69 983 before initializing ``__module__`` and ``__name__``. The workaround
jpayne@69 984 returns a fixed constant hash in such cases, and issues a ``UserWarning``.
jpayne@69 985
jpayne@69 986 - LP #804832: Under PyPy, ``zope.interface`` should not build its C
jpayne@69 987 extension. Also, prevent attempting to build it under Jython.
jpayne@69 988
jpayne@69 989 - Add a tox.ini for easier xplatform testing.
jpayne@69 990
jpayne@69 991 - Fix testing deprecation warnings issued when tested under Py3K.
jpayne@69 992
jpayne@69 993 3.6.4 (2011-07-04)
jpayne@69 994 ==================
jpayne@69 995
jpayne@69 996 - LP 804951: InterfaceClass instances were unhashable under Python 3.x.
jpayne@69 997
jpayne@69 998 3.6.3 (2011-05-26)
jpayne@69 999 ==================
jpayne@69 1000
jpayne@69 1001 - LP #570942: Now correctly compare interfaces from different modules but
jpayne@69 1002 with the same names.
jpayne@69 1003
jpayne@69 1004 3.6.2 (2011-05-17)
jpayne@69 1005 ==================
jpayne@69 1006
jpayne@69 1007 - Moved detailed documentation out-of-line from PyPI page, linking instead to
jpayne@69 1008 http://docs.zope.org/zope.interface .
jpayne@69 1009
jpayne@69 1010 - Fixes for small issues when running tests under Python 3.2 using
jpayne@69 1011 ``zope.testrunner``.
jpayne@69 1012
jpayne@69 1013 - LP # 675064: Specify return value type for C optimizations module init
jpayne@69 1014 under Python 3: undeclared value caused warnings, and segfaults on some
jpayne@69 1015 64 bit architectures.
jpayne@69 1016
jpayne@69 1017 - setup.py now raises RuntimeError if you don't have Distutils installed when
jpayne@69 1018 running under Python 3.
jpayne@69 1019
jpayne@69 1020 3.6.1 (2010-05-03)
jpayne@69 1021 ==================
jpayne@69 1022
jpayne@69 1023 - A non-ASCII character in the changelog made 3.6.0 uninstallable on
jpayne@69 1024 Python 3 systems with another default encoding than UTF-8.
jpayne@69 1025
jpayne@69 1026 - Fix compiler warnings under GCC 4.3.3.
jpayne@69 1027
jpayne@69 1028 3.6.0 (2010-04-29)
jpayne@69 1029 ==================
jpayne@69 1030
jpayne@69 1031 - LP #185974: Clear the cache used by ``Specificaton.get`` inside
jpayne@69 1032 ``Specification.changed``. Thanks to Jacob Holm for the patch.
jpayne@69 1033
jpayne@69 1034 - Add support for Python 3.1. Contributors:
jpayne@69 1035
jpayne@69 1036 Lennart Regebro
jpayne@69 1037 Martin v Loewis
jpayne@69 1038 Thomas Lotze
jpayne@69 1039 Wolfgang Schnerring
jpayne@69 1040
jpayne@69 1041 The 3.1 support is completely backwards compatible. However, the implements
jpayne@69 1042 syntax used under Python 2.X does not work under 3.X, since it depends on
jpayne@69 1043 how metaclasses are implemented and this has changed. Instead it now supports
jpayne@69 1044 a decorator syntax (also under Python 2.X)::
jpayne@69 1045
jpayne@69 1046 class Foo:
jpayne@69 1047 implements(IFoo)
jpayne@69 1048 ...
jpayne@69 1049
jpayne@69 1050 can now also be written::
jpayne@69 1051
jpayne@69 1052 @implementer(IFoo):
jpayne@69 1053 class Foo:
jpayne@69 1054 ...
jpayne@69 1055
jpayne@69 1056 There are 2to3 fixers available to do this change automatically in the
jpayne@69 1057 zope.fixers package.
jpayne@69 1058
jpayne@69 1059 - Python 2.3 is no longer supported.
jpayne@69 1060
jpayne@69 1061
jpayne@69 1062 3.5.4 (2009-12-23)
jpayne@69 1063 ==================
jpayne@69 1064
jpayne@69 1065 - Use the standard Python doctest module instead of zope.testing.doctest, which
jpayne@69 1066 has been deprecated.
jpayne@69 1067
jpayne@69 1068
jpayne@69 1069 3.5.3 (2009-12-08)
jpayne@69 1070 ==================
jpayne@69 1071
jpayne@69 1072 - Fix an edge case: make providedBy() work when a class has '__provides__' in
jpayne@69 1073 its __slots__ (see http://thread.gmane.org/gmane.comp.web.zope.devel/22490)
jpayne@69 1074
jpayne@69 1075
jpayne@69 1076 3.5.2 (2009-07-01)
jpayne@69 1077 ==================
jpayne@69 1078
jpayne@69 1079 - BaseAdapterRegistry.unregister, unsubscribe: Remove empty portions of
jpayne@69 1080 the data structures when something is removed. This avoids leaving
jpayne@69 1081 references to global objects (interfaces) that may be slated for
jpayne@69 1082 removal from the calling application.
jpayne@69 1083
jpayne@69 1084
jpayne@69 1085 3.5.1 (2009-03-18)
jpayne@69 1086 ==================
jpayne@69 1087
jpayne@69 1088 - verifyObject: use getattr instead of hasattr to test for object attributes
jpayne@69 1089 in order to let exceptions other than AttributeError raised by properties
jpayne@69 1090 propagate to the caller
jpayne@69 1091
jpayne@69 1092 - Add Sphinx-based documentation building to the package buildout
jpayne@69 1093 configuration. Use the ``bin/docs`` command after buildout.
jpayne@69 1094
jpayne@69 1095 - Improve package description a bit. Unify changelog entries formatting.
jpayne@69 1096
jpayne@69 1097 - Change package's mailing list address to zope-dev at zope.org as
jpayne@69 1098 zope3-dev at zope.org is now retired.
jpayne@69 1099
jpayne@69 1100
jpayne@69 1101 3.5.0 (2008-10-26)
jpayne@69 1102 ==================
jpayne@69 1103
jpayne@69 1104 - Fix declaration of _zope_interface_coptimizations, it's not a top level
jpayne@69 1105 package.
jpayne@69 1106
jpayne@69 1107 - Add a DocTestSuite for odd.py module, so their tests are run.
jpayne@69 1108
jpayne@69 1109 - Allow to bootstrap on Jython.
jpayne@69 1110
jpayne@69 1111 - Fix https://bugs.launchpad.net/zope3/3.3/+bug/98388: ISpecification
jpayne@69 1112 was missing a declaration for __iro__.
jpayne@69 1113
jpayne@69 1114 - Add optional code optimizations support, which allows the building
jpayne@69 1115 of C code optimizations to fail (Jython).
jpayne@69 1116
jpayne@69 1117 - Replace `_flatten` with a non-recursive implementation, effectively making
jpayne@69 1118 it 3x faster.
jpayne@69 1119
jpayne@69 1120
jpayne@69 1121 3.4.1 (2007-10-02)
jpayne@69 1122 ==================
jpayne@69 1123
jpayne@69 1124 - Fix a setup bug that prevented installation from source on systems
jpayne@69 1125 without setuptools.
jpayne@69 1126
jpayne@69 1127
jpayne@69 1128 3.4.0 (2007-07-19)
jpayne@69 1129 ==================
jpayne@69 1130
jpayne@69 1131 - Final release for 3.4.0.
jpayne@69 1132
jpayne@69 1133
jpayne@69 1134 3.4.0b3 (2007-05-22)
jpayne@69 1135 ====================
jpayne@69 1136
jpayne@69 1137
jpayne@69 1138 - When checking whether an object is already registered, use identity
jpayne@69 1139 comparison, to allow adding registering with picky custom comparison methods.
jpayne@69 1140
jpayne@69 1141
jpayne@69 1142 3.3.0.1 (2007-01-03)
jpayne@69 1143 ====================
jpayne@69 1144
jpayne@69 1145 - Made a reference to OverflowWarning, which disappeared in Python
jpayne@69 1146 2.5, conditional.
jpayne@69 1147
jpayne@69 1148
jpayne@69 1149 3.3.0 (2007/01/03)
jpayne@69 1150 ==================
jpayne@69 1151
jpayne@69 1152 New Features
jpayne@69 1153 ------------
jpayne@69 1154
jpayne@69 1155 - Refactor the adapter-lookup algorithim to make it much simpler and faster.
jpayne@69 1156
jpayne@69 1157 Also, implement more of the adapter-lookup logic in C, making
jpayne@69 1158 debugging of application code easier, since there is less
jpayne@69 1159 infrastructre code to step through.
jpayne@69 1160
jpayne@69 1161 - Treat objects without interface declarations as if they
jpayne@69 1162 declared that they provide ``zope.interface.Interface``.
jpayne@69 1163
jpayne@69 1164 - Add a number of richer new adapter-registration interfaces
jpayne@69 1165 that provide greater control and introspection.
jpayne@69 1166
jpayne@69 1167 - Add a new interface decorator to zope.interface that allows the
jpayne@69 1168 setting of tagged values on an interface at definition time (see
jpayne@69 1169 zope.interface.taggedValue).
jpayne@69 1170
jpayne@69 1171 Bug Fixes
jpayne@69 1172 ---------
jpayne@69 1173
jpayne@69 1174 - A bug in multi-adapter lookup sometimes caused incorrect adapters to
jpayne@69 1175 be returned.
jpayne@69 1176
jpayne@69 1177
jpayne@69 1178 3.2.0.2 (2006-04-15)
jpayne@69 1179 ====================
jpayne@69 1180
jpayne@69 1181 - Fix packaging bug: 'package_dir' must be a *relative* path.
jpayne@69 1182
jpayne@69 1183
jpayne@69 1184 3.2.0.1 (2006-04-14)
jpayne@69 1185 ====================
jpayne@69 1186
jpayne@69 1187 - Packaging change: suppress inclusion of 'setup.cfg' in 'sdist' builds.
jpayne@69 1188
jpayne@69 1189
jpayne@69 1190 3.2.0 (2006-01-05)
jpayne@69 1191 ==================
jpayne@69 1192
jpayne@69 1193 - Corresponds to the version of the zope.interface package shipped as part of
jpayne@69 1194 the Zope 3.2.0 release.
jpayne@69 1195
jpayne@69 1196
jpayne@69 1197 3.1.0 (2005-10-03)
jpayne@69 1198 ==================
jpayne@69 1199
jpayne@69 1200 - Corresponds to the version of the zope.interface package shipped as part of
jpayne@69 1201 the Zope 3.1.0 release.
jpayne@69 1202
jpayne@69 1203 - Made attribute resolution order consistent with component lookup order,
jpayne@69 1204 i.e. new-style class MRO semantics.
jpayne@69 1205
jpayne@69 1206 - Deprecate 'isImplementedBy' and 'isImplementedByInstancesOf' APIs in
jpayne@69 1207 favor of 'implementedBy' and 'providedBy'.
jpayne@69 1208
jpayne@69 1209
jpayne@69 1210 3.0.1 (2005-07-27)
jpayne@69 1211 ==================
jpayne@69 1212
jpayne@69 1213 - Corresponds to the version of the zope.interface package shipped as part of
jpayne@69 1214 the Zope X3.0.1 release.
jpayne@69 1215
jpayne@69 1216 - Fix a bug reported by James Knight, which caused adapter registries
jpayne@69 1217 to fail occasionally to reflect declaration changes.
jpayne@69 1218
jpayne@69 1219
jpayne@69 1220 3.0.0 (2004-11-07)
jpayne@69 1221 ==================
jpayne@69 1222
jpayne@69 1223 - Corresponds to the version of the zope.interface package shipped as part of
jpayne@69 1224 the Zope X3.0.0 release.