160 lines
6.9 KiB
Plaintext
160 lines
6.9 KiB
Plaintext
Metadata-Version: 2.4
|
|
Name: txaio
|
|
Version: 25.12.2
|
|
Summary: Compatibility API between asyncio/Twisted/Trollius
|
|
Project-URL: Homepage, https://txaio.readthedocs.io/
|
|
Project-URL: Documentation, https://txaio.readthedocs.io/
|
|
Project-URL: Repository, https://github.com/crossbario/txaio
|
|
Project-URL: Source, https://github.com/crossbario/txaio
|
|
Project-URL: Bug Tracker, https://github.com/crossbario/txaio/issues
|
|
Author-email: typedef int GmbH <contact@typedefint.eu>
|
|
Maintainer-email: typedef int GmbH <contact@typedefint.eu>
|
|
License-Expression: MIT
|
|
License-File: LICENSE
|
|
Keywords: asyncio,coroutine,trollius,twisted
|
|
Classifier: Development Status :: 5 - Production/Stable
|
|
Classifier: Environment :: Console
|
|
Classifier: Framework :: Twisted
|
|
Classifier: Intended Audience :: Developers
|
|
Classifier: Operating System :: OS Independent
|
|
Classifier: Programming Language :: Python
|
|
Classifier: Programming Language :: Python :: 3
|
|
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
|
|
Classifier: Topic :: Software Development :: Libraries
|
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
Requires-Python: >=3.11
|
|
Provides-Extra: all
|
|
Requires-Dist: twisted>=22.10.0; extra == 'all'
|
|
Requires-Dist: zope-interface>=5.2.0; extra == 'all'
|
|
Provides-Extra: asyncio
|
|
Provides-Extra: dev
|
|
Requires-Dist: build>=1.0.0; extra == 'dev'
|
|
Requires-Dist: coverage>=7.0.0; extra == 'dev'
|
|
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
|
|
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
Requires-Dist: ruff>=0.4.0; extra == 'dev'
|
|
Requires-Dist: twine>=5.0.0; extra == 'dev'
|
|
Requires-Dist: wheel>=0.42.0; extra == 'dev'
|
|
Provides-Extra: docs
|
|
Requires-Dist: furo>=2024.7.0; extra == 'docs'
|
|
Requires-Dist: linkify-it-py>=2.0.0; extra == 'docs'
|
|
Requires-Dist: myst-parser>=2.0; extra == 'docs'
|
|
Requires-Dist: pyenchant>=3.2; extra == 'docs'
|
|
Requires-Dist: scour>=0.38; extra == 'docs'
|
|
Requires-Dist: sphinx-autoapi>=2.1.0; extra == 'docs'
|
|
Requires-Dist: sphinx-copybutton>=0.5; extra == 'docs'
|
|
Requires-Dist: sphinx-design>=0.5; extra == 'docs'
|
|
Requires-Dist: sphinx>=8.2.3; extra == 'docs'
|
|
Requires-Dist: sphinxcontrib-images>=0.9; extra == 'docs'
|
|
Requires-Dist: sphinxcontrib-spelling>=8.0; extra == 'docs'
|
|
Requires-Dist: sphinxext-opengraph>=0.9; extra == 'docs'
|
|
Provides-Extra: twisted
|
|
Requires-Dist: twisted>=22.10.0; extra == 'twisted'
|
|
Requires-Dist: zope-interface>=5.2.0; extra == 'twisted'
|
|
Description-Content-Type: text/markdown
|
|
|
|
# txaio
|
|
|
|
[](https://pypi.python.org/pypi/txaio)
|
|
[](https://pypi.python.org/pypi/txaio)
|
|
[](https://github.com/crossbario/txaio/actions?query=workflow%3Amain)
|
|
[](https://txaio.readthedocs.io/en/latest/)
|
|
[](https://github.com/crossbario/txaio/blob/master/LICENSE)
|
|
[](https://pypi.python.org/pypi/txaio)
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
**txaio** is a helper library for writing code that runs unmodified on
|
|
both [Twisted](https://twistedmatrix.com/) and
|
|
[asyncio](https://docs.python.org/3/library/asyncio.html) /
|
|
[Trollius](http://trollius.readthedocs.org/en/latest/index.html).
|
|
|
|
This is like [six](http://pythonhosted.org/six/), but for wrapping over
|
|
differences between Twisted and asyncio so one can write code that runs
|
|
unmodified on both (aka *source code compatibility*). In other words:
|
|
your *users* can choose if they want asyncio **or** Twisted as a
|
|
dependency.
|
|
|
|
Note that, with this approach, user code **runs under the native event
|
|
loop of either Twisted or asyncio**. This is different from attaching
|
|
either one's event loop to the other using some event loop adapter.
|
|
|
|
## Platform support
|
|
|
|
**txaio** runs on CPython 3.6+ and PyPy 3, on top of *Twisted* or
|
|
*asyncio*. Specifically, **txaio** is tested on the following platforms:
|
|
|
|
- CPython 3.6 and 3.9 on Twisted 18.7, 19.10, trunk and on asyncio
|
|
(stdlib)
|
|
- PyPy 3.6 an 3.7 on Twisted 18.7, 19.10, trunk and on asyncio
|
|
(stdlib)
|
|
|
|
> Note: txaio up to version 18.8.1 also supported Python 2.7 and
|
|
Python 3.4. Beginning with release v20.1.1, txaio only supports Python
|
|
3.5+. Beginning with release v20.12.1, txaio only supports Python 3.6+.
|
|
|
|
## How it works
|
|
|
|
Instead of directly importing, instantiating and using `Deferred` (for
|
|
Twisted) or `Future` (for asyncio) objects, **txaio** provides
|
|
helper-functions to do that for you, as well as associated things like
|
|
adding callbacks or errbacks.
|
|
|
|
This obviously changes the style of your code, but then you can choose
|
|
at runtime (or import time) which underlying event-loop to use. This
|
|
means you can write **one** code-base that can run on Twisted *or*
|
|
asyncio (without a Twisted dependency) as you or your users see fit.
|
|
|
|
Code like the following can then run on *either* system:
|
|
|
|
```python
|
|
import txaio
|
|
txaio.use_twisted() # or .use_asyncio()
|
|
|
|
f0 = txaio.create_future()
|
|
f1 = txaio.as_future(some_func, 1, 2, key='word')
|
|
txaio.add_callbacks(f0, callback, errback)
|
|
txaio.add_callbacks(f1, callback, errback)
|
|
# ...
|
|
txaio.resolve(f0, "value")
|
|
txaio.reject(f1, RuntimeError("it failed"))
|
|
```
|
|
|
|
Please refer to the
|
|
[documentation](https://txaio.readthedocs.io/en/latest/) for description
|
|
and usage of the library features.
|
|
|
|
## AI Policy
|
|
|
|
> **IMPORTANT: A Note on Upcoming Policy Changes Regarding AI-Assisted Content**
|
|
>
|
|
> Up to and including release **v25.6.1**, this project contains no code
|
|
> or documentation generated with the assistance of AI tools. This version
|
|
> represents the final release under our historical contribution policy.
|
|
> Starting with future versions (*after* release v25.6.1), our contribution policy
|
|
> will change. Subsequent releases **MAY** contain code or documentation
|
|
> created with AI assistance.
|
|
|
|
We urge all users and contributors to review our [AI
|
|
Policy](https://github.com/crossbario/txaio/blob/master/AI_POLICY.md).
|
|
This document details:
|
|
|
|
- The rules and warranties required for all future contributions.
|
|
- The potential intellectual property implications for the project and
|
|
its users.
|
|
|
|
This policy was established following an open community discussion,
|
|
which you can review on [GitHub issue
|
|
\#1663](https://github.com/crossbario/autobahn-python/issues/1663).
|
|
|
|
We are providing this transparent notice to enable you to make an
|
|
informed decision. If our new AI policy is incompatible with your own
|
|
(or your organization's) development practices or risk tolerance, please
|
|
take this into consideration when deciding whether to upgrade beyond
|
|
version v25.6.1.
|