psygnal


Namepsygnal JSON
Version 0.12.0 PyPI version JSON
download
home_pageNone
SummaryFast python callback/event system modeled after Qt Signals
upload_time2025-02-03 15:53:24
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseBSD 3-Clause License
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # psygnal

[![License](https://img.shields.io/pypi/l/psygnal.svg?color=green)](https://github.com/pyapp-kit/psygnal/raw/master/LICENSE)
[![PyPI](https://img.shields.io/pypi/v/psygnal.svg?color=green)](https://pypi.org/project/psygnal)
[![Conda](https://img.shields.io/conda/v/conda-forge/psygnal)](https://github.com/conda-forge/psygnal-feedstock)
[![Python Version](https://img.shields.io/pypi/pyversions/psygnal.svg?color=green)](https://python.org)
[![CI](https://github.com/pyapp-kit/psygnal/actions/workflows/test.yml/badge.svg)](https://github.com/pyapp-kit/psygnal/actions/workflows/test.yml)
[![codecov](https://codecov.io/gh/pyapp-kit/psygnal/branch/main/graph/badge.svg?token=qGnz9GXpEb)](https://codecov.io/gh/pyapp-kit/psygnal)
[![Documentation Status](https://readthedocs.org/projects/psygnal/badge/?version=latest)](https://psygnal.readthedocs.io/en/latest/?badge=latest)
[![Benchmarks](https://img.shields.io/badge/⏱-codspeed-%23FF7B53)](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

### 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
make build
```

(which is just an alias for `HATCH_BUILD_HOOKS_ENABLE=1 pip install -e .`)

### 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/34/7f/ef01fa880529b0cbdf33a02e690cbca7868ee0ee291bcb2ebce53f3b3043/psygnal-0.12.0.tar.gz",
    "platform": null,
    "description": "# psygnal\n\n[![License](https://img.shields.io/pypi/l/psygnal.svg?color=green)](https://github.com/pyapp-kit/psygnal/raw/master/LICENSE)\n[![PyPI](https://img.shields.io/pypi/v/psygnal.svg?color=green)](https://pypi.org/project/psygnal)\n[![Conda](https://img.shields.io/conda/v/conda-forge/psygnal)](https://github.com/conda-forge/psygnal-feedstock)\n[![Python Version](https://img.shields.io/pypi/pyversions/psygnal.svg?color=green)](https://python.org)\n[![CI](https://github.com/pyapp-kit/psygnal/actions/workflows/test.yml/badge.svg)](https://github.com/pyapp-kit/psygnal/actions/workflows/test.yml)\n[![codecov](https://codecov.io/gh/pyapp-kit/psygnal/branch/main/graph/badge.svg?token=qGnz9GXpEb)](https://codecov.io/gh/pyapp-kit/psygnal)\n[![Documentation Status](https://readthedocs.org/projects/psygnal/badge/?version=latest)](https://psygnal.readthedocs.io/en/latest/?badge=latest)\n[![Benchmarks](https://img.shields.io/badge/\u23f1-codspeed-%23FF7B53)](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### 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\nmake build\n```\n\n(which is just an alias for `HATCH_BUILD_HOOKS_ENABLE=1 pip install -e .`)\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.12.0",
    "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": "acd336d8b6f84db1d97c6861351f299550bb5406fb9f9d1a368f8ec8a83c80da",
                "md5": "a29a04a65e5305808e469c97aeacf995",
                "sha256": "e5e6c338e9ccb712f27bf74ae3bbfcf276308b8b01c293342255d69b7eeba61f"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a29a04a65e5305808e469c97aeacf995",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 467290,
            "upload_time": "2025-02-03T15:52:24",
            "upload_time_iso_8601": "2025-02-03T15:52:24.997516Z",
            "url": "https://files.pythonhosted.org/packages/ac/d3/36d8b6f84db1d97c6861351f299550bb5406fb9f9d1a368f8ec8a83c80da/psygnal-0.12.0-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8b3286588490a746bb5be7f7cea395af8d640851650d197a948ae4136ff84c41",
                "md5": "6eb4e9739ed383d0b69defaa3516d491",
                "sha256": "df404cfaedff3e58e81407371e596a1a0f0f81e8e5b16e85ea420e030ff558b6"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "6eb4e9739ed383d0b69defaa3516d491",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 437900,
            "upload_time": "2025-02-03T15:52:32",
            "upload_time_iso_8601": "2025-02-03T15:52:32.383006Z",
            "url": "https://files.pythonhosted.org/packages/8b/32/86588490a746bb5be7f7cea395af8d640851650d197a948ae4136ff84c41/psygnal-0.12.0-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7416fec37482a0ed5338a90f4cef0f00b66136c9bcfd1b6f9f56955632f74561",
                "md5": "76a7a5b74df93bae6b53cea927c14ba7",
                "sha256": "c455c972071bc06403795f802623b54b0ba3217b7399520aee5e1e4ca71908e0"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "76a7a5b74df93bae6b53cea927c14ba7",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 774911,
            "upload_time": "2025-02-03T15:52:39",
            "upload_time_iso_8601": "2025-02-03T15:52:39.880800Z",
            "url": "https://files.pythonhosted.org/packages/74/16/fec37482a0ed5338a90f4cef0f00b66136c9bcfd1b6f9f56955632f74561/psygnal-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "aef4cf3fc283191b68440977258f97219e2f79b5cec3976307903a9cbc684280",
                "md5": "d0e4db79eeaadb3b772ee314fa67748a",
                "sha256": "2998e59d12f113ed961e11b30ade9a37b3e0263157cac99d7ab11f5730d4febb"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d0e4db79eeaadb3b772ee314fa67748a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 763048,
            "upload_time": "2025-02-03T15:52:42",
            "upload_time_iso_8601": "2025-02-03T15:52:42.991291Z",
            "url": "https://files.pythonhosted.org/packages/ae/f4/cf3fc283191b68440977258f97219e2f79b5cec3976307903a9cbc684280/psygnal-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f3d97e55fe5931cf8acbc35f2216e7797af48b3b462989903bf8b6a5caed3861",
                "md5": "16aa3efe2f6643796350f0f6e5d585a7",
                "sha256": "a708d8af50b11d55c58bb36cc7e042f02561011398b869b749a62832a656706c"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "16aa3efe2f6643796350f0f6e5d585a7",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 372212,
            "upload_time": "2025-02-03T15:52:47",
            "upload_time_iso_8601": "2025-02-03T15:52:47.215259Z",
            "url": "https://files.pythonhosted.org/packages/f3/d9/7e55fe5931cf8acbc35f2216e7797af48b3b462989903bf8b6a5caed3861/psygnal-0.12.0-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4857d6b488dac03f65e731843c984e4677a30c48dd4c5dae3c04df7993ce3168",
                "md5": "4356e4638a9e75e605d3b4af6d5bdd24",
                "sha256": "2a9ee1e6c441074fe71765b0a96c75b19d72c8198ec5bdea7e97e06a6fe9bd41"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4356e4638a9e75e605d3b4af6d5bdd24",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 458923,
            "upload_time": "2025-02-03T15:52:49",
            "upload_time_iso_8601": "2025-02-03T15:52:49.335403Z",
            "url": "https://files.pythonhosted.org/packages/48/57/d6b488dac03f65e731843c984e4677a30c48dd4c5dae3c04df7993ce3168/psygnal-0.12.0-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7afabab2170fc8b47a4c591e7ab821fc1fe3d4b10292753f47acba7323eb3d66",
                "md5": "ec13435da67168aa42c2607c7fe74364",
                "sha256": "0cdb387d1d6f00649c970a8084e4ae3fcd3e38ac12b5c51d086fc9e01d8f7530"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "ec13435da67168aa42c2607c7fe74364",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 430113,
            "upload_time": "2025-02-03T15:52:50",
            "upload_time_iso_8601": "2025-02-03T15:52:50.698139Z",
            "url": "https://files.pythonhosted.org/packages/7a/fa/bab2170fc8b47a4c591e7ab821fc1fe3d4b10292753f47acba7323eb3d66/psygnal-0.12.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2e5891359b72fe0413626be8857122897bb9238fa7b1dd53a3ed299183a17cb6",
                "md5": "b14e917b46181e8ab43a88349e55cd66",
                "sha256": "b410dab639353320044856cef68bd9aa940f8e1399da2f57522356b42bc4cf5d"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b14e917b46181e8ab43a88349e55cd66",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 765465,
            "upload_time": "2025-02-03T15:52:52",
            "upload_time_iso_8601": "2025-02-03T15:52:52.114894Z",
            "url": "https://files.pythonhosted.org/packages/2e/58/91359b72fe0413626be8857122897bb9238fa7b1dd53a3ed299183a17cb6/psygnal-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9cee869a2d6741ba3848d6cadf35a1f08535115eab67b7b1c41b2d45f467da7a",
                "md5": "d5e782c3e9d90ee60217187893ff6ac1",
                "sha256": "cd075d7bbe82f0615cfef953ed19ca54feba08f1686b42655c02d6ade0b0beb5"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d5e782c3e9d90ee60217187893ff6ac1",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 751927,
            "upload_time": "2025-02-03T15:52:53",
            "upload_time_iso_8601": "2025-02-03T15:52:53.631448Z",
            "url": "https://files.pythonhosted.org/packages/9c/ee/869a2d6741ba3848d6cadf35a1f08535115eab67b7b1c41b2d45f467da7a/psygnal-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "68ebc59c13a6da8263f3119a3d9faa7790e58d4fe541458197de4b2370927d52",
                "md5": "fea148790508c8e533ca620fdcf03185",
                "sha256": "cc763dbab05fb75f4517c8bd31ede6a4f27e68c59adca55b81a9d7bc875156e0"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "fea148790508c8e533ca620fdcf03185",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 377665,
            "upload_time": "2025-02-03T15:52:55",
            "upload_time_iso_8601": "2025-02-03T15:52:55.284714Z",
            "url": "https://files.pythonhosted.org/packages/68/eb/c59c13a6da8263f3119a3d9faa7790e58d4fe541458197de4b2370927d52/psygnal-0.12.0-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9b2e6cff528f8f5dc7f60221fddca85ed52131a90b606a72c5a4085606d5217d",
                "md5": "63651ba432137db822c66ce0fded67e3",
                "sha256": "dac134c8890e3d0e413ab701fcb56a882f9b151a6a9d625080736c36833b26ed"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp312-cp312-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "63651ba432137db822c66ce0fded67e3",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 469384,
            "upload_time": "2025-02-03T15:52:56",
            "upload_time_iso_8601": "2025-02-03T15:52:56.885697Z",
            "url": "https://files.pythonhosted.org/packages/9b/2e/6cff528f8f5dc7f60221fddca85ed52131a90b606a72c5a4085606d5217d/psygnal-0.12.0-cp312-cp312-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "559d774d547ed1fcb079de7fc41b1e3103b261eebae7f34da5cf05909a040470",
                "md5": "584127723194b9fc8b1e6aeb776a7724",
                "sha256": "bc2324cef7ba3f4d30d32895f8cb7d5cf9ad7bcfdb7955aa92a0fbfe7537ec3f"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "584127723194b9fc8b1e6aeb776a7724",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 426617,
            "upload_time": "2025-02-03T15:52:58",
            "upload_time_iso_8601": "2025-02-03T15:52:58.217743Z",
            "url": "https://files.pythonhosted.org/packages/55/9d/774d547ed1fcb079de7fc41b1e3103b261eebae7f34da5cf05909a040470/psygnal-0.12.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b489300991108d86c00e6aa84ea85e9c998e27eed59fdcb1abd3e69b9f4d62f5",
                "md5": "62fa253aaeab02eed6a4e6690e01b8bb",
                "sha256": "ae2bd6edcf911fbff34ed75150e8f8dfb246ebf203514c7c1e4397cabbb1368a"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "62fa253aaeab02eed6a4e6690e01b8bb",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 787401,
            "upload_time": "2025-02-03T15:53:00",
            "upload_time_iso_8601": "2025-02-03T15:53:00.990601Z",
            "url": "https://files.pythonhosted.org/packages/b4/89/300991108d86c00e6aa84ea85e9c998e27eed59fdcb1abd3e69b9f4d62f5/psygnal-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9eae8cc64c0f1eebbc4be74a953e76e431431c770a30f28b71b48edc7f6b8288",
                "md5": "cc52f0da526aa63bcfc1328dc1fcdd37",
                "sha256": "d6fbeee192beab90ca23d9d3ee3bf1eb7ef5f00e815fa53e23e402feee617242"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "cc52f0da526aa63bcfc1328dc1fcdd37",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 781293,
            "upload_time": "2025-02-03T15:53:03",
            "upload_time_iso_8601": "2025-02-03T15:53:03.273131Z",
            "url": "https://files.pythonhosted.org/packages/9e/ae/8cc64c0f1eebbc4be74a953e76e431431c770a30f28b71b48edc7f6b8288/psygnal-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8409f00841834b7ae543bd232c22e557914d63d0d0430d32980883421d5981bb",
                "md5": "10a78de3db2cd3a21131e5a6160b3cdd",
                "sha256": "25a9f2db710a6cd2566b3e0e03cf6e04d56276f36ac86b42fa22d81f9a4ac0f2"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "10a78de3db2cd3a21131e5a6160b3cdd",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 381816,
            "upload_time": "2025-02-03T15:53:06",
            "upload_time_iso_8601": "2025-02-03T15:53:06.968130Z",
            "url": "https://files.pythonhosted.org/packages/84/09/f00841834b7ae543bd232c22e557914d63d0d0430d32980883421d5981bb/psygnal-0.12.0-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cbb464a06b1d9b7628c84c9ea68a6cdc9d54378bae04695e7173addb9cf46607",
                "md5": "c107654539f4b50b376b9c65b5931225",
                "sha256": "2f4c1fed9337f57778109c397b6b9591961123ce4bbeb068115c0468964fc2b4"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp313-cp313-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c107654539f4b50b376b9c65b5931225",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 468346,
            "upload_time": "2025-02-03T15:53:08",
            "upload_time_iso_8601": "2025-02-03T15:53:08.417027Z",
            "url": "https://files.pythonhosted.org/packages/cb/b4/64a06b1d9b7628c84c9ea68a6cdc9d54378bae04695e7173addb9cf46607/psygnal-0.12.0-cp313-cp313-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "78beb3df7dac845f5f6b9897e60d19c3eaed27b56b024099588db92c3b76bb21",
                "md5": "c21fe8df3537d8e0eb7685cddda28469",
                "sha256": "2d5a953a50fc8263bb23bc558b926cf691f70c9c781c68c64c983fb8cbead910"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "c21fe8df3537d8e0eb7685cddda28469",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 426482,
            "upload_time": "2025-02-03T15:53:09",
            "upload_time_iso_8601": "2025-02-03T15:53:09.694238Z",
            "url": "https://files.pythonhosted.org/packages/78/be/b3df7dac845f5f6b9897e60d19c3eaed27b56b024099588db92c3b76bb21/psygnal-0.12.0-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "df360017e838d3c63081a64e6d2252c8dda368a6d0898c7ecf689ba678fe4127",
                "md5": "cdfbbe88c354aa32b94301d547be8ff2",
                "sha256": "7a67ec8e0c8a6553dd56ed653f87c46ef652b0c512bb8c8f8c5adcff3907751f"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "cdfbbe88c354aa32b94301d547be8ff2",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 785239,
            "upload_time": "2025-02-03T15:53:11",
            "upload_time_iso_8601": "2025-02-03T15:53:11.674141Z",
            "url": "https://files.pythonhosted.org/packages/df/36/0017e838d3c63081a64e6d2252c8dda368a6d0898c7ecf689ba678fe4127/psygnal-0.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "67d07057151debcd5c7d8ce7789d276e18681d5c141c9222c9cf99ce3a418680",
                "md5": "5d2a8eb81fe68b0c23626883c9cadd23",
                "sha256": "742abb2d0e230521b208161eeab06abb682a19239e734e543a269214c84a54d2"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp313-cp313-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5d2a8eb81fe68b0c23626883c9cadd23",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 779690,
            "upload_time": "2025-02-03T15:53:13",
            "upload_time_iso_8601": "2025-02-03T15:53:13.971444Z",
            "url": "https://files.pythonhosted.org/packages/67/d0/7057151debcd5c7d8ce7789d276e18681d5c141c9222c9cf99ce3a418680/psygnal-0.12.0-cp313-cp313-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5eaea3d6815db583b6d05878b3647ea0e2aa21ce6941d03c9d2c6caad1afbcf6",
                "md5": "9096c185e8b4f59db628601746a8055a",
                "sha256": "d779f20c6977ec9d5b9fece23b4b28bbcf0a7773539a4a176b5527aea5da27c7"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "9096c185e8b4f59db628601746a8055a",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 382622,
            "upload_time": "2025-02-03T15:53:15",
            "upload_time_iso_8601": "2025-02-03T15:53:15.377808Z",
            "url": "https://files.pythonhosted.org/packages/5e/ae/a3d6815db583b6d05878b3647ea0e2aa21ce6941d03c9d2c6caad1afbcf6/psygnal-0.12.0-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d5bc5f352439baa6ea20771e3bc8114464eac0574b2299725bf32cf87373b6ff",
                "md5": "1d0664f7a10adaef7ca468b00070a124",
                "sha256": "aa1ce36ff7872d32f281ca6aab027c6d64abdef19ed269bc73a82e80f2a4fbb0"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1d0664f7a10adaef7ca468b00070a124",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 467130,
            "upload_time": "2025-02-03T15:53:16",
            "upload_time_iso_8601": "2025-02-03T15:53:16.675311Z",
            "url": "https://files.pythonhosted.org/packages/d5/bc/5f352439baa6ea20771e3bc8114464eac0574b2299725bf32cf87373b6ff/psygnal-0.12.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "316b75c62b404ab5e63e5c03dd1a4a082c29e5d0de246bc3f3b023259e437cf2",
                "md5": "a5593d1f29e5d95d72b9c82ec7291f03",
                "sha256": "33946be4b9b4efe9e5ced2800b040314c113e898e1310a02751c840af02674d5"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "a5593d1f29e5d95d72b9c82ec7291f03",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 437703,
            "upload_time": "2025-02-03T15:53:18",
            "upload_time_iso_8601": "2025-02-03T15:53:18.787789Z",
            "url": "https://files.pythonhosted.org/packages/31/6b/75c62b404ab5e63e5c03dd1a4a082c29e5d0de246bc3f3b023259e437cf2/psygnal-0.12.0-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e3ff209975c42d05445e884b59ebea44a86b42a7d8ad8b831c930d06bc3a5fc6",
                "md5": "17f9ef3e000c4356bd7839520f14f50b",
                "sha256": "e69d74edb336e5e959ef5680c5393f8f6c7b7561fdcb9014dc2535c6ef3ea194"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "17f9ef3e000c4356bd7839520f14f50b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 770509,
            "upload_time": "2025-02-03T15:53:20",
            "upload_time_iso_8601": "2025-02-03T15:53:20.370448Z",
            "url": "https://files.pythonhosted.org/packages/e3/ff/209975c42d05445e884b59ebea44a86b42a7d8ad8b831c930d06bc3a5fc6/psygnal-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c027a60b0328267709a30274df55c358cedad596b09cc97f687cd01303d17fa3",
                "md5": "1b7caeb4b9da00b93f5865edbe6b9947",
                "sha256": "7986828b57861b3341803e519e09189cd93800adede9cfc450e72e1c4ea93f35"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1b7caeb4b9da00b93f5865edbe6b9947",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 759198,
            "upload_time": "2025-02-03T15:53:21",
            "upload_time_iso_8601": "2025-02-03T15:53:21.771674Z",
            "url": "https://files.pythonhosted.org/packages/c0/27/a60b0328267709a30274df55c358cedad596b09cc97f687cd01303d17fa3/psygnal-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ef49cd7ee6a1d4e8fd37e6040f937232c4a32ebd164c2cdea489d7f2493d7ae2",
                "md5": "a782ccd2c3139fe2a239a21a21e271e8",
                "sha256": "ef3cae9af7a22f3c855cbc5b2cb219c5410b1076eaa6541f48cdb2c901a06ad7"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a782ccd2c3139fe2a239a21a21e271e8",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 372115,
            "upload_time": "2025-02-03T15:53:23",
            "upload_time_iso_8601": "2025-02-03T15:53:23.162879Z",
            "url": "https://files.pythonhosted.org/packages/ef/49/cd7ee6a1d4e8fd37e6040f937232c4a32ebd164c2cdea489d7f2493d7ae2/psygnal-0.12.0-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "347fef01fa880529b0cbdf33a02e690cbca7868ee0ee291bcb2ebce53f3b3043",
                "md5": "d53e2eb182aea19d505415faa38840bc",
                "sha256": "8d2a99803f3152c469d3642d36c04d680213a20e114245558e026695adf9a9c2"
            },
            "downloads": -1,
            "filename": "psygnal-0.12.0.tar.gz",
            "has_sig": false,
            "md5_digest": "d53e2eb182aea19d505415faa38840bc",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 104400,
            "upload_time": "2025-02-03T15:53:24",
            "upload_time_iso_8601": "2025-02-03T15:53:24.444649Z",
            "url": "https://files.pythonhosted.org/packages/34/7f/ef01fa880529b0cbdf33a02e690cbca7868ee0ee291bcb2ebce53f3b3043/psygnal-0.12.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-03 15:53:24",
    "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"
}
        
Elapsed time: 1.36308s