Metadata-Version: 2.4
Name: propcache
Version: 0.5.2
Summary: Accelerated property cache
Home-page: https://github.com/aio-libs/propcache
Author: Andrew Svetlov
Author-email: andrew.svetlov@gmail.com
Maintainer: aiohttp team <team@aiohttp.org>
Maintainer-email: team@aiohttp.org
License: Apache-2.0
Project-URL: Chat: Matrix, https://matrix.to/#/#aio-libs:matrix.org
Project-URL: Chat: Matrix Space, https://matrix.to/#/#aio-libs-space:matrix.org
Project-URL: CI: GitHub Workflows, https://github.com/aio-libs/propcache/actions?query=branch:master
Project-URL: Code of Conduct, https://github.com/aio-libs/.github/blob/master/CODE_OF_CONDUCT.md
Project-URL: Coverage: codecov, https://codecov.io/github/aio-libs/propcache
Project-URL: Docs: Changelog, https://propcache.readthedocs.io/en/latest/changes/
Project-URL: Docs: RTD, https://propcache.readthedocs.io
Project-URL: GitHub: issues, https://github.com/aio-libs/propcache/issues
Project-URL: GitHub: repo, https://github.com/aio-libs/propcache
Keywords: cython,cext,propcache
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Cython
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
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: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Description-Content-Type: text/x-rst
License-File: LICENSE
License-File: NOTICE
Dynamic: license-file

propcache
=========

The module provides a fast implementation of cached properties for Python 3.10+.

.. image:: https://github.com/aio-libs/propcache/actions/workflows/ci-cd.yml/badge.svg
  :target: https://github.com/aio-libs/propcache/actions?query=workflow%3ACI
  :align: right

.. image:: https://codecov.io/gh/aio-libs/propcache/branch/master/graph/badge.svg
  :target: https://codecov.io/gh/aio-libs/propcache

.. image:: https://badge.fury.io/py/propcache.svg
    :target: https://badge.fury.io/py/propcache


.. image:: https://readthedocs.org/projects/propcache/badge/?version=latest
    :target: https://propcache.readthedocs.io


.. image:: https://img.shields.io/pypi/pyversions/propcache.svg
    :target: https://pypi.python.org/pypi/propcache

.. image:: https://img.shields.io/matrix/aio-libs:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs%3Amatrix.org&logo=matrix&server_fqdn=matrix.org&style=flat
   :target: https://matrix.to/#/%23aio-libs:matrix.org
   :alt: Matrix Room — #aio-libs:matrix.org

.. image:: https://img.shields.io/matrix/aio-libs-space:matrix.org?label=Discuss%20on%20Matrix%20at%20%23aio-libs-space%3Amatrix.org&logo=matrix&server_fqdn=matrix.org&style=flat
   :target: https://matrix.to/#/%23aio-libs-space:matrix.org
   :alt: Matrix Space — #aio-libs-space:matrix.org

Introduction
------------

The API is designed to be nearly identical to the built-in ``functools.cached_property`` class,
except for the additional ``under_cached_property`` class which uses ``self._cache``
instead of ``self.__dict__`` to store the cached values and prevents ``__set__`` from being called.

For full documentation please read https://propcache.readthedocs.io.

Installation
------------

::

   $ pip install propcache

The library is Python 3 only!

PyPI contains binary wheels for Linux, Windows and MacOS.  If you want to install
``propcache`` on another operating system where wheels are not provided,
the the tarball will be used to compile the library from
the source code. It requires a C compiler and and Python headers installed.

To skip the compilation you must explicitly opt-in by using a PEP 517
configuration setting ``pure-python``, or setting the ``PROPCACHE_NO_EXTENSIONS``
environment variable to a non-empty value, e.g.:

.. code-block:: console

   $ pip install propcache --config-settings=pure-python=false

Please note that the pure-Python (uncompiled) version is much slower. However,
PyPy always uses a pure-Python implementation, and, as such, it is unaffected
by this variable.


API documentation
------------------

The documentation is located at https://propcache.readthedocs.io.

Source code
-----------

The project is hosted on GitHub_

Please file an issue on the `bug tracker
<https://github.com/aio-libs/propcache/issues>`_ if you have found a bug
or have some suggestion in order to improve the library.

Discussion list
---------------

*aio-libs* google group: https://groups.google.com/forum/#!forum/aio-libs

Feel free to post your questions and ideas here.


Authors and License
-------------------

The ``propcache`` package is derived from ``yarl`` which is written by Andrew Svetlov.

