Name | psygnal JSON |
Version |
0.14.1
JSON |
| download |
home_page | None |
Summary | Fast python callback/event system modeled after Qt Signals |
upload_time | 2025-08-12 17:41:05 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | BSD 3-Clause License |
keywords |
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# psygnal
[](https://github.com/pyapp-kit/psygnal/raw/master/LICENSE)
[](https://pypi.org/project/psygnal)
[](https://github.com/conda-forge/psygnal-feedstock)
[](https://python.org)
[](https://github.com/pyapp-kit/psygnal/actions/workflows/test.yml)
[](https://codecov.io/gh/pyapp-kit/psygnal)
[](https://psygnal.readthedocs.io/en/latest/?badge=latest)
[](https://codspeed.io/pyapp-kit/psygnal)
Psygnal (pronounced "signal") is a pure python implementation of the [observer
pattern](https://en.wikipedia.org/wiki/Observer_pattern), with the API of
[Qt-style Signals](https://doc.qt.io/qt-5/signalsandslots.html) with (optional)
signature and type checking, and support for threading. It has no dependencies.
> This library does ***not*** require or use Qt in any way, It simply implements
> a similar observer pattern API.
## Documentation
https://psygnal.readthedocs.io/
### Install
```sh
pip install psygnal
```
```sh
conda install -c conda-forge psygnal
```
## Usage
The [observer pattern](https://en.wikipedia.org/wiki/Observer_pattern) is a software design pattern in which an object maintains a list of its dependents ("**observers**"), and notifies them of any state changes – usually by calling a **callback function** provided by the observer.
Here is a simple example of using psygnal:
```python
from psygnal import Signal
class MyObject:
# define one or more signals as class attributes
value_changed = Signal(str)
# create an instance
my_obj = MyObject()
# You (or others) can connect callbacks to your signals
@my_obj.value_changed.connect
def on_change(new_value: str):
print(f"The value changed to {new_value}!")
# The object may now emit signals when appropriate,
# (for example in a setter method)
my_obj.value_changed.emit('hi') # prints "The value changed to hi!"
```
Much more detail available in the [documentation](https://psygnal.readthedocs.io/)!
### Evented Dataclasses
A particularly nice usage of the signal pattern is to emit signals whenever a
field of a dataclass changes. Psygnal provides an `@evented` decorator that will
emit a signal whenever a field changes. It is compatible with `dataclasses`
from [the standard library](https://docs.python.org/3/library/dataclasses.html),
as well as [attrs](https://www.attrs.org/en/stable/), and
[pydantic](https://pydantic-docs.helpmanual.io):
```python
from psygnal import evented
from dataclasses import dataclass
@evented
@dataclass
class Person:
name: str
age: int = 0
person = Person('John', age=30)
# connect callbacks
@person.events.age.connect
def _on_age_change(new_age: str):
print(f"Age changed to {new_age}")
person.age = 31 # prints: Age changed to 31
```
See the [dataclass documentation](https://psygnal.readthedocs.io/en/latest/dataclasses/) for more details.
### Evented Containers
`psygnal.containers` provides evented versions of mutable data structures
(`dict`, `list`, `set`), for cases when you need to monitor mutation:
```python
from psygnal.containers import EventedList
my_list = EventedList([1, 2, 3, 4, 5])
my_list.events.inserted.connect(lambda i, val: print(f"Inserted {val} at index {i}"))
my_list.events.removed.connect(lambda i, val: print(f"Removed {val} at index {i}"))
my_list.append(6) # Output: Inserted 6 at index 5
my_list.pop() # Output: Removed 6 at index 5
```
See the
[evented containers documentation](https://psygnal.readthedocs.io/en/latest/API/containers/)
for more details.
## Benchmark history
https://pyapp-kit.github.io/psygnal/
and
https://codspeed.io/pyapp-kit/psygnal
## Developers
### Setup
This project uses PEP 735 dependency groups.
After cloning, setup your env with `uv sync` or `pip install -e . --group dev`
### Compiling
While `psygnal` is a pure python package, it is compiled with mypyc to increase
performance. To test the compiled version locally, you can run:
```bash
HATCH_BUILD_HOOKS_ENABLE=1 uv sync --force-reinstall
```
(which is also available as `make build` if you have make installed)
### Debugging
To disable all compiled files and run the pure python version,
you may run:
```bash
python -c "import psygnal.utils; psygnal.utils.decompile()"
```
To return the compiled version, run:
```bash
python -c "import psygnal.utils; psygnal.utils.recompile()"
```
The `psygnal._compiled` variable will tell you if you're using the compiled
version or not.
Raw data
{
"_id": null,
"home_page": null,
"name": "psygnal",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": null,
"author": null,
"author_email": "Talley Lambert <talley.lambert@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/67/67/f167f3130057e53125df25fb34754bf6f7c5cfe1b38cd83b663fd40496a2/psygnal-0.14.1.tar.gz",
"platform": null,
"description": "# psygnal\n\n[](https://github.com/pyapp-kit/psygnal/raw/master/LICENSE)\n[](https://pypi.org/project/psygnal)\n[](https://github.com/conda-forge/psygnal-feedstock)\n[](https://python.org)\n[](https://github.com/pyapp-kit/psygnal/actions/workflows/test.yml)\n[](https://codecov.io/gh/pyapp-kit/psygnal)\n[](https://psygnal.readthedocs.io/en/latest/?badge=latest)\n[](https://codspeed.io/pyapp-kit/psygnal)\n\nPsygnal (pronounced \"signal\") is a pure python implementation of the [observer\npattern](https://en.wikipedia.org/wiki/Observer_pattern), with the API of\n[Qt-style Signals](https://doc.qt.io/qt-5/signalsandslots.html) with (optional)\nsignature and type checking, and support for threading. It has no dependencies.\n\n> This library does ***not*** require or use Qt in any way, It simply implements\n> a similar observer pattern API.\n\n## Documentation\n\nhttps://psygnal.readthedocs.io/\n\n### Install\n\n```sh\npip install psygnal\n```\n\n```sh\nconda install -c conda-forge psygnal\n```\n\n## Usage\n\nThe [observer pattern](https://en.wikipedia.org/wiki/Observer_pattern) is a software design pattern in which an object maintains a list of its dependents (\"**observers**\"), and notifies them of any state changes \u2013 usually by calling a **callback function** provided by the observer.\n\nHere is a simple example of using psygnal:\n\n```python\nfrom psygnal import Signal\n\nclass MyObject:\n # define one or more signals as class attributes\n value_changed = Signal(str)\n\n# create an instance\nmy_obj = MyObject()\n\n# You (or others) can connect callbacks to your signals\n@my_obj.value_changed.connect\ndef on_change(new_value: str):\n print(f\"The value changed to {new_value}!\")\n\n# The object may now emit signals when appropriate,\n# (for example in a setter method)\nmy_obj.value_changed.emit('hi') # prints \"The value changed to hi!\"\n```\n\nMuch more detail available in the [documentation](https://psygnal.readthedocs.io/)!\n\n### Evented Dataclasses\n\nA particularly nice usage of the signal pattern is to emit signals whenever a\nfield of a dataclass changes. Psygnal provides an `@evented` decorator that will\nemit a signal whenever a field changes. It is compatible with `dataclasses`\nfrom [the standard library](https://docs.python.org/3/library/dataclasses.html),\nas well as [attrs](https://www.attrs.org/en/stable/), and\n[pydantic](https://pydantic-docs.helpmanual.io):\n\n```python\nfrom psygnal import evented\nfrom dataclasses import dataclass\n\n@evented\n@dataclass\nclass Person:\n name: str\n age: int = 0\n\nperson = Person('John', age=30)\n\n# connect callbacks\n@person.events.age.connect\ndef _on_age_change(new_age: str):\n print(f\"Age changed to {new_age}\")\n\nperson.age = 31 # prints: Age changed to 31\n```\n\nSee the [dataclass documentation](https://psygnal.readthedocs.io/en/latest/dataclasses/) for more details.\n\n### Evented Containers\n\n`psygnal.containers` provides evented versions of mutable data structures\n(`dict`, `list`, `set`), for cases when you need to monitor mutation:\n\n```python\nfrom psygnal.containers import EventedList\n\nmy_list = EventedList([1, 2, 3, 4, 5])\n\nmy_list.events.inserted.connect(lambda i, val: print(f\"Inserted {val} at index {i}\"))\nmy_list.events.removed.connect(lambda i, val: print(f\"Removed {val} at index {i}\"))\n\nmy_list.append(6) # Output: Inserted 6 at index 5\nmy_list.pop() # Output: Removed 6 at index 5\n```\n\nSee the\n[evented containers documentation](https://psygnal.readthedocs.io/en/latest/API/containers/)\nfor more details.\n\n## Benchmark history\n\nhttps://pyapp-kit.github.io/psygnal/\n\nand\n\nhttps://codspeed.io/pyapp-kit/psygnal\n\n## Developers\n\n### Setup\n\nThis project uses PEP 735 dependency groups.\n\nAfter cloning, setup your env with `uv sync` or `pip install -e . --group dev`\n\n### Compiling\n\nWhile `psygnal` is a pure python package, it is compiled with mypyc to increase\nperformance. To test the compiled version locally, you can run:\n\n```bash\nHATCH_BUILD_HOOKS_ENABLE=1 uv sync --force-reinstall\n```\n\n(which is also available as `make build` if you have make installed)\n\n### Debugging\n\n To disable all compiled files and run the pure python version,\nyou may run:\n\n```bash\npython -c \"import psygnal.utils; psygnal.utils.decompile()\"\n```\n\nTo return the compiled version, run:\n\n```bash\npython -c \"import psygnal.utils; psygnal.utils.recompile()\"\n```\n\nThe `psygnal._compiled` variable will tell you if you're using the compiled\nversion or not.\n",
"bugtrack_url": null,
"license": "BSD 3-Clause License",
"summary": "Fast python callback/event system modeled after Qt Signals",
"version": "0.14.1",
"project_urls": {
"documentation": "https://psygnal.readthedocs.io",
"homepage": "https://github.com/pyapp-kit/psygnal",
"repository": "https://github.com/pyapp-kit/psygnal"
},
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "035cafec595186823c405d316db740cab4e58c622f60d3d75695888384fc337e",
"md5": "915b2c9b40bf15a7a2f044c67aeabb57",
"sha256": "b8eed2fcd7f7f38b34fa967fb82037ab7cf26ebb4268e3a906b68667b6a04029"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "915b2c9b40bf15a7a2f044c67aeabb57",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 515571,
"upload_time": "2025-08-12T17:40:28",
"upload_time_iso_8601": "2025-08-12T17:40:28.437357Z",
"url": "https://files.pythonhosted.org/packages/03/5c/afec595186823c405d316db740cab4e58c622f60d3d75695888384fc337e/psygnal-0.14.1-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d19b92d3ab54ab97b854b73cf1818f19f7205925621f541c7419c791c6c79c77",
"md5": "e1420413203d05bcc615f123e6ef4f4d",
"sha256": "ff3711260bb5a30b2bd9f310502d89cbb4c0c126169c6b0bb43faf2696e357b6"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "e1420413203d05bcc615f123e6ef4f4d",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 484186,
"upload_time": "2025-08-12T17:40:30",
"upload_time_iso_8601": "2025-08-12T17:40:30.645781Z",
"url": "https://files.pythonhosted.org/packages/d1/9b/92d3ab54ab97b854b73cf1818f19f7205925621f541c7419c791c6c79c77/psygnal-0.14.1-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2ee664b655c871ab6500812d27065f3f8e733d73034d0cc1a7f9f7831e1c1c86",
"md5": "dc903ba76f45ce8f0a7dae38da6b4167",
"sha256": "b9861d7f3d8d6411331a51118cb044a42745d66b08a55700e3b15114bb20d304"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "dc903ba76f45ce8f0a7dae38da6b4167",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 853191,
"upload_time": "2025-08-12T17:40:32",
"upload_time_iso_8601": "2025-08-12T17:40:32.111264Z",
"url": "https://files.pythonhosted.org/packages/2e/e6/64b655c871ab6500812d27065f3f8e733d73034d0cc1a7f9f7831e1c1c86/psygnal-0.14.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "28ba02cb23562f93b778e0365ead22e6d9eed0dbe0b5e99c2d63e6e6e4b4428b",
"md5": "cc45a8c9c7736eec624a6c1189d400ab",
"sha256": "4dfd45334eb48903995d27daa7d78e9e85931bd571b583408c45f0e217eb13b5"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp310-cp310-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "cc45a8c9c7736eec624a6c1189d400ab",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 845997,
"upload_time": "2025-08-12T17:40:33",
"upload_time_iso_8601": "2025-08-12T17:40:33.740926Z",
"url": "https://files.pythonhosted.org/packages/28/ba/02cb23562f93b778e0365ead22e6d9eed0dbe0b5e99c2d63e6e6e4b4428b/psygnal-0.14.1-cp310-cp310-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "60476dec80db1e7f26c723f055c13c9923c92cdaa4b2a934c7d286a4a104c94b",
"md5": "04454ea86c1499ecc160b28ff655abd4",
"sha256": "3a6f8c5b6d0794655ade4f420b599d7655e9484bf3e3591117e77f79a2a526ac"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "04454ea86c1499ecc160b28ff655abd4",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 411089,
"upload_time": "2025-08-12T17:40:34",
"upload_time_iso_8601": "2025-08-12T17:40:34.905685Z",
"url": "https://files.pythonhosted.org/packages/60/47/6dec80db1e7f26c723f055c13c9923c92cdaa4b2a934c7d286a4a104c94b/psygnal-0.14.1-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "09dce6f49067de2096c4efb7a8933ea7301e6640f713700de5c1c6b07805a095",
"md5": "cd3c1af7bc5ba4c52dc28eb5875af059",
"sha256": "d5659e8dea8ab0934e2e988be1dce22fc71a9bfedeec55d8cdd7ce0d7d7019b0"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "cd3c1af7bc5ba4c52dc28eb5875af059",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 509357,
"upload_time": "2025-08-12T17:40:36",
"upload_time_iso_8601": "2025-08-12T17:40:36.066352Z",
"url": "https://files.pythonhosted.org/packages/09/dc/e6f49067de2096c4efb7a8933ea7301e6640f713700de5c1c6b07805a095/psygnal-0.14.1-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0ba93fa5e8a98d3107a42a00b66f1c0f9a981ed269c550440ba334a2e34dbbe1",
"md5": "d6093aa1cb71181eed166a5b11887c29",
"sha256": "dced4bd31a010e3d6933e3d49a5f2ab92f995184976eab9f9848b264d140c90b"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "d6093aa1cb71181eed166a5b11887c29",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 477131,
"upload_time": "2025-08-12T17:40:37",
"upload_time_iso_8601": "2025-08-12T17:40:37.546013Z",
"url": "https://files.pythonhosted.org/packages/0b/a9/3fa5e8a98d3107a42a00b66f1c0f9a981ed269c550440ba334a2e34dbbe1/psygnal-0.14.1-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "59ec7d20cc8e93563560d94168eb7b55a6e1c819523f342f2c501bb63ca67975",
"md5": "40abb6a416660c2dee338139b75181f7",
"sha256": "216c582711d651fcf3b2c07fb1a9ce211e65054dfa10c94ec57488e8099fca0c"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "40abb6a416660c2dee338139b75181f7",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 842249,
"upload_time": "2025-08-12T17:40:39",
"upload_time_iso_8601": "2025-08-12T17:40:39.020398Z",
"url": "https://files.pythonhosted.org/packages/59/ec/7d20cc8e93563560d94168eb7b55a6e1c819523f342f2c501bb63ca67975/psygnal-0.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "444d9e6a712fb8b1f062301f914c9bf1e2e24520ce140101af6feec5ec8f47f1",
"md5": "a37f2b50950c97d2e88ec28dfcd18370",
"sha256": "8bbb08b45d4bcfa8d7b6498f41f2701607a4b19ee82a7c4292e8268325d86be8"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp311-cp311-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "a37f2b50950c97d2e88ec28dfcd18370",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 832522,
"upload_time": "2025-08-12T17:40:40",
"upload_time_iso_8601": "2025-08-12T17:40:40.313461Z",
"url": "https://files.pythonhosted.org/packages/44/4d/9e6a712fb8b1f062301f914c9bf1e2e24520ce140101af6feec5ec8f47f1/psygnal-0.14.1-cp311-cp311-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f75891e41a8c14447e4803e7ccd7258f421a5c6d5568619ac7dfc4567ad421df",
"md5": "581b13af3bc2b7279b93fab3e61f5390",
"sha256": "54ddd591b651afc204ba5f50a63448da629374da610d708ed747e61bbab7ad1f"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "581b13af3bc2b7279b93fab3e61f5390",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 415574,
"upload_time": "2025-08-12T17:40:41",
"upload_time_iso_8601": "2025-08-12T17:40:41.935620Z",
"url": "https://files.pythonhosted.org/packages/f7/58/91e41a8c14447e4803e7ccd7258f421a5c6d5568619ac7dfc4567ad421df/psygnal-0.14.1-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "03f346bf253bb5f728e26a28f207843bb2effeda446f1021082df5cbbce60051",
"md5": "64457c28e9e1061048c800855a6b4b33",
"sha256": "ff5ac6a05616eeeb2c51807b4ca41f59132056b03b25a2357415bcecaf8c2568"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp312-cp312-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "64457c28e9e1061048c800855a6b4b33",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 518326,
"upload_time": "2025-08-12T17:40:43",
"upload_time_iso_8601": "2025-08-12T17:40:43.146228Z",
"url": "https://files.pythonhosted.org/packages/03/f3/46bf253bb5f728e26a28f207843bb2effeda446f1021082df5cbbce60051/psygnal-0.14.1-cp312-cp312-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ce0651c1f75a7c70eceac81f68ce4f8215b77fdabc76155a1b72d8eebca71cd8",
"md5": "44892c5c53eea3f9c41d8ed2ff03c33f",
"sha256": "6e25d19980fc57b68ed39c8b12443d157a19dad02df573c2fb39e38f93a31fb8"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "44892c5c53eea3f9c41d8ed2ff03c33f",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 475270,
"upload_time": "2025-08-12T17:40:44",
"upload_time_iso_8601": "2025-08-12T17:40:44.583371Z",
"url": "https://files.pythonhosted.org/packages/ce/06/51c1f75a7c70eceac81f68ce4f8215b77fdabc76155a1b72d8eebca71cd8/psygnal-0.14.1-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a23ca114e0400ce82c2f7e32e271f40a1a23b56f22e4b252453ed06e0f2fa09f",
"md5": "af4d54880f439e177119d235eca9b42f",
"sha256": "714e432411ab3f32a883fe986092c8f0ed75da66858f6fd1a28b3abb9fe82eb5"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "af4d54880f439e177119d235eca9b42f",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 874030,
"upload_time": "2025-08-12T17:40:45",
"upload_time_iso_8601": "2025-08-12T17:40:45.937561Z",
"url": "https://files.pythonhosted.org/packages/a2/3c/a114e0400ce82c2f7e32e271f40a1a23b56f22e4b252453ed06e0f2fa09f/psygnal-0.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "db2850a77df93c22b7f66272b57a964193ed66cdcaa8ddae75a3d379dd925442",
"md5": "f381dc2aa2f46badac6a364f759b2890",
"sha256": "2a467c0c1d230d0997e64912e26bf333ea385603a0b90ebc1e0002833a4a6c7c"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp312-cp312-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "f381dc2aa2f46badac6a364f759b2890",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 867814,
"upload_time": "2025-08-12T17:40:47",
"upload_time_iso_8601": "2025-08-12T17:40:47.700282Z",
"url": "https://files.pythonhosted.org/packages/db/28/50a77df93c22b7f66272b57a964193ed66cdcaa8ddae75a3d379dd925442/psygnal-0.14.1-cp312-cp312-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7ac23c6355e7b864336516b81e78f8deb2861a526140c665892e9e838e07ef33",
"md5": "1cc12500788b45d2755ec4d20bba7ef3",
"sha256": "784541a1574c9c285f4cbcd5bcddcf11e4aefdf4629f95b3c092cd17a415e7bc"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "1cc12500788b45d2755ec4d20bba7ef3",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 419151,
"upload_time": "2025-08-12T17:40:49",
"upload_time_iso_8601": "2025-08-12T17:40:49.203431Z",
"url": "https://files.pythonhosted.org/packages/7a/c2/3c6355e7b864336516b81e78f8deb2861a526140c665892e9e838e07ef33/psygnal-0.14.1-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d93bf5a924287b919f4f9db036bd2604ebe6347e08cdcbc8b0102e45f79a083b",
"md5": "b5d2da567549c488a6bbce5f8fec32fe",
"sha256": "cf5b0dd9061764c31003ff326a63424709e5c89702e9f3563c94c992fcb58d29"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp313-cp313-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "b5d2da567549c488a6bbce5f8fec32fe",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 517301,
"upload_time": "2025-08-12T17:40:50",
"upload_time_iso_8601": "2025-08-12T17:40:50.661857Z",
"url": "https://files.pythonhosted.org/packages/d9/3b/f5a924287b919f4f9db036bd2604ebe6347e08cdcbc8b0102e45f79a083b/psygnal-0.14.1-cp313-cp313-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9d2ba7455a6afc7530445faec4fd3ecb3234435d700c759e331345e55caf950d",
"md5": "74f5e069aac5e0e4b4448d5ec235038f",
"sha256": "5dbf87b208c9d6fc01930d87b8cd34226a7e83a1ded6581298434385ec86151a"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "74f5e069aac5e0e4b4448d5ec235038f",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 474969,
"upload_time": "2025-08-12T17:40:52",
"upload_time_iso_8601": "2025-08-12T17:40:52.178214Z",
"url": "https://files.pythonhosted.org/packages/9d/2b/a7455a6afc7530445faec4fd3ecb3234435d700c759e331345e55caf950d/psygnal-0.14.1-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "51b1669ceda25ec6286bc5b60c837f255faf6fa1a42e0c89110c3db4570afb0c",
"md5": "56e15c562d4a9bcaa67787d2db187d02",
"sha256": "8ae154259e20608341b5f3b9ceae4eedb3bd821b08749fed43b2f73b764f9f4c"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "56e15c562d4a9bcaa67787d2db187d02",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 871112,
"upload_time": "2025-08-12T17:40:53",
"upload_time_iso_8601": "2025-08-12T17:40:53.449045Z",
"url": "https://files.pythonhosted.org/packages/51/b1/669ceda25ec6286bc5b60c837f255faf6fa1a42e0c89110c3db4570afb0c/psygnal-0.14.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c1fbc8d9e8b548c823cb6daec8346b229ab3255bf987666820f266802cfe7a6c",
"md5": "309715293c5d7aa4b2baa56780f665e0",
"sha256": "5b9596e2c644a589ad6f991f39e89f8ac1a7e18ef831262a6ca3368f0368b3a6"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp313-cp313-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "309715293c5d7aa4b2baa56780f665e0",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 864570,
"upload_time": "2025-08-12T17:40:54",
"upload_time_iso_8601": "2025-08-12T17:40:54.706557Z",
"url": "https://files.pythonhosted.org/packages/c1/fb/c8d9e8b548c823cb6daec8346b229ab3255bf987666820f266802cfe7a6c/psygnal-0.14.1-cp313-cp313-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5a063d696b9928e137f6f2ad058cdbe15be4a8f6d0dcac8c5a4039160b09cb1b",
"md5": "9ab91b5475bd7e3351d3a6f5ecd508a7",
"sha256": "34db48d1ca03f25c77dea93b9764fc5358577fc1cdb4df4b3e6f88d7f742c31c"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "9ab91b5475bd7e3351d3a6f5ecd508a7",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 419693,
"upload_time": "2025-08-12T17:40:55",
"upload_time_iso_8601": "2025-08-12T17:40:55.911248Z",
"url": "https://files.pythonhosted.org/packages/5a/06/3d696b9928e137f6f2ad058cdbe15be4a8f6d0dcac8c5a4039160b09cb1b/psygnal-0.14.1-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dda93a9696032c830fc07006e30999bc00ee05998a80509cb5a59fedfe7907e6",
"md5": "650e221495f9adf1566068afe00b8de7",
"sha256": "1a50b59584c436ecc016fe08678dc0ef55dbbb5fc102b541407c5bab34d8fb7f"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp39-cp39-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "650e221495f9adf1566068afe00b8de7",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 515614,
"upload_time": "2025-08-12T17:40:57",
"upload_time_iso_8601": "2025-08-12T17:40:57.170477Z",
"url": "https://files.pythonhosted.org/packages/dd/a9/3a9696032c830fc07006e30999bc00ee05998a80509cb5a59fedfe7907e6/psygnal-0.14.1-cp39-cp39-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "772307316651a0d21dff56a164f9010770bdc62a96b73bd0fb458a837bac5002",
"md5": "2b970c577ecf669613bd0807740663c3",
"sha256": "5d44678397ed1cff73c66e5c1c62660b32b5fb2a7059ece2d3f43d4defc49484"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "2b970c577ecf669613bd0807740663c3",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 484434,
"upload_time": "2025-08-12T17:40:58",
"upload_time_iso_8601": "2025-08-12T17:40:58.639694Z",
"url": "https://files.pythonhosted.org/packages/77/23/07316651a0d21dff56a164f9010770bdc62a96b73bd0fb458a837bac5002/psygnal-0.14.1-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "739e2cc04d15271319a71d43ae16b538434c856398613cb4aeff24a3365cb796",
"md5": "989eab310a927e2c24fea5930df8a17b",
"sha256": "7694389f8069b6072530267c3bc66904c55ee6cf919e3168fe1ae656a4426a85"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "989eab310a927e2c24fea5930df8a17b",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 848312,
"upload_time": "2025-08-12T17:40:59",
"upload_time_iso_8601": "2025-08-12T17:40:59.847276Z",
"url": "https://files.pythonhosted.org/packages/73/9e/2cc04d15271319a71d43ae16b538434c856398613cb4aeff24a3365cb796/psygnal-0.14.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fde08dd84f477c27e86a6cfc0e5d179ea983f6acd01e49eae77b66719f70d2e8",
"md5": "84bc1d26ed132efb395890aec9e0d524",
"sha256": "fb157638f361e510aa17f62e484f729c1b10bbb223b80d1a8ac80b19c252dd6e"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp39-cp39-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "84bc1d26ed132efb395890aec9e0d524",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 842755,
"upload_time": "2025-08-12T17:41:01",
"upload_time_iso_8601": "2025-08-12T17:41:01.625354Z",
"url": "https://files.pythonhosted.org/packages/fd/e0/8dd84f477c27e86a6cfc0e5d179ea983f6acd01e49eae77b66719f70d2e8/psygnal-0.14.1-cp39-cp39-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "64239b1ce515e0a06838ac8285ba9851d8488a51b8c82b36e99e821ce8739422",
"md5": "abc6fba5b80a9b1f9871b9eef9023515",
"sha256": "bb03b76d6984db51556da7f07a88579bff0f1c62ff5ff701697f20b34d5ddaa0"
},
"downloads": -1,
"filename": "psygnal-0.14.1-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "abc6fba5b80a9b1f9871b9eef9023515",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 410971,
"upload_time": "2025-08-12T17:41:02",
"upload_time_iso_8601": "2025-08-12T17:41:02.836538Z",
"url": "https://files.pythonhosted.org/packages/64/23/9b1ce515e0a06838ac8285ba9851d8488a51b8c82b36e99e821ce8739422/psygnal-0.14.1-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "10bf5bd18e13a6b6daa0bdf18677404b2c97706e55e86c8e304964c92545649e",
"md5": "465b9d6f5f650105ebfe949de3db542f",
"sha256": "8226a96d98dd0569e16d407944f3ac8311f3e4549356d0595cd9252bd51a90db"
},
"downloads": -1,
"filename": "psygnal-0.14.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "465b9d6f5f650105ebfe949de3db542f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 90956,
"upload_time": "2025-08-12T17:41:04",
"upload_time_iso_8601": "2025-08-12T17:41:04.543456Z",
"url": "https://files.pythonhosted.org/packages/10/bf/5bd18e13a6b6daa0bdf18677404b2c97706e55e86c8e304964c92545649e/psygnal-0.14.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6767f167f3130057e53125df25fb34754bf6f7c5cfe1b38cd83b663fd40496a2",
"md5": "de9cbc65b1d170684b432f339c3235e9",
"sha256": "cc663f571bd52c74168bba81d870e39d633d8281397df6d14874ec664122e41d"
},
"downloads": -1,
"filename": "psygnal-0.14.1.tar.gz",
"has_sig": false,
"md5_digest": "de9cbc65b1d170684b432f339c3235e9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 124166,
"upload_time": "2025-08-12T17:41:05",
"upload_time_iso_8601": "2025-08-12T17:41:05.955978Z",
"url": "https://files.pythonhosted.org/packages/67/67/f167f3130057e53125df25fb34754bf6f7c5cfe1b38cd83b663fd40496a2/psygnal-0.14.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-12 17:41:05",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "pyapp-kit",
"github_project": "psygnal",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "psygnal"
}