annotate CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/site-packages/zope.interface-7.2.dist-info/METADATA @ 68:5028fdace37b

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