|
Metadata-Version: 2.4 |
|
Name: frozenlist |
|
Version: 1.7.0 |
|
Summary: A list-like structure which implements collections.abc.MutableSequence |
|
Home-page: https://github.com/aio-libs/frozenlist |
|
Maintainer: aiohttp team <team@aiohttp.org> |
|
Maintainer-email: team@aiohttp.org |
|
License: Apache-2.0 |
|
Project-URL: Chat: Matrix, https://matrix.to/#/ |
|
Project-URL: Chat: Matrix Space, https://matrix.to/#/ |
|
Project-URL: CI: Github Actions, https://github.com/aio-libs/frozenlist/actions |
|
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/frozenlist |
|
Project-URL: Docs: Changelog, https://github.com/aio-libs/frozenlist/blob/master/CHANGES.rst |
|
Project-URL: Docs: RTD, https://frozenlist.aio-libs.org |
|
Project-URL: GitHub: issues, https://github.com/aio-libs/frozenlist/issues |
|
Project-URL: GitHub: repo, https://github.com/aio-libs/frozenlist |
|
Classifier: Development Status :: 5 - Production/Stable |
|
Classifier: Intended Audience :: Developers |
|
Classifier: Operating System :: POSIX |
|
Classifier: Operating System :: MacOS :: MacOS X |
|
Classifier: Operating System :: Microsoft :: Windows |
|
Classifier: Programming Language :: Cython |
|
Classifier: Programming Language :: Python |
|
Classifier: Programming Language :: Python :: 3 |
|
Classifier: Programming Language :: Python :: 3.9 |
|
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 :: Implementation :: CPython |
|
Classifier: Programming Language :: Python :: Implementation :: PyPy |
|
Requires-Python: >=3.9 |
|
Description-Content-Type: text/x-rst |
|
License-File: LICENSE |
|
Dynamic: license-file |
|
|
|
frozenlist |
|
========== |
|
|
|
.. image:: https://github.com/aio-libs/frozenlist/workflows/CI/badge.svg |
|
:target: https://github.com/aio-libs/frozenlist/actions |
|
:alt: GitHub status for master branch |
|
|
|
.. image:: https://codecov.io/gh/aio-libs/frozenlist/branch/master/graph/badge.svg?flag=pytest |
|
:target: https://codecov.io/gh/aio-libs/frozenlist?flags[]=pytest |
|
:alt: codecov.io status for master branch |
|
|
|
.. image:: https://img.shields.io/pypi/v/frozenlist.svg?logo=Python&logoColor=white |
|
:target: https://pypi.org/project/frozenlist |
|
:alt: frozenlist @ PyPI |
|
|
|
.. image:: https://readthedocs.org/projects/frozenlist/badge/?version=latest |
|
:target: https://frozenlist.aio-libs.org |
|
:alt: Read The Docs build status badge |
|
|
|
.. 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 β |
|
|
|
.. 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 β |
|
|
|
Introduction |
|
------------ |
|
|
|
``frozenlist.FrozenList`` is a list-like structure which implements |
|
``collections.abc.MutableSequence``. The list is *mutable* until ``FrozenList.freeze`` |
|
is called, after which list modifications raise ``RuntimeError``: |
|
|
|
|
|
>>> from frozenlist import FrozenList |
|
>>> fl = FrozenList([17, 42]) |
|
>>> fl.append('spam') |
|
>>> fl.append('Vikings') |
|
>>> fl |
|
<FrozenList(frozen=False, [17, 42, 'spam', 'Vikings'])> |
|
>>> fl.freeze() |
|
>>> fl |
|
<FrozenList(frozen=True, [17, 42, 'spam', 'Vikings'])> |
|
>>> fl.frozen |
|
True |
|
>>> fl.append("Monty") |
|
Traceback (most recent call last): |
|
File "<stdin>", line 1, in <module> |
|
File "frozenlist/_frozenlist.pyx", line 97, in frozenlist._frozenlist.FrozenList.append |
|
self._check_frozen() |
|
File "frozenlist/_frozenlist.pyx", line 19, in frozenlist._frozenlist.FrozenList._check_frozen |
|
raise RuntimeError("Cannot modify frozen list.") |
|
RuntimeError: Cannot modify frozen list. |
|
|
|
|
|
FrozenList is also hashable, but only when frozen. Otherwise it also throws a RuntimeError: |
|
|
|
|
|
>>> fl = FrozenList([17, 42, 'spam']) |
|
>>> hash(fl) |
|
Traceback (most recent call last): |
|
File "<stdin>", line 1, in <module> |
|
File "frozenlist/_frozenlist.pyx", line 111, in frozenlist._frozenlist.FrozenList.__hash__ |
|
raise RuntimeError("Cannot hash unfrozen list.") |
|
RuntimeError: Cannot hash unfrozen list. |
|
>>> fl.freeze() |
|
>>> hash(fl) |
|
3713081631934410656 |
|
>>> dictionary = {fl: 'Vikings'} |
|
>>> dictionary |
|
{<FrozenList(frozen=True, [1, 2])>: 'Vikings'} |
|
|
|
|
|
Installation |
|
------------ |
|
|
|
:: |
|
|
|
$ pip install frozenlist |
|
|
|
|
|
Documentation |
|
------------- |
|
|
|
https://frozenlist.aio-libs.org |
|
|
|
Communication channels |
|
---------------------- |
|
|
|
We have a *Matrix Space* ` |
|
<https://matrix.to/#/%23aio-libs-space:matrix.org>`_ which is |
|
also accessible via Gitter. |
|
|
|
License |
|
------- |
|
|
|
``frozenlist`` is offered under the Apache 2 license. |
|
|
|
Source code |
|
----------- |
|
|
|
The project is hosted on GitHub_ |
|
|
|
Please file an issue in the `bug tracker |
|
<https://github.com/aio-libs/frozenlist/issues>`_ if you have found a bug |
|
or have some suggestions to improve the library. |
|
|
|
.. _GitHub: https://github.com/aio-libs/frozenlist |
|
|
|
========= |
|
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/contributing/ |
|
we named the news folder "changes". |
|
|
|
WARNING: Don't drop the next directive! |
|
|
|
.. towncrier release notes start |
|
|
|
v1.7.0 |
|
====== |
|
|
|
*(2025-06-09)* |
|
|
|
|
|
Features |
|
-------- |
|
|
|
- Added deepcopy support to FrozenList -- by `@bdraco <https://github.com/sponsors/bdraco>`__. |
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#659 <https://github.com/aio-libs/frozenlist/issues/659>`__. |
|
|
|
|
|
Packaging updates and notes for downstreams |
|
------------------------------------------- |
|
|
|
- Fixed an issue where ``frozenlist`` binary wheels would be built with debugging symbols and line tracing enabled, which significantly impacted performance. Line tracing is now disabled by default and can only be enabled explicitly -- by `@bdraco <https://github.com/sponsors/bdraco>`__. |
|
|
|
This change ensures that production builds are optimized for performance. Developers who need line tracing for debugging purposes can still enable it by: |
|
|
|
1. Setting the ``FROZENLIST_CYTHON_TRACING`` environment variable |
|
2. Using the ``--config-setting=with-cython-tracing=true`` option with pip |
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#660 <https://github.com/aio-libs/frozenlist/issues/660>`__. |
|
|
|
- Enabled ``PIP_CONSTRAINT`` environment variable in the build configuration to ensure the pinned Cython version from ``requirements/cython.txt`` is used during wheel builds. |
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#661 <https://github.com/aio-libs/frozenlist/issues/661>`__. |
|
|
|
|
|
---- |
|
|
|
|
|
v1.6.2 |
|
====== |
|
|
|
*(2025-06-03)* |
|
|
|
|
|
No significant changes. |
|
|
|
|
|
---- |
|
|
|
|
|
v1.6.1 |
|
====== |
|
|
|
*(2025-06-02)* |
|
|
|
|
|
Bug fixes |
|
--------- |
|
|
|
- Correctly use ``cimport`` for including ``PyBool_FromLong`` -- by `@lysnikolaou <https://github.com/sponsors/lysnikolaou>`__. |
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#653 <https://github.com/aio-libs/frozenlist/issues/653>`__. |
|
|
|
|
|
Packaging updates and notes for downstreams |
|
------------------------------------------- |
|
|
|
- Exclude ``_frozenlist.cpp`` from bdists/wheels -- by `@musicinmybrain <https://github.com/sponsors/musicinmybrain>`__. |
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#649 <https://github.com/aio-libs/frozenlist/issues/649>`__. |
|
|
|
- Updated to use Cython 3.1 universally across the build path -- by `@lysnikolaou <https://github.com/sponsors/lysnikolaou>`__. |
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#654 <https://github.com/aio-libs/frozenlist/issues/654>`__. |
|
|
|
|
|
---- |
|
|
|
|
|
v1.6.0 |
|
====== |
|
|
|
*(2025-04-17)* |
|
|
|
|
|
Bug fixes |
|
--------- |
|
|
|
- Stopped implicitly allowing the use of Cython pre-release versions when |
|
building the distribution package -- by `@ajsanchezsanz <https://github.com/sponsors/ajsanchezsanz>`__ and |
|
`@markgreene74 <https://github.com/sponsors/markgreene74>`__. |
|
|
|
*Related commits on GitHub:* |
|
`41591f2 <https://github.com/aio-libs/frozenlist/commit/41591f2>`__. |
|
|
|
|
|
Features |
|
-------- |
|
|
|
- Implemented support for the free-threaded build of CPython 3.13 -- by `@lysnikolaou <https://github.com/sponsors/lysnikolaou>`__. |
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#618 <https://github.com/aio-libs/frozenlist/issues/618>`__. |
|
|
|
- Started building armv7l wheels -- by `@bdraco <https://github.com/sponsors/bdraco>`__. |
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#642 <https://github.com/aio-libs/frozenlist/issues/642>`__. |
|
|
|
|
|
Packaging updates and notes for downstreams |
|
------------------------------------------- |
|
|
|
- Stopped implicitly allowing the use of Cython pre-release versions when |
|
building the distribution package -- by `@ajsanchezsanz <https://github.com/sponsors/ajsanchezsanz>`__ and |
|
`@markgreene74 <https://github.com/sponsors/markgreene74>`__. |
|
|
|
*Related commits on GitHub:* |
|
`41591f2 <https://github.com/aio-libs/frozenlist/commit/41591f2>`__. |
|
|
|
- Started building wheels for the free-threaded build of CPython 3.13 -- by `@lysnikolaou <https://github.com/sponsors/lysnikolaou>`__. |
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#618 <https://github.com/aio-libs/frozenlist/issues/618>`__. |
|
|
|
- The packaging metadata switched to including an SPDX license identifier introduced in `PEP 639 <https://peps.python.org/pep-639>`__ -- by `@cdce8p <https://github.com/sponsors/cdce8p>`__. |
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#639 <https://github.com/aio-libs/frozenlist/issues/639>`__. |
|
|
|
|
|
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 |
|
`@webknjaz <https://github.com/sponsors/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:* |
|
`#633 <https://github.com/aio-libs/frozenlist/issues/633>`__. |
|
|
|
- Organized dependencies into test and lint dependencies so that no |
|
unnecessary ones are installed during CI runs -- by `@lysnikolaou <https://github.com/sponsors/lysnikolaou>`__. |
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#636 <https://github.com/aio-libs/frozenlist/issues/636>`__. |
|
|
|
|
|
---- |
|
|
|
|
|
1.5.0 (2024-10-22) |
|
================== |
|
|
|
Bug fixes |
|
--------- |
|
|
|
- An incorrect signature of the ``__class_getitem__`` class method |
|
has been fixed, adding a missing ``class_item`` argument under |
|
Python 3.8 and older. |
|
|
|
This change also improves the code coverage of this method that |
|
was previously missing -- by `@webknjaz <https://github.com/sponsors/webknjaz>`__. |
|
|
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#567 <https://github.com/aio-libs/frozenlist/issues/567>`__, `#571 <https://github.com/aio-libs/frozenlist/issues/571>`__. |
|
|
|
|
|
Improved documentation |
|
---------------------- |
|
|
|
- Rendered issue, PR, and commit links now lead to |
|
``frozenlist``'s repo instead of ``yarl``'s repo. |
|
|
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#573 <https://github.com/aio-libs/frozenlist/issues/573>`__. |
|
|
|
- On the ``Contributing docs`` page, |
|
a link to the ``Towncrier philosophy`` has been fixed. |
|
|
|
|
|
*Related issues and pull requests on GitHub:* |
|
`#574 <https://github.com/aio-libs/frozenlist/issues/574>`__. |
|
|
|
|
|
Packaging updates and notes for downstreams |
|
------------------------------------------- |
|
|
|
- A name of a temporary building directory now reflects |
|
that it's related to ``frozenlist``, not ``yarl``. |
|
|
|
|
|
*Related issues and pull requests on GitHub:* |
|
` |
|
|
|
- Declared Python 3.13 supported officially in the distribution package metadata. |
|
|
|
|
|
*Related issues and pull requests on GitHub:* |
|
` |
|
|
|
|
|
---- |
|
|
|
|
|
1.4.1 (2023-12-15) |
|
================== |
|
|
|
Packaging updates and notes for downstreams |
|
------------------------------------------- |
|
|
|
- Declared Python 3.12 and PyPy 3.8-3.10 supported officially |
|
in the distribution package metadata. |
|
|
|
|
|
*Related issues and pull requests on GitHub:* |
|
` |
|
|
|
- Replaced the packaging is replaced from an old-fashioned ``setup.py`` to an |
|
in-tree `PEP 517 <https://peps.python.org/pep-517>`__ build backend -- by `@webknjaz <https://github.com/sponsors/webknjaz>`__. |
|
|
|
Whenever the end-users or downstream packagers need to build ``frozenlist`` |
|
from source (a Git checkout or an sdist), they may pass a ``config_settings`` |
|
flag ``pure-python``. If this flag is not set, a C-extension will be built |
|
and included into the distribution. |
|
|
|
Here is how this can be done with ``pip``: |
|
|
|
.. code-block:: console |
|
|
|
$ python3 -m pip install . --config-settings=pure-python= |
|
|
|
This will also work with ``-e | --editable``. |
|
|
|
The same can be achieved via ``pypa/build``: |
|
|
|
.. code-block:: console |
|
|
|
$ python3 -m build --config-setting=pure-python= |
|
|
|
Adding ``-w | --wheel`` can force ``pypa/build`` produce a wheel from source |
|
directly, as opposed to building an ``sdist`` and then building from it. |
|
|
|
|
|
*Related issues and pull requests on GitHub:* |
|
` |
|
|
|
|
|
Contributor-facing changes |
|
-------------------------- |
|
|
|
- It is now possible to request line tracing in Cython builds using the |
|
``with-cython-tracing`` `PEP 517 <https://peps.python.org/pep-517>`__ config setting |
|
-- `@webknjaz <https://github.com/sponsors/webknjaz>`__. |
|
|
|
This can be used in CI and development environment to measure coverage |
|
on Cython modules, but is not normally useful to the end-users or |
|
downstream packagers. |
|
|
|
Here's a usage example: |
|
|
|
.. code-block:: console |
|
|
|
$ python3 -Im pip install . --config-settings=with-cython-tracing=true |
|
|
|
For editable installs, this setting is on by default. Otherwise, it's |
|
off unless requested explicitly. |
|
|
|
The following produces C-files required for the Cython coverage |
|
plugin to map the measurements back to the PYX-files: |
|
|
|
.. code-block:: console |
|
|
|
$ python -Im pip install -e . |
|
|
|
Alternatively, the ``FROZENLIST_CYTHON_TRACING=1`` environment variable |
|
can be set to do the same as the `PEP 517 <https://peps.python.org/pep-517>`__ config setting. |
|
|
|
|
|
*Related issues and pull requests on GitHub:* |
|
` |
|
|
|
- Coverage collection has been implemented for the Cython modules |
|
-- by `@webknjaz <https://github.com/sponsors/webknjaz>`__. |
|
|
|
It will also be reported to Codecov from any non-release CI jobs. |
|
|
|
|
|
*Related issues and pull requests on GitHub:* |
|
` |
|
|
|
- A step-by-step ``Release Guide`` guide has |
|
been added, describing how to release *frozenlist* -- by `@webknjaz <https://github.com/sponsors/webknjaz>`__. |
|
|
|
This is primarily targeting the maintainers. |
|
|
|
|
|
*Related issues and pull requests on GitHub:* |
|
` |
|
|
|
- Detailed ``Contributing Guidelines`` on |
|
authoring the changelog fragments have been published in the |
|
documentation -- by `@webknjaz <https://github.com/sponsors/webknjaz>`__. |
|
|
|
|
|
*Related issues and pull requests on GitHub:* |
|
` |
|
|
|
|
|
---- |
|
|
|
|
|
1.4.0 (2023-07-12) |
|
================== |
|
|
|
The published source distribution package became buildable |
|
under Python 3.12. |
|
|
|
|
|
---- |
|
|
|
|
|
Bugfixes |
|
-------- |
|
|
|
- Removed an unused ``typing.Tuple`` import |
|
` |
|
|
|
|
|
Deprecations and Removals |
|
------------------------- |
|
|
|
- Dropped Python 3.7 support. |
|
` |
|
|
|
|
|
Misc |
|
---- |
|
|
|
- ` |
|
|
|
|
|
---- |
|
|
|
|
|
1.3.3 (2022-11-08) |
|
================== |
|
|
|
- Fixed CI runs when creating a new release, where new towncrier versions |
|
fail when the current version section is already present. |
|
|
|
|
|
---- |
|
|
|
|
|
1.3.2 (2022-11-08) |
|
================== |
|
|
|
Misc |
|
---- |
|
|
|
- Updated the CI runs to better check for test results and to avoid deprecated syntax. ` |
|
|
|
|
|
---- |
|
|
|
|
|
1.3.1 (2022-08-02) |
|
================== |
|
|
|
The published source distribution package became buildable |
|
under Python 3.11. |
|
|
|
|
|
---- |
|
|
|
|
|
1.3.0 (2022-01-18) |
|
================== |
|
|
|
Bugfixes |
|
-------- |
|
|
|
- Do not install C sources with binary distributions. |
|
` |
|
|
|
|
|
Deprecations and Removals |
|
------------------------- |
|
|
|
- Dropped Python 3.6 support |
|
` |
|
|
|
|
|
---- |
|
|
|
|
|
1.2.0 (2021-10-16) |
|
================== |
|
|
|
Features |
|
-------- |
|
|
|
- ``FrozenList`` now supports being used as a generic type as per PEP 585, e.g. ``frozen_int_list: FrozenList[int]`` (requires Python 3.9 or newer). |
|
` |
|
- Added support for Python 3.10. |
|
` |
|
- Started shipping platform-specific wheels with the ``musl`` tag targeting typical Alpine Linux runtimes. |
|
` |
|
- Started shipping platform-specific arm64 wheels for Apple Silicon. |
|
` |
|
|
|
|
|
---- |
|
|
|
|
|
1.1.1 (2020-11-14) |
|
================== |
|
|
|
Bugfixes |
|
-------- |
|
|
|
- Provide x86 Windows wheels. |
|
` |
|
|
|
|
|
---- |
|
|
|
|
|
1.1.0 (2020-10-13) |
|
================== |
|
|
|
Features |
|
-------- |
|
|
|
- Add support for hashing of a frozen list. |
|
` |
|
|
|
- Support Python 3.8 and 3.9. |
|
|
|
- Provide wheels for ``aarch64``, ``i686``, ``ppc64le``, ``s390x`` architectures on |
|
Linux as well as ``x86_64``. |
|
|
|
|
|
---- |
|
|
|
|
|
1.0.0 (2019-11-09) |
|
================== |
|
|
|
Deprecations and Removals |
|
------------------------- |
|
|
|
- Dropped support for Python 3.5; only 3.6, 3.7 and 3.8 are supported going forward. |
|
` |
|
|