It's *Apache 2* licensed and freely available.


.. _GitHub: https://github.com/aio-libs/propcache

=========
Changelog
=========

..
    You should *NOT* be adding new change log entries to this file, this
    file is managed by towncrier. You *may* edit previous change logs to
    fix problems like typo corrections or such.
    To add a new change log entry, please see
    https://pip.pypa.io/en/latest/development/#adding-a-news-entry
    we named the news folder "changes".

    WARNING: Don't drop the next directive!

.. towncrier release notes start

0.5.2
=====

*(2026-05-08)*


No significant changes.


----


0.5.1
=====

*(2026-05-08)*


No significant changes.


----


0.5.0
=====

*(2026-05-08)*


Features
--------

- Added support for newer type hints and remove ``Optional`` and ``Union`` from all annotations
  -- by :user:`Vizonex`

  *Related issues and pull requests on GitHub:*
  :issue:`193`.


Removals and backward incompatible breaking changes
---------------------------------------------------

- Dropped support for Python 3.9 as it has reached end of life.

  *Related issues and pull requests on GitHub:*
  :issue:`216`.


Packaging updates and notes for downstreams
-------------------------------------------

- Changed the Cython build dependency from ``~= 3.1.0`` to ``>= 3.2.0``,
  removing the upper version bound to avoid conflicts for downstream packagers
  -- by :user:`jameshilliard` and :user:`gundalow`.

  The upstream Cython version is pinned to 3.2.4 in the CI/CD environment.

  *Related issues and pull requests on GitHub:*
  :issue:`184`, :issue:`188`, :issue:`214`.

- Start building and shipping riscv64 wheels
  -- by :user:`justeph`.

  *Related issues and pull requests on GitHub:*
  :issue:`194`.

- The :pep:`517` build backend now supports a new ``build-inplace``
  config setting (and ``PROPCACHE_BUILD_INPLACE`` environment variable)
  for controlling whether to build the project in-tree or in a
  temporary directory. It only affects wheels and is set up to build
  in a temporary directory by default. It does not affect editable
  wheel builds; they will keep being built in-tree regardless.

  Here's an example of using this setting:

  .. code-block:: console

     $ python -m build --config-setting=build-inplace=true

  Additionally, when building wheels in an automatically created
  temporary directory, the build backend now normalizes the
  respective file system path to a deterministic source checkout
  directory by injecting the ``-ffile-prefix-map`` compiler option
  into the ``CFLAGS`` environment variable, as suggested by known
  `reproducible build practices
  <https://reproducible-builds.org/docs/build-path/>`__.

  The effect is that downstreams will get reproducible build results.

  *Related issues and pull requests on GitHub:*
  :issue:`218`.


----


0.4.1
=====

*(2025-10-08)*


Bug fixes
---------

- Fixed reference leak caused by ``Py_INCREF`` because Cython has its own reference counter systems -- by :user:`Vizonex`.

  *Related issues and pull requests on GitHub:*
  :issue:`162`.


Contributor-facing changes
--------------------------

- Fixes the default value for the ``os``
  parameter in ``reusable-build-wheel.yml``
  to be ``ubuntu-latest`` instead of
  ``ubuntu``.

  *Related issues and pull requests on GitHub:*
  :issue:`155`.


----


0.4.0
=====

*(2025-10-04)*


Features
--------

- Optimized propcache by replacing sentinel :py:class:`object` for checking if
  the :py:class:`object` is ``NULL`` and changed :py:class:`dict` API for
  Python C-API -- by :user:`Vizonex`.

  *Related issues and pull requests on GitHub:*
  :issue:`121`.


Contributor-facing changes
--------------------------

- Builds have been added for arm64 Windows
  wheels and the ``reusable-build-wheel.yml``
  workflow has been modified to allow for
  an OS value (``windows-11-arm``) which
  does not include the ``-latest`` postfix
  -- by :user:`finnagin`.

  *Related issues and pull requests on GitHub:*
  :issue:`133`.

- Added CI for CPython 3.14 -- by :user:`kumaraditya303`.

  *Related issues and pull requests on GitHub:*
  :issue:`140`.


----


0.3.2
=====

*(2025-06-09)*


Improved documentation
----------------------

- Fixed incorrect decorator usage in the :func:`~propcache.api.under_cached_property` example code -- by :user:`meanmail`.

  *Related issues and pull requests on GitHub:*
  :issue:`109`.


Packaging updates and notes for downstreams
-------------------------------------------

