Skip to main content

Pure python implementation of Qt Signals

Project description

psygnal

License PyPI Conda Python Version CI codecov

Pure python implementation of Qt-style Signals, with (optional) signature and type checking, and support for threading.

Usage

Install

pip install psygnal

Basic usage

If you are familiar with the Qt Signals & Slots API as implemented in PySide and PyQt5, then you should be good to go! psygnal aims to be a superset of those APIs (some functions do accept additional arguments, like check_nargs and check_types).

Note: the name "Signal" is used here instead of pyqtSignal, following the qtpy and PySide convention.

from psygnal import Signal

# create an object with class attribute Signals
class MyObj:

    # this signal will emit a single string
    value_changed = Signal(str)

    def __init__(self, value=0):
        self._value = value

    def set_value(self, value):
        if value != self._value:
            self._value = str(value)
            # emit the signal
            self.value_changed.emit(self._value)

def on_value_changed(new_value):
    print(f"The new value is {new_value!r}")

# instantiate the object with Signals
obj = MyObj()

# connect one or more callbacks with `connect`
obj.value_changed.connect(on_value_changed)

# callbacks are called when value changes
obj.set_value('hello!')  # prints: 'The new value is 'hello!'

# disconnect callbacks with `disconnect`
obj.value_changed.disconnect(on_value_changed)

connect as a decorator

.connect() returns the object that it is passed, and so can be used as a decorator.

@obj.value_changed.connect
def some_other_callback(value):
    print(f"I also received: {value!r}")

obj.set_value('world!')
# prints:
# I also received: 'world!'

Connection safety (number of arguments)

psygnal prevents you from connecting a callback function that is guaranteed to fail due to an incompatible number of positional arguments. For example, the following callback has too many arguments for our Signal (which we declared above as emitting a single argument: Signal(str))

def i_require_two_arguments(first, second):
    print(first, second)

obj.value_changed.connect(i_require_two_arguments)

raises:

ValueError: Cannot connect slot 'i_require_two_arguments' with signature: (first, second):
- Slot requires at least 2 positional arguments, but spec only provides 1

Accepted signature: (p0: str, /)

Note: Positional argument checking can be disabled with connect(..., check_nargs=False)

Extra positional arguments ignored

