psygnal


Namepsygnal JSON
Version 0.10.2 PyPI version JSON
download
home_page
SummaryFast python callback/event system modeled after Qt Signals
upload_time2024-03-12 21:36:32
maintainer
docs_urlNone
author
requires_python>=3.8
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": "",
    "name": "psygnal",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "",
    "author": "",
    "author_email": "Talley Lambert <talley.lambert@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/8d/7f/e06de677dadd73e76bcbbf672c55ae98579fb30be3c3b26e0e946b16a06f/psygnal-0.10.2.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.10.2",
    "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": "",
            "digests": {
                "blake2b_256": "c38c7106531209d9f93bf1189a7f08a76739e08ac7011384075ebf4c8a3b706c",
                "md5": "268cbb61614835b46d663a1bf08b14dc",
                "sha256": "004def7d5334dfad12b3d0dcfb7e16c6e3a948c42998eda0472fcc73bb5ae85d"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp310-cp310-macosx_10_16_arm64.whl",
            "has_sig": false,
            "md5_digest": "268cbb61614835b46d663a1bf08b14dc",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 412106,
            "upload_time": "2024-03-12T21:45:55",
            "upload_time_iso_8601": "2024-03-12T21:45:55.694172Z",
            "url": "https://files.pythonhosted.org/packages/c3/8c/7106531209d9f93bf1189a7f08a76739e08ac7011384075ebf4c8a3b706c/psygnal-0.10.2-cp310-cp310-macosx_10_16_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "00b501e813e8155a4d88a3330496618cfb3f4cb545d0f50941738de1705e9ff3",
                "md5": "735cbdea9a8365e925c7a90603474d79",
                "sha256": "a3fbbac9445871b57726d41e4d0262f738c6ecc60e3a48572f3fe5829471f1ee"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp310-cp310-macosx_10_16_x86_64.whl",
            "has_sig": false,
            "md5_digest": "735cbdea9a8365e925c7a90603474d79",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 439773,
            "upload_time": "2024-03-12T21:50:40",
            "upload_time_iso_8601": "2024-03-12T21:50:40.019530Z",
            "url": "https://files.pythonhosted.org/packages/00/b5/01e813e8155a4d88a3330496618cfb3f4cb545d0f50941738de1705e9ff3/psygnal-0.10.2-cp310-cp310-macosx_10_16_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "333cb308a711202a1bc2f538a9900193863bf14eb6474b4232fa1cd35940fa4c",
                "md5": "f3b462d2cb8369e6bfbc3cc378a85172",
                "sha256": "55378d0eb4821875649da13d9524aad75542479e1f5817f44754622571ac4a75"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f3b462d2cb8369e6bfbc3cc378a85172",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 693824,
            "upload_time": "2024-03-12T21:44:04",
            "upload_time_iso_8601": "2024-03-12T21:44:04.695980Z",
            "url": "https://files.pythonhosted.org/packages/33/3c/b308a711202a1bc2f538a9900193863bf14eb6474b4232fa1cd35940fa4c/psygnal-0.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "52a049d924aba2fa0640dc1c04d381f730f32bb019456da15127c1309109df38",
                "md5": "4a235be4c5bc9e0c5e94c2333daa9a32",
                "sha256": "09bc8121adf93cca7d5110900e26252ac3b3fe0dacdb96297e1b7d93b80c4525"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp310-cp310-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4a235be4c5bc9e0c5e94c2333daa9a32",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 672545,
            "upload_time": "2024-03-12T21:44:06",
            "upload_time_iso_8601": "2024-03-12T21:44:06.444704Z",
            "url": "https://files.pythonhosted.org/packages/52/a0/49d924aba2fa0640dc1c04d381f730f32bb019456da15127c1309109df38/psygnal-0.10.2-cp310-cp310-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9f190609d607b994ee9517906199866fb4c77c3b301663e9253fdfd1af96de34",
                "md5": "30d01ca74e40d54476d018f1bd7486cf",
                "sha256": "7bd295bcabcce237bf5d2c05e51c946f83d399bedc92bd0a1d5ab8eb82b7b69c"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp311-cp311-macosx_10_16_arm64.whl",
            "has_sig": false,
            "md5_digest": "30d01ca74e40d54476d018f1bd7486cf",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 405977,
            "upload_time": "2024-03-12T21:45:57",
            "upload_time_iso_8601": "2024-03-12T21:45:57.565400Z",
            "url": "https://files.pythonhosted.org/packages/9f/19/0609d607b994ee9517906199866fb4c77c3b301663e9253fdfd1af96de34/psygnal-0.10.2-cp311-cp311-macosx_10_16_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c95972b8a3742186a4fce56114a0ae1df6d75046fecfa007ab17e1ff54e9b0d0",
                "md5": "47ba22f203adc1f6b6e7c920390c21b4",
                "sha256": "2a453304c48f61613d82461cc6cfa390b972cf41db8f834d3a48ee90471cd818"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp311-cp311-macosx_10_16_x86_64.whl",
            "has_sig": false,
            "md5_digest": "47ba22f203adc1f6b6e7c920390c21b4",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 432959,
            "upload_time": "2024-03-12T21:50:44",
            "upload_time_iso_8601": "2024-03-12T21:50:44.974489Z",
            "url": "https://files.pythonhosted.org/packages/c9/59/72b8a3742186a4fce56114a0ae1df6d75046fecfa007ab17e1ff54e9b0d0/psygnal-0.10.2-cp311-cp311-macosx_10_16_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4f625ffa087855df8e41658a1cb179fb3afa71efed862e0a7dfab3e602545014",
                "md5": "63ede3674676e1784435e355b89808d0",
                "sha256": "fffea50e36e1ff3073bc6d8d8481d4d7707e298f9f379e1824de6dee71908045"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "63ede3674676e1784435e355b89808d0",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 684371,
            "upload_time": "2024-03-12T21:44:08",
            "upload_time_iso_8601": "2024-03-12T21:44:08.514944Z",
            "url": "https://files.pythonhosted.org/packages/4f/62/5ffa087855df8e41658a1cb179fb3afa71efed862e0a7dfab3e602545014/psygnal-0.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cc1fae845d320c1f59b5f99465ac8b8ee8d3a515a4c2266819fe7b9b0ed9d120",
                "md5": "b637325e5e11380955dafb8d29cab073",
                "sha256": "cd758ca3ef9a4c36589492117cf8a7dbc0f92cef8d3c179f8efb66190ce66f18"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp311-cp311-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b637325e5e11380955dafb8d29cab073",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 662468,
            "upload_time": "2024-03-12T21:44:09",
            "upload_time_iso_8601": "2024-03-12T21:44:09.861902Z",
            "url": "https://files.pythonhosted.org/packages/cc/1f/ae845d320c1f59b5f99465ac8b8ee8d3a515a4c2266819fe7b9b0ed9d120/psygnal-0.10.2-cp311-cp311-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9649bf8ca1bb1514e90cf8a958d80269e9410433e94dcbc366b23c6ba40ca7fb",
                "md5": "c8be8340b40e26c80fb087dca437e875",
                "sha256": "407729dda66b67b0f19c5a49b33c14b657e994ce4807cbdf82efc723a909b0ac"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp312-cp312-macosx_10_16_arm64.whl",
            "has_sig": false,
            "md5_digest": "c8be8340b40e26c80fb087dca437e875",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 404202,
            "upload_time": "2024-03-12T21:45:59",
            "upload_time_iso_8601": "2024-03-12T21:45:59.385777Z",
            "url": "https://files.pythonhosted.org/packages/96/49/bf8ca1bb1514e90cf8a958d80269e9410433e94dcbc366b23c6ba40ca7fb/psygnal-0.10.2-cp312-cp312-macosx_10_16_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "65ea3d4bec9989faf1c763c7c15b1d4d180ed36978346fb595af26f85f1a5cbd",
                "md5": "00e5773cc1bbacb888596c3663535735",
                "sha256": "92e61acfd42ed89b5c6df84ce19eb4d12f9376d2ac8d47f9cd903ae95ebd0813"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp312-cp312-macosx_10_16_x86_64.whl",
            "has_sig": false,
            "md5_digest": "00e5773cc1bbacb888596c3663535735",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 424238,
            "upload_time": "2024-03-12T21:50:47",
            "upload_time_iso_8601": "2024-03-12T21:50:47.915551Z",
            "url": "https://files.pythonhosted.org/packages/65/ea/3d4bec9989faf1c763c7c15b1d4d180ed36978346fb595af26f85f1a5cbd/psygnal-0.10.2-cp312-cp312-macosx_10_16_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f6392cdd2c1904b122b227e28c574297a233e05f073cee9339719013e6c8661a",
                "md5": "15ce6a243c79970abfdbea1339caf7a1",
                "sha256": "c56ecf7a5f4125bc0b3721c46efe80756df4ebf394aad435ae8114c95a5316c6"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "15ce6a243c79970abfdbea1339caf7a1",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 708943,
            "upload_time": "2024-03-12T21:44:11",
            "upload_time_iso_8601": "2024-03-12T21:44:11.811821Z",
            "url": "https://files.pythonhosted.org/packages/f6/39/2cdd2c1904b122b227e28c574297a233e05f073cee9339719013e6c8661a/psygnal-0.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "51ba0a3fc341938379d1b5a6ae187992b6026f2bef748d3ef42972321c60dab1",
                "md5": "f1578c62ae8a4ec0bb62c50b08509c07",
                "sha256": "12a73bebc739a6331a618ecaa7ad0aee410b5009ec7fa0cd5f55e521ee776132"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp312-cp312-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f1578c62ae8a4ec0bb62c50b08509c07",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 691099,
            "upload_time": "2024-03-12T21:44:13",
            "upload_time_iso_8601": "2024-03-12T21:44:13.894820Z",
            "url": "https://files.pythonhosted.org/packages/51/ba/0a3fc341938379d1b5a6ae187992b6026f2bef748d3ef42972321c60dab1/psygnal-0.10.2-cp312-cp312-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6dd3b77b8422341fb8d8216db19f781fea5b7ee859fc8ea3a52e7bd2b989f3e6",
                "md5": "0cfd9f7f3b37c7ce46a92c8b7fd48f00",
                "sha256": "3ace1fa396190e3a08c8a8f3e9d59c030535987d59950da19589c6003a0b02f6"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp38-cp38-macosx_10_16_arm64.whl",
            "has_sig": false,
            "md5_digest": "0cfd9f7f3b37c7ce46a92c8b7fd48f00",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 407327,
            "upload_time": "2024-03-12T21:46:02",
            "upload_time_iso_8601": "2024-03-12T21:46:02.407343Z",
            "url": "https://files.pythonhosted.org/packages/6d/d3/b77b8422341fb8d8216db19f781fea5b7ee859fc8ea3a52e7bd2b989f3e6/psygnal-0.10.2-cp38-cp38-macosx_10_16_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "718548d496dde1bcca8083cc800e05e2729e3d623023bef292984c5e8319e6b1",
                "md5": "a2327115b5f037e187ffa3bd1774fa7a",
                "sha256": "dc6a974700a1273fffe0ceecb0f4e331d41c570a86047f89383811c94d7b9157"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp38-cp38-macosx_10_16_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a2327115b5f037e187ffa3bd1774fa7a",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 433438,
            "upload_time": "2024-03-12T21:50:51",
            "upload_time_iso_8601": "2024-03-12T21:50:51.257254Z",
            "url": "https://files.pythonhosted.org/packages/71/85/48d496dde1bcca8083cc800e05e2729e3d623023bef292984c5e8319e6b1/psygnal-0.10.2-cp38-cp38-macosx_10_16_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "242fef5fcf3a32a5f027eb007f60b1b70b9d20f314a02318bec3e34ee1564b0a",
                "md5": "3306e8a8a1d6e50f4cf1ae11e4f87ce0",
                "sha256": "09c6cdd85976c1d8b8064481ec581d72efaa52eeff232e479454c412260d26e9"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3306e8a8a1d6e50f4cf1ae11e4f87ce0",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 666982,
            "upload_time": "2024-03-12T21:44:15",
            "upload_time_iso_8601": "2024-03-12T21:44:15.742460Z",
            "url": "https://files.pythonhosted.org/packages/24/2f/ef5fcf3a32a5f027eb007f60b1b70b9d20f314a02318bec3e34ee1564b0a/psygnal-0.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "11957bb56bd6ac370ffd4d12ab0c3fec3d4e8571f28c7968be5d2c78f5acdbfa",
                "md5": "4510c932728cf8144fb0e53070b5c19a",
                "sha256": "b9cf48ef4be9ef473edb68fb89241a0d6ee787e1c4c8c81a19a41b16db90bcb3"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp38-cp38-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4510c932728cf8144fb0e53070b5c19a",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 663177,
            "upload_time": "2024-03-12T21:44:17",
            "upload_time_iso_8601": "2024-03-12T21:44:17.740759Z",
            "url": "https://files.pythonhosted.org/packages/11/95/7bb56bd6ac370ffd4d12ab0c3fec3d4e8571f28c7968be5d2c78f5acdbfa/psygnal-0.10.2-cp38-cp38-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5f32373cd282a6a0cc23da2dea815c4e86403963ace9e70ff2afa40ab6d66dd3",
                "md5": "fd3981f67a3831b084812632d3423a27",
                "sha256": "9b904424fb994e6c0088b3aab1d15305d8f27fa716c435dd5ebd5d58f1d6087b"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp39-cp39-macosx_10_16_arm64.whl",
            "has_sig": false,
            "md5_digest": "fd3981f67a3831b084812632d3423a27",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 412017,
            "upload_time": "2024-03-12T21:46:04",
            "upload_time_iso_8601": "2024-03-12T21:46:04.435596Z",
            "url": "https://files.pythonhosted.org/packages/5f/32/373cd282a6a0cc23da2dea815c4e86403963ace9e70ff2afa40ab6d66dd3/psygnal-0.10.2-cp39-cp39-macosx_10_16_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "350b66ac68145164b509191bdd00fdb79fcba405e5eca5c7affd99174a9a7d06",
                "md5": "b8ff8ef296337a8be5992eca161c4743",
                "sha256": "e9a5ed1a1843e81928490919a09af33301fb9d7920195bbae13f050e4664e4ae"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp39-cp39-macosx_10_16_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b8ff8ef296337a8be5992eca161c4743",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 440182,
            "upload_time": "2024-03-12T21:50:55",
            "upload_time_iso_8601": "2024-03-12T21:50:55.464483Z",
            "url": "https://files.pythonhosted.org/packages/35/0b/66ac68145164b509191bdd00fdb79fcba405e5eca5c7affd99174a9a7d06/psygnal-0.10.2-cp39-cp39-macosx_10_16_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1873c04e99517965640992a2e4180fc949de9555a0d68c12254276ddb4879c40",
                "md5": "3622e2e7ce56270baef73982a3fc1534",
                "sha256": "6e56ef3992e3f09e76cacec79563ec4a65c584f86742fc099adbf7d2f61e94ef"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3622e2e7ce56270baef73982a3fc1534",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 689499,
            "upload_time": "2024-03-12T21:44:20",
            "upload_time_iso_8601": "2024-03-12T21:44:20.005686Z",
            "url": "https://files.pythonhosted.org/packages/18/73/c04e99517965640992a2e4180fc949de9555a0d68c12254276ddb4879c40/psygnal-0.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7eeb34d066a2a1e30122dabe9364c45f20b2bb9e771117d111d91ef8b9c1232e",
                "md5": "171ac9699fdf80bcc18840e9448de980",
                "sha256": "a4738f8b53cd3ad268e474e4570f734ac4a23951123d14a1573e199c5294b103"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-cp39-cp39-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "171ac9699fdf80bcc18840e9448de980",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 666140,
            "upload_time": "2024-03-12T21:44:21",
            "upload_time_iso_8601": "2024-03-12T21:44:21.390299Z",
            "url": "https://files.pythonhosted.org/packages/7e/eb/34d066a2a1e30122dabe9364c45f20b2bb9e771117d111d91ef8b9c1232e/psygnal-0.10.2-cp39-cp39-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f66b02bb70e420fd368e4b010f28ffdeeffa94ed33262791fee0d48747389fe0",
                "md5": "f4fd80e1a1696845a02b64feb403a42f",
                "sha256": "4c42f76058fa89b1cc128be55d174ff79f06cd8b6cc4e0ed3eadd5d6cf9520b7"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f4fd80e1a1696845a02b64feb403a42f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 73115,
            "upload_time": "2024-03-12T21:36:30",
            "upload_time_iso_8601": "2024-03-12T21:36:30.223799Z",
            "url": "https://files.pythonhosted.org/packages/f6/6b/02bb70e420fd368e4b010f28ffdeeffa94ed33262791fee0d48747389fe0/psygnal-0.10.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8d7fe06de677dadd73e76bcbbf672c55ae98579fb30be3c3b26e0e946b16a06f",
                "md5": "3066eb7f5b132b5c3448e3d36dbfe6d6",
                "sha256": "adb2c38d5cecfdb1212970a3123079f6d97241ac0e772c3db79418a5cabef079"
            },
            "downloads": -1,
            "filename": "psygnal-0.10.2.tar.gz",
            "has_sig": false,
            "md5_digest": "3066eb7f5b132b5c3448e3d36dbfe6d6",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 96090,
            "upload_time": "2024-03-12T21:36:32",
            "upload_time_iso_8601": "2024-03-12T21:36:32.514953Z",
            "url": "https://files.pythonhosted.org/packages/8d/7f/e06de677dadd73e76bcbbf672c55ae98579fb30be3c3b26e0e946b16a06f/psygnal-0.10.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-12 21:36:32",
    "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: 0.24337s