Metadata-Version: 2.4
Name: ExtensionClass
Version: 6.3
Summary: Metaclass for subclassable extension types
Author-email: Zope Foundation and contributors <zope-dev@zope.dev>
Maintainer-email: Plone Foundation and contributors <zope-dev@zope.dev>
License-Expression: ZPL-2.1
Project-URL: Issues, https://github.com/zopefoundation/ExtensionClass/issues
Project-URL: Source, https://github.com/zopefoundation/ExtensionClass
Project-URL: Changelog, https://github.com/zopefoundation/ExtensionClass/blob/master/CHANGES.rst
Classifier: Development Status :: 6 - Mature
Classifier: Environment :: Web Environment
Classifier: Framework :: Zope
Classifier: Framework :: Zope :: 5
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.10
Description-Content-Type: text/x-rst
License-File: LICENSE.txt
Provides-Extra: test
Requires-Dist: zope.testrunner; extra == "test"
Dynamic: license-file

====================================================
 ExtensionClass and ExtensionClass-related packages
====================================================

ExtensionClass
==============

This package provides a metaclass that allows classes implemented in
extension modules to be subclassed in Python.  Unless you need
ExtensionClasses for legacy applications (e.g. Zope), you probably
want to use Python's new-style classes (available since Python 2.2).

ComputedAttribute
=================

This package provides a way to attach attributes to an
``ExtensionClass`` or instance that are computed by calling a
callable.  This works very much like ``property`` known from new-style
classes, except that a ``ComputedAttribute`` can also be attached to
an instance and that it honours ExtensionClass semantics (which is
useful for retaining Acquisition wrappers, for example).

MethodObject
============

This package lets you attach additional "methods" to ExtensionClasses.
These "methods" are actually implemented by subclassing the
``MethodObject.Method`` class and implementing the ``__call__`` method
there.  Instances of those classes will be bound to the instances
they're attached to and will receive that instance object as a first
parameter (after ``self``).

Change log
==========

6.3 (2026-04-30)
----------------

- Add support for automatically building and publishing Windows/ARM64 wheels.

- Add support for automatically building and publishing source distributions.

- Fix compilation on free-threaded Python 3.14t: use ``Py_REFCNT()`` macro
  instead of direct ``ob_refcnt`` struct access, guard ``im_self`` mutation
  optimization with ``#ifndef Py_GIL_DISABLED``.

- Add CI testing for free-threaded Python 3.14t (Linux).


6.2 (2025-11-16)
----------------

- Move all supported package metadata into ``pyproject.toml``.


6.1 (2025-10-29)
----------------

- Drop support for Python 3.8, 3.9.

- Add support for Python 3.14.


6.0 (2024-09-17)
----------------

- Build Windows wheels on GHA.

- Add support for Python 3.13.

- Drop support for Python 3.7.


5.1 (2023-10-05)
----------------

- Add support for Python 3.12.


5.0 (2023-01-19)
----------------

- Drop support for Python 2.7, 3.5, 3.6.

- Fix deprecation warning in tests.


4.9 (2022-11-17)
----------------

- Add support for building arm64 wheels on macOS.


4.8 (2022-11-03)
----------------

- Update Python 3.11 support to the final release.


4.7 (2022-09-16)
----------------

- Update Python 3.11 support to rc2.

- Disable unsafe math optimizations in C code.
  (`#55 <https://github.com/zopefoundation/ExtensionClass/pull/55>`_)


4.6 (2022-01-14)
----------------

- Add support for Python 3.10 and 3.11 (as of alpha 3).


4.5.1 (2021-06-11)
------------------

- Create wheels for Linux (2010, 2014 and aarch) and MacOS.


4.5.0 (2020-10-07)
------------------

- Drop support for Python 3.4.

- Add support for Python 3.8 and 3.9.

- Fix accessing ``__parent__`` when it is defined as a class attribute
  that is ``None`` (e.g., in subclasses of
  ``zope.conatiner.contained.Contained``). See `issue 24
  <https://github.com/zopefoundation/ExtensionClass/issues/24>`_.


4.4.0 (2018-10-05)
------------------

- Fail if C extensions couldn't be compiled on compatible platforms.

- Add Appveyor configuration to automate building Windows eggs

- Add support for Python 3.7.

- Fix getting attributes that are data descriptors in the Python
  implementation.

- Reach and automatically maintain 100% test coverage.


4.3.0 (2017-02-22)
------------------

- Drop support for Python 3.3.

- Remove unused C macro from ``ExtensionClass.h``.

- Fix C compilation under Windows.


4.2.1 (2017-02-02)
------------------

- Fix problems with computed attribute and property wrapping.


4.2.0 (2017-01-18)
------------------

- Port the C extension to Python 3.

- Add support for Python 3.5 and 3.6.

- Drop support for Python 2.6, 3.2.


4.1.2 (2015-04-03)
------------------

- Fix calling of ``__class_init__`` hook by Python implementation.


4.1.1 (2015-03-20)
------------------

- Avoid wrapping ``__parent__`` in pure-Python version.  Matches
  change made to C version in afb8488.  See issue #3.


4.1 (2014-12-18)
----------------

- Housekeeping changes only.


4.1b1 (2014-11-12)
------------------

- Added compatibility with Python 3.4.


4.1a1 (2013-05-04)
------------------

- Added compatibility with Python 3.2 and 3.3 using the Python reference
  implementation.

- Add Python reference implementation. Used by default on PyPy.


4.0 (2013-02-24)
----------------

- Added trove classifiers to project metadata.


4.0a1 (2011-12-13)
------------------

- Don't create wrappers when retrieving parent pointers.


2.13.2 (2010-06-16)
-------------------

- LP #587760: Handle tp_basicsize correctly.


2.13.1 (2010-04-03)
-------------------

- Removed undeclared testing dependency on zope.testing.

- Removed cruft in ``pickle/pickle.c`` related to removed ``__getnewargs__``.


2.13.0 (2010-02-22)
-------------------

- Avoid defining ``__getnewargs__`` as not to defeat the ZODB persistent
  reference optimization. Refs https://bugs.launchpad.net/zope2/+bug/143657.
  In order to take advantage of this optimization, you need to re-save your
  objects.


2.12.0 (2010-02-14)
-------------------

- Removed old build artifacts and some metadata cleanup.

- Added support for method cache in ExtensionClass. Patch contributed by
  Yoshinori K. Okuji. See https://bugs.launchpad.net/zope2/+bug/486182.


2.11.3 (2009-08-02)
-------------------

- Further 64-bit fixes (Python 2.4 compatibility).


2.11.2 (2009-08-02)
-------------------

- Fixed 64-bit compatibility issues for Python 2.5.x / 2.6.x.  See
  http://www.python.org/dev/peps/pep-0353/ for details.


2.11.1 (2009-02-19)
-------------------

- Initial egg release.
