Event dispatch in Python 3.8 using asyncio
Installation
pip install accordian
Getting Started
import asyncio
from accordian import signal
my_event = signal("my_event")
@my_event.connect
async def pow(x, y):
await asyncio.sleep(0.1)
print(f"pow({x}, {y})")
return x ** y
@my_event.connect
async def diff(x, y):
await asyncio.sleep(0.2)
print(f"diff({x}, {y})")
return max(x, y) - min(x, y)
# create events without blocking
async def create():
my_event.send(4, 6)
my_event.send(0, 1)
asyncio.run(create())
# or block and collect results from all receivers
async def collect():
results = await my_event.join(10, 3)
assert set(results) == {1000, 7}
asyncio.run(collect())
# signals without receivers return no results
async def empty():
sig = signal("unknown")
results = await sig.join(1, "foo", None)
assert results == []
asyncio.run(empty())
Namespaces
By default, accordian.signal creates signals in a global namespace. You can create your own namespaces to group signals together. Here, a processor is passed the region and stage to create deployment tasks:
from accordian import Namespace
regions = {"east": Namespace(), "west": Namespace()}
@regions["east"].signal("dev").connect
async def deploy_east_dev(s3_url, creds):
...
@regions["east"].signal("prod").connect
async def deploy_east_prod(s3_url, creds):
# remove pre-prod feature flags
await sanitize_prod(s3_url, "east")
...
@regions["west"].signal("prod").connect
async def deploy_west_prod(s3_url, creds):
# legacy region shims
await patch_west_bundle(s3_url)
await sanitize_prod(s3_url, "west")
...
async def deploy(region, stage):
s3_url = await bundle_for_region(region, stage)
creds = await creds_for_region(region, stage)
signal = regions[region].signal(stage)
# create the deployment task without waiting
signal.send(s3_url, creds)
# create deployment tasks
asyncio.run(deploy("east", "dev"))
asyncio.run(deploy("west", "prod"))
# wait for deployments to complete
async def wait_for_tasks():
running = asyncio.all_tasks()
await asyncio.wait(running)
asyncio.run(wait_for_tasks())
Contributing
Contributions welcome! Please make sure tox passes before submitting a PR.
Development
To set up a virtualenv and run the test suite:
git clone https://github.com/numberoverzero/accordian.git make venv make
Metadata
Release files for accordian 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| accordian-0.4.0.tar.gz | 3.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| accordian-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 7.0 kB
Release files / accordian-0.4.0.tar.gz
| Download URL | accordian-0.4.0.tar.gz |
|---|---|
| Size | 3.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2dcf0323d25284171862f750dbbbdef11fdd32b9a8814eaaf5c2f51679b0ed3f
|
|
BLAKE2b-256 checksum How to use checksums |
dd13f3152ac04e7681cc6131d981565c7d440147a358ed0d1a4c1e7609faf8d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.8.2
|
Release files / accordian-0.4.0-py3-none-any.whl
| Download URL | accordian-0.4.0-py3-none-any.whl |
|---|---|
| Size | 3.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
590b40612f59136ecef6968439903f6cee2f34287818473d81b3d524445a86b2
|
|
BLAKE2b-256 checksum How to use checksums |
269104c3de96c0ef6d7c3e0088b2eb0ae8357acf483e8a0c6cabfb75bfb8e565
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.8.2
|
Security for accordian 0.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.