- Updated to use Cython 3.1 universally across the build path -- by :user:`lysnikolaou`.

  *Related issues and pull requests on GitHub:*
  :issue:`117`.

- Made Cython line tracing opt-in via the ``with-cython-tracing`` build config setting -- by :user:`bdraco`.

  Previously, line tracing was enabled by default in :file:`pyproject.toml`, which caused build issues for some users and made wheels nearly twice as slow.

  Now line tracing is only enabled when explicitly requested via ``pip install . --config-setting=with-cython-tracing=true`` or by setting the ``PROPCACHE_CYTHON_TRACING`` environment variable.

  *Related issues and pull requests on GitHub:*
  :issue:`118`.


----


0.3.1
=====

*(2025-03-25)*


Bug fixes
---------

- Improved typing annotations, fixing some type errors under correct usage
  and improving typing robustness generally -- by :user:`Dreamsorcerer`.

  *Related issues and pull requests on GitHub:*
  :issue:`103`.


----


0.3.0
=====

*(2025-02-20)*


Features
--------

- Implemented support for the free-threaded build of CPython 3.13 -- by :user:`lysnikolaou`.

  *Related issues and pull requests on GitHub:*
  :issue:`84`.


Packaging updates and notes for downstreams
-------------------------------------------

- Started building wheels for the free-threaded build of CPython 3.13 -- by :user:`lysnikolaou`.

  *Related issues and pull requests on GitHub:*
  :issue:`84`.


Contributor-facing changes
--------------------------

- GitHub Actions CI/CD is now configured to manage caching pip-ecosystem
  dependencies using `re-actors/cache-python-deps`_ -- an action by
  :user:`webknjaz` that takes into account ABI stability and the exact
  version of Python runtime.

  .. _`re-actors/cache-python-deps`:
     https://github.com/marketplace/actions/cache-python-deps

  *Related issues and pull requests on GitHub:*
  :issue:`93`.


----


0.2.1
=====

*(2024-12-01)*


Bug fixes
---------

- Stopped implicitly allowing the use of Cython pre-release versions when
  building the distribution package -- by :user:`ajsanchezsanz` and
  :user:`markgreene74`.

  *Related commits on GitHub:*
  :commit:`64df0a6`.

- Fixed ``wrapped`` and ``func`` not being accessible in the Cython versions of :func:`propcache.api.cached_property` and :func:`propcache.api.under_cached_property` decorators -- by :user:`bdraco`.

  *Related issues and pull requests on GitHub:*
  :issue:`72`.


Removals and backward incompatible breaking changes
---------------------------------------------------

- Removed support for Python 3.8 as it has reached end of life -- by :user:`bdraco`.

  *Related issues and pull requests on GitHub:*
  :issue:`57`.


Packaging updates and notes for downstreams
-------------------------------------------

- Stopped implicitly allowing the use of Cython pre-release versions when
  building the distribution package -- by :user:`ajsanchezsanz` and
  :user:`markgreene74`.

  *Related commits on GitHub:*
  :commit:`64df0a6`.


----


0.2.0
=====

*(2024-10-07)*


Bug fixes
---------

- Fixed loading the C-extensions on Python 3.8 -- by :user:`bdraco`.

  *Related issues and pull requests on GitHub:*
  :issue:`26`.


Features
--------

- Improved typing for the :func:`propcache.api.under_cached_property` decorator -- by :user:`bdraco`.

  *Related issues and pull requests on GitHub:*
  :issue:`38`.


Improved documentation
----------------------

- Added API documentation for the :func:`propcache.api.cached_property` and :func:`propcache.api.under_cached_property` decorators -- by :user:`bdraco`.

  *Related issues and pull requests on GitHub:*
  :issue:`16`.


Packaging updates and notes for downstreams
-------------------------------------------

- Moved :func:`propcache.api.under_cached_property` and :func:`propcache.api.cached_property` to `propcache.api` -- by :user:`bdraco`.

  Both decorators remain importable from the top-level package, however importing from `propcache.api` is now the recommended way to use them.

  *Related issues and pull requests on GitHub:*
  :issue:`19`, :issue:`24`, :issue:`32`.

- Converted project to use a src layout -- by :user:`bdraco`.

  *Related issues and pull requests on GitHub:*
  :issue:`22`, :issue:`29`, :issue:`37`.


----


0.1.0
=====

*(2024-10-03)*


Features
--------

- Added ``armv7l`` wheels -- by :user:`bdraco`.

  *Related issues and pull requests on GitHub:*
  :issue:`5`.


----


0.0.0
=====

*(2024-10-02)*


- Initial release.