While a callback may not require more positional arguments than the signature of the Signal to which it is connecting, it may accept less. Extra arguments will be discarded when emitting the signal (so it isn't necessary to create a lambda to swallow unnecessary arguments):

obj = MyObj()

def no_args_please():
    print(locals())

obj.value_changed.connect(no_args_please)

# otherwise one might need
# obj.value_changed.connect(lambda a: no_args_please())

obj.value_changed.emit('hi')  # prints: "{}"

Connection safety (types)

For type safety when connecting slots, use check_types=True when connecting a callback. Recall that our signal was declared as accepting a string Signal(str). The following function has an incompatible type annotation: x: int.

# this would fail because you cannot concatenate a string and int
def i_expect_an_integer(x: int):
    print(f'{x} + 4 = {x + 4}')

# psygnal won't let you connect it
obj.value_changed.connect(i_expect_an_integer, check_types=True)

raises:

ValueError: Cannot connect slot 'i_expect_an_integer' with signature: (x: int):
- Slot types (x: int) do not match types in signal.

Accepted signature: (p0: str, /)

Note: unlike Qt, psygnal does not perform any type coercion when emitting a value.

Connection safety (object references)

psygnal tries very hard not to hold strong references to connected objects. In the simplest case, if you connect a bound method as a callback to a signal instance:

class T:
    def my_method(self):
        ...

obj = T()
signal.connect(t.my_method)

Then there is a risk of signal holding a reference to obj even after obj has been deleted, preventing garbage collection (and possibly causing errors when the signal is emitted next). Psygnal avoids this with weak references. It goes a bit farther, trying to prevent strong references in these cases as well:

  • class methods used as the callable in functools.partial
  • decorated class methods that mangle the name of the callback.

Another common case for leaking strong references is a partial closing on an object, in order to set an attribute:

class T:
    x = 1

obj = T()
signal.connect(partial(setattr, obj, 'x'))  # ref to obj stuck in the connection

Here, psygnal offers the connect_settatr convenience method, which reduces code and helps you avoid leaking strong references to obj:

signal.connect_setatttr(obj, 'x')

Query the sender

Similar to Qt's QObject.sender() method, a callback can query the sender using the Signal.sender() class method. (The implementation is of course different than Qt, since the receiver is not a QObject.)

obj = MyObj()

def curious():
    print("Sent by", Signal.sender())
    assert Signal.sender() == obj

obj.value_changed.connect(curious)
obj.value_changed.emit(10)

# prints (and does not raise):
# Sent by <__main__.MyObj object at 0x1046a30d0>

If you want the actual signal instance that is emitting the signal (obj.value_changed in the above example), use Signal.current_emitter().

Emitting signals asynchronously (threading)

There is experimental support for calling all connected slots in another thread, using emit(..., asynchronous=True)

obj = MyObj()

def slow_callback(arg):
    import time
    time.sleep(0.5)
    print(f"Hi {arg!r}, from another thread")

obj.value_changed.connect(slow_callback)

This one is called synchronously (note the order of print statements):

obj.value_changed.emit('friend')
print("Hi, from main thread.")

# after 0.5 seconds, prints:
# Hi 'friend', from another thread
# Hi, from main thread.

This one is called asynchronously, and immediately returns to the caller. A threading.Thread object is returned.

thread = obj.value_changed.emit('friend', asynchronous=True)
print("Hi, from main thread.")

# immediately prints
# Hi, from main thread.

# then after 0.5 seconds this will print:
# Hi 'friend', from another thread

Note: The user is responsible for joining and managing the threading.Thread instance returned when calling .emit(..., asynchronous=True).

Experimental! While thread-safety is the goal, (RLocks are used during important state mutations) it is not guaranteed. Please use at your own risk. Issues/PRs welcome.

Blocking a signal

To temporarily block a signal, use the signal.blocked() context context manager:

obj = MyObj()

with obj.value_changed.blocked():
    # do stuff without obj.value_changed getting emitted
    ...

To block/unblock permanently (outside of a context manager), use signal.block() and signal.unblock().

Pausing a signal

Sometimes it is useful to temporarily collect/buffer emission events, and then emit them together as a single event. This can be accomplished using the signal.pause()/signal.resume() methods, or the signal.paused() context manager.

If a function is passed to signal.paused(func) (or signal.resume(func)) it will be passed to functools.reduce to combine all of the emitted values collected during the paused period, and a single combined value will be emitted.

obj = MyObj()
obj.value_changed.connect(print)

# note that signal.paused() and signal.resume() accept a reducer function
with obj.value_changed.paused(lambda a,b: (f'{a[0]}_{b[0]}',), ('',)):
    obj.value_changed('a')
    obj.value_changed('b')
    obj.value_changed('c')
# prints '_a_b_c'

NOTE: args passed to emit are collected as tuples, so the two arguments passed to reducer will always be tuples. reducer must handle that and return an args tuple. For example, the three emit() events above would be collected as

[('a',), ('b',), ('c',)]

and would be reduced and re-emitted as follows:

obj.emit(*functools.reduce(reducer, [('a',), ('b',), ('c',)]))

Other similar libraries

There are other libraries that implement similar event-based signals, they may server your purposes better depending on what you are doing.

PySignal (deprecated)

This package borrows inspiration from – and is most similar to – the now deprecated PySignal project, with a few notable new features in psygnal regarding signature and type checking, sender querying, and threading.

similarities with PySignal

  • still a "Qt-style" signal implementation that doesn't depend on Qt
  • supports class methods, functions, lambdas and partials

differences with PySignal

  • the class attribute pysignal.ClassSignal is called simply Signal in psygnal (to more closely match the PyQt/Pyside syntax). Correspondingly pysignal.Signal is similar to psygnal.SignalInstance.
  • Whereas PySignal refrained from doing any signature and/or type checking either at slot-connection time, or at signal emission time, psygnal offers signature declaration similar to Qt with , for example, Signal(int, int). along with opt-in signature compatibility (with check_nargs=True) and type checking (with check_types=True). .connect(..., check_nargs=True) in particular ensures that any slot to connected to a signal will at least be compatible with the emitted arguments.
  • You can query the sender in psygnal by using the Signal.sender() or Signal.current_emitter() class methods. (The former returns the instance emitting the signal, similar to Qt's QObject.sender() method, whereas the latter returns the currently emitting SignalInstance.)
  • There is basic threading support (calling all slots in another thread), using emit(..., asynchronous=True). This is experimental, and while thread-safety is the goal, it is not guaranteed.
  • There are no SignalFactory classes here.

The following two libraries implement django-inspired signals, they do not attempt to mimic the Qt API.

Blinker

Blinker provides a fast dispatching system that allows any number of interested parties to subscribe to events, or "signals".

SmokeSignal

(This appears to be unmaintained)

Benchmark history

https://www.talleylambert.com/psygnal/

Developers

Debugging

While psygnal is a pure python module, it is compiled with Cython to increase performance. To import psygnal in uncompiled mode, without deleting the shared library files from the psyngal module, set the environment variable PSYGNAL_UNCOMPILED before importing psygnal. The psygnal._compiled variable will tell you if you're running the compiled library or not.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

psygnal-0.3.2.tar.gz (51.6 kB view details)

Uploaded Source

Built Distributions

psygnal-0.3.2-cp310-cp310-win_amd64.whl (411.1 kB view details)

Uploaded CPython 3.10 Windows x86-64

psygnal-0.3.2-cp310-cp310-musllinux_1_1_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

psygnal-0.3.2-cp310-cp310-musllinux_1_1_i686.whl (2.4 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

psygnal-0.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

psygnal-0.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (2.4 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

psygnal-0.3.2-cp310-cp310-macosx_11_0_arm64.whl (458.9 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

psygnal-0.3.2-cp310-cp310-macosx_10_9_x86_64.whl (525.1 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

psygnal-0.3.2-cp39-cp39-win_amd64.whl (411.0 kB view details)

Uploaded CPython 3.9 Windows x86-64

psygnal-0.3.2-cp39-cp39-musllinux_1_1_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

psygnal-0.3.2-cp39-cp39-musllinux_1_1_i686.whl (2.5 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

psygnal-0.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

psygnal-0.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (2.4 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

psygnal-0.3.2-cp39-cp39-macosx_11_0_arm64.whl (460.5 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

psygnal-0.3.2-cp39-cp39-macosx_10_9_x86_64.whl (526.9 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

psygnal-0.3.2-cp38-cp38-win_amd64.whl (414.6 kB view details)

Uploaded CPython 3.8 Windows x86-64

psygnal-0.3.2-cp38-cp38-musllinux_1_1_x86_64.whl (2.8 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

psygnal-0.3.2-cp38-cp38-musllinux_1_1_i686.whl (2.7 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

psygnal-0.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

psygnal-0.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (2.5 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

psygnal-0.3.2-cp38-cp38-macosx_11_0_arm64.whl (464.7 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

psygnal-0.3.2-cp38-cp38-macosx_10_9_x86_64.whl (526.6 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

psygnal-0.3.2-cp37-cp37m-win_amd64.whl (405.3 kB view details)

Uploaded CPython 3.7m Windows x86-64

psygnal-0.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

psygnal-0.3.2-cp37-cp37m-musllinux_1_1_i686.whl (2.2 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

psygnal-0.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

psygnal-0.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (2.2 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

psygnal-0.3.2-cp37-cp37m-macosx_10_9_x86_64.whl (513.8 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

Details for the file psygnal-0.3.2.tar.gz.

File metadata

  • Download URL: psygnal-0.3.2.tar.gz
  • Upload date:
  • Size: 51.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2.tar.gz
Algorithm Hash digest
SHA256 3508939627882bd337c9d131e7c83bf9e881f18bfbcc067eeb29e283c2cc00a5
MD5 cc5c36b73088ed1dff26feff74bb446c
BLAKE2b-256 eebea400626350848abfebd49431ed2222f8cdb2201730c1d20ddb202836223c

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 411.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1f31f24bcb37a5410a080121161a4303357c1417b2d15d46c2d9d1a9a5662910
MD5 fbe0a19f03247945a262dd0bb8c4eb00
BLAKE2b-256 d3ad65b9d1e61d471a99e7864ca61ed3e68b3ef6c745cc70fe1fc2eda2447be7

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp310-cp310-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.10, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 84f7d481ca87375129a5f5212a74e793a58ff3c742de53a805616f4829bafb34
MD5 228275aec71a6ce6f0fa83d0063c5c6b
BLAKE2b-256 16760079c76375a58d9061ae6ff8de660bd84855ff9d9d9a4ab7eede75041b41

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp310-cp310-musllinux_1_1_i686.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp310-cp310-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 2.4 MB
  • Tags: CPython 3.10, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 a97223c0ba39b4c0eb4ce49c632d19deb0ec71a37ec99657151a4744710db238
MD5 beb8106c3d92ea5f9a1c3bc46669634f
BLAKE2b-256 a3e53a09eb097427cea82b56439b431f1e28e7729795709b782090e7d6327b48

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e1dfd549bdee5a0389415afcbd75c1bf2c49541000c9a1ec79e31aeb9685370a
MD5 7677c35531fe51c23c4e1cc0f2ce1bce
BLAKE2b-256 2c9debb708e8d86838bc733cfa1ad7595e7612043ff9a2dc52b38d02e1995ce3

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for psygnal-0.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 32ad9dc8d0d3fc8d5e34404f36b760d241e7d04412518641b7f17a64e284c28f
MD5 25df7675cba3374d33f8d0f4f9cea8b7
BLAKE2b-256 ec0fcff459f37671d62e4901ea1e29b8e19357b9f987e7969cb5f314b8fb5523

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 458.9 kB
  • Tags: CPython 3.10, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c80a669172c3599e4af7bb9fbeb3cbb5c8bd8ff30e9e828c676131cf678f0a8d
MD5 34f313ea05afc9b9df7eab2d6548c0ad
BLAKE2b-256 08b5030d16f44c8eb83cddb138a1e15ec7fef4fb0809da70cf115677d3654abb

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp310-cp310-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 525.1 kB
  • Tags: CPython 3.10, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 aea598713a5099da5d3e2d97d2cd359745d12a5732b45059cee8dcd4338b0cfb
MD5 d51bc3115f59c3e971943af31deff387
BLAKE2b-256 f9bcab351374c0fd899694eecb3e1ad7016d384f2ad782863443529fa60b9142

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 411.0 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 b63db1ae93d884290709bbf3e86a82896881c1a20015f11c68e6e378c5630791
MD5 1530accb6ebe12d6b781d30c2513d001
BLAKE2b-256 38ecd86b6ede08d7c0de58a076ff31630db4ee83cfbee05f8febce2a1bd624de

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp39-cp39-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 d8492cafdc3078fcaad11964e45f728d3bb4d1daa51505ffb5d434b268fe7849
MD5 0f1601964a50e20a033066b05e6ce937
BLAKE2b-256 57c17aa19bf90a742cc85af4fe4db5699bf66a6a66bc77fcc958dbf40ce07aea

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp39-cp39-musllinux_1_1_i686.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp39-cp39-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 4efe304e8cd2ff9de73fa5fbc0d9cba37aed414e4667353c2807be6a9c11ba6f
MD5 17f91b2832e2b40f99b36038c9d8666c
BLAKE2b-256 72eeb86b6969e4363b7304b4c5c018ceb2602bd662207261bfedbe03bab0d013

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 50f19d31b59a75352c9f886f3e2fcf5afe485c785025cf082891626fdba3e4ea
MD5 3fdee097d386c7347e6263dee9445cda
BLAKE2b-256 1242f8cb38065f5d7a0b6a2c779587f50cd208ba948c897d015b21f6e7964ede

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for psygnal-0.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 04dd6a7c459ac69b196ed199a1bd063e9b397b8bd627317128dea88b263616f8
MD5 d56dc3d39cf0dd1bcb1b37565ea175e3
BLAKE2b-256 ae71f4d0e3d1bceec8c7b9fe12a9f1ba4af266303af16fd90099400bd146a1e0

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 460.5 kB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 423e1e0e53746a3dc435c06d382f887c59edb4176f32b7c2e4fd8f4246671c03
MD5 f934e4edbb058e15be968b40d8ce722f
BLAKE2b-256 25d630b0bff297d749f2b3fbef4417c0c7a01dec54811dd191bce8a1b649f4a3

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 526.9 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a833d6f78b9fd589c50500885f861b0d37276d1ce0f2a7d18f9a17e6023ef9d0
MD5 4d42a91d4a2d43020022256ebd615eef
BLAKE2b-256 f8f935bfb5d242bc3b808b9435284836674d7e84023ab92071919b6d1ca8a26f

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 414.6 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 aab7e6786128efbd2e3563d801e56c9b4bfacef2464d8dc0685b25a7b595883b
MD5 65c866e97858431930bf649c807fa864
BLAKE2b-256 6578db21698440882b246ea98346f9f20d4a43dd5a524da7d5ad6f5235dcaaf1

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp38-cp38-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 2.8 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 952b4b32e1d8164726264b803ddf46a661f3672c0cc611d6b535f0ecad7bfa8c
MD5 cbe7436f6314fd7696e070f1f0459f9a
BLAKE2b-256 989b6e4155b5f49e32be361bdd513e9698544770ad65508d4c5d76df087cc597

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp38-cp38-musllinux_1_1_i686.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp38-cp38-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 e2a0967817239a46e8d8ab91038633ed26a0b634c2ec727829fe781920af4ed8
MD5 aeecca5399a887b7386cfba6535b056f
BLAKE2b-256 d757c5de9be800d438fdd6f456a7fddd2297da5a02b70d55216a0fcb0024e253

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.6 MB
  • Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 29c51632fb81b5827adbbcd6af088b223019e2c694b09a850eaaa56bead4846e
MD5 f4aabdd2f19618a8e1aa12cbf9aec409
BLAKE2b-256 982b82a7e543603062f5606a7cab75c2bfbf35a094376f109906b989d00318a4

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for psygnal-0.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 504fb4eed4d417b95468368858db6f6fad0f810754624ab39bf4ccfae4104dd5
MD5 84bc662ae5ce899e48f287d0e52059cd
BLAKE2b-256 522825e7d41755c410b81e2bc3690c2d73d6dee74f7b94563e08bed3d68b49ce

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 464.7 kB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 821b8b225e9289a7b832dd6429e99233f18a3e67f719c919c4e42159ed2fed87
MD5 e58ae5a8981be414d005ad4e40b14d2f
BLAKE2b-256 39d7d3d7070b09719357d483d78308155f29b1214d39c55f1869ffa1325fdd63

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 526.6 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7d6d412711e2a96a0c0438d648753ec6df66fb4057a2deed67bfcf3d7bef57f0
MD5 6af7a23b0686534c74deddeb108f7710
BLAKE2b-256 ac6c72e5104c58e45dc24584cd5ad05e71a824920ce70fe1f64e20524269f3a4

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 405.3 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 6fdcd3dab21977d4e3a04e85fefb28f5359ce03bfedbd3ebb917f37992e3326a
MD5 84e4cfd206ed1e1629770c34c7123811
BLAKE2b-256 2f240d0a1a6927b3d71e923fbf3014174db9f2e457a7659f6679dd839048e2ce

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 393ad45b1356e9cb34e28ec1c4fab237d6e194bfe921dda58bdd018af142b0de
MD5 e276395dd1e70c000caeeef3e2ee53b9
BLAKE2b-256 b8c5a5ecbf46d77ab8d063fdf921f8f9b41dc13ada586ee2e2d2fba782b978cb

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp37-cp37m-musllinux_1_1_i686.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp37-cp37m-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 2.2 MB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 9d5ea91d1d05af45e442632db14b87cc895ec9a0f2931297582c5d6e8456ff26
MD5 d693ff3114932dc7e322656987d04121
BLAKE2b-256 fe61c879e23a8190ebefa295c1ed0a3f9a8af82484e6d96a950bd164872d51f3

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.3 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 61d72275a3fb9a2216240d3c5ca51e93907c38f8fb586255aa98fc8f1d214e51
MD5 70930af90edb1d653853c7757d22ded1
BLAKE2b-256 4525ab10021b2131611def2fe45105a85007a1ec2b615c96381f1bf15e30a6d5

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for psygnal-0.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 9d9d171a74deb211064b7ab03b493f414608441cf4e57d942011c6b0d6beda0e
MD5 785f31ed1ad82e308487260eb61c85b0
BLAKE2b-256 eecf0b3c6c621d25da962e82f93f703fabde363eb96c61fa0b072ed2b2acc42d

See more details on using hashes here.

File details

Details for the file psygnal-0.3.2-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: psygnal-0.3.2-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 513.8 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.0 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8c1fc3bc46a1f34c30925585b8d954eaa07f846d6e6fe70434d7b7e7fdd6600f
MD5 0f84b41ea5bb898bac886782fc4bd769
BLAKE2b-256 95a49bedfcf7be0780fab4796e8ac125ee03d5231505fab09d81b213e57f99cd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page