Source code

Revision control

Copy as Markdown

Other Tools

Metadata-Version: 2.1
Name: frozenlist
Version: 1.4.1
Summary: A list-like structure which implements collections.abc.MutableSequence
Maintainer: aiohttp team <team@aiohttp.org>
Maintainer-email: team@aiohttp.org
License: Apache 2
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 Actions, https://github.com/aio-libs/frozenlist/actions
Project-URL: Coverage: codecov, https://codecov.io/github/aio-libs/frozenlist
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: License :: OSI Approved :: Apache Software License
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.8
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 :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.8
Description-Content-Type: text/x-rst
License-File: LICENSE
frozenlist
==========
:alt: GitHub status for master branch
:alt: codecov.io status for master branch
:alt: frozenlist @ PyPI
:alt: Read The Docs build status badge
:alt: Matrix Room — #aio-libs:matrix.org
:alt: Matrix Space — #aio-libs-space:matrix.org
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'} # frozen fl can be a dict key
>>> dictionary
{<FrozenList(frozen=True, [1, 2])>: 'Vikings'}
Installation
------------
::
$ pip install frozenlist
The library requires Python 3.8 or newer.
Documentation
-------------
Communication channels
----------------------
We have a *Matrix Space* `#aio-libs-space:matrix.org
also accessible via Gitter.
Requirements
------------
- Python >= 3.8
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.
=========
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
we named the news folder "changes".
WARNING: Don't drop the next directive!
.. towncrier release notes start
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
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. `#327 <https://github.com/aio-libs/frozenlist/issues/327>`_
----
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.