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.1.tar.gz (51.4 kB view details)

Uploaded Source

Built Distributions

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

Uploaded CPython 3.10 Windows x86-64

psygnal-0.3.1-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.1-cp310-cp310-musllinux_1_1_i686.whl (2.4 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

psygnal-0.3.1-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.1-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.1-cp310-cp310-macosx_11_0_arm64.whl (458.9 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

psygnal-0.3.1-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.1-cp39-cp39-win_amd64.whl (411.0 kB view details)

Uploaded CPython 3.9 Windows x86-64

psygnal-0.3.1-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.1-cp39-cp39-musllinux_1_1_i686.whl (2.5 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

psygnal-0.3.1-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.1-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.1-cp39-cp39-macosx_11_0_arm64.whl (460.5 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

psygnal-0.3.1-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.1-cp38-cp38-win_amd64.whl (414.6 kB view details)

Uploaded CPython 3.8 Windows x86-64

psygnal-0.3.1-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.1-cp38-cp38-musllinux_1_1_i686.whl (2.7 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

psygnal-0.3.1-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.1-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.1-cp38-cp38-macosx_11_0_arm64.whl (464.7 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

psygnal-0.3.1-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.1-cp37-cp37m-win_amd64.whl (405.4 kB view details)

Uploaded CPython 3.7m Windows x86-64

psygnal-0.3.1-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.1-cp37-cp37m-musllinux_1_1_i686.whl (2.2 MB view details)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

psygnal-0.3.1-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.1-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.1-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.1.tar.gz.

File metadata

  • Download URL: psygnal-0.3.1.tar.gz
  • Upload date:
  • Size: 51.4 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.1.tar.gz
Algorithm Hash digest
SHA256 f2ebcb2ea0d876d9e378def20a016fc20597b34d618968749b4e014097e3202f
MD5 7d65e0bacdc234579bab1fd54d36848f
BLAKE2b-256 9e13eb670dea6c68b7a59473273d9508d1462ae8fd116726424acd0087e1da46

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 adf8e309d50cfb64451093ff8148e25c9af3078a5ed047dc651b6c529f2b48c6
MD5 95d95ef7c3e1f2f5637f760626123007
BLAKE2b-256 d8ae82a2192a33651674dfe5866414fc3db7d745d1524beb1fd8d443e860cd74

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 ff795696b13f917e961b113fd78188a4b04e1679a430d3bbe40451bb89f45f1b
MD5 cee5271948ba18d7932356dc2fd88699
BLAKE2b-256 70f99ec3832b076b1cfafb22006c5f90e70cc7013357a9bc49a10ffd4ab23a78

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 012bce457efc15e83630a08ee2afd59fb9734dff12dd5d6026fe7953968fd359
MD5 0f1256cf2451e510692af05adbf8f3fd
BLAKE2b-256 2c8a412fe072144f4f503f542b304dba7864822a8a0e621cb80b85ca2b4b0497

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 98a3c810bf5b49fa1d2f23ba0a78f29bcca0796c761f8da6379e4a49acb077f0
MD5 e0eef1a4af748b10ac14a81600e0b7fd
BLAKE2b-256 35b05acdb431ecf3bc98b42760bbd77c44d17807c572f3edaa7e999b645abffa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for psygnal-0.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 82862c709479dbb0149cc85007f1d646a36dfee86a047e0a8612955456db1a33
MD5 9ec0ee96ccebf01641c0a06dd9100fc4
BLAKE2b-256 e47ed1be820fa420981dab081cb5c735fc3b6d44182ec10a6d872a34e512187a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b2085d1489738493797a3a687d41c13b05aef13c01587a1a612edcc5154daac0
MD5 c04e0ed60e2c3931ed173c260f57c262
BLAKE2b-256 a6824aa53ec0b2e1008feb653cd8ce188428bdef1688c628ebf13542e643faf3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 82c726336f4924142a1b92defecc1646c89b8c6a17da8967f6b85f7785aa8f2a
MD5 56b4800bfe849cbe9ece903b26f1f54e
BLAKE2b-256 164c3fb1b698265fefc21a39b16e858c4a307eb087b3c8e4571bf018f642f9be

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 10f8f759fd62d1160f30af96eac9c6c109d5b4255b1ad3462d15267d4769581d
MD5 8656067b64cfb166c902f279334515a2
BLAKE2b-256 71fc216260582c0c1f4b704d1598e0c3c4c64b6339a2f52240e090455639cdd0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 799b582603aff60eec33de42e85a7f88b54a7f135e69d7a70fd6ac895b55cac9
MD5 151395cedbbff08eb4dac09f411a59fd
BLAKE2b-256 feea53fdfab5b0dad5fc93886b7003db460d91a2b2c4f198c7828f562194f28f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 291902fec95ea406af23060caca0350e55a72d4ecd4f9c7819bc02057edcd964
MD5 63e9b105b999a10957de154d268de1e3
BLAKE2b-256 022643600596561b47cff663069c7f6ab2a06f44df5eee1a20753427d01e275b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e69d7d93ed41ac1ebae297809683402eee1536c23ac6cbdb9037f351fb8955e7
MD5 40d7618c7a489c2886a7c8a7f5676eea
BLAKE2b-256 9bb5ccf4bc637585429f81877a8de62df72a621b509a061d69d52c50056462cc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for psygnal-0.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 6e911baef75c840faeee368b293c82a4eec062f9c2241b05d0279a0c439627b6
MD5 8c27e0840b541ce2982f99fbe103303d
BLAKE2b-256 968948528344bd5d7218c11ebd35d697f1a3e6c54f06ed0bf450d3342ca22d06

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 29227bdf2e93a568a2b01d040b708dedab43790ba44f47912111407ae08d1cad
MD5 5e7583c2dddafa12ff9a982d5edbd85d
BLAKE2b-256 c9d31942dfba14cba06b8e11eb51c4a3493b54f1783c27a44eb85ae9f0e37933

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 061e5c478c4bfb8bcd9777b8373736e889c5aa11a866ee0c96a608453571740f
MD5 da693758a4d33e2dbae92fe18e052fbf
BLAKE2b-256 5f695d37ebf3f1166c1268bb991f5f754f371c21d85c734216fe86d0cd66c693

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 3d02de55c985c258a3e7fd5e73a21d6c42535576276f1db5655ecc6a6eff3359
MD5 59f9ccccf96dbd19f86e4cb1e221c22c
BLAKE2b-256 561d7692ea2fe5985fdb9b303ca507e162c2785e61a55d9207a57a58feec159b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 afa228c81753f921734233b3eff1d36b5857c0b8c35389c54c0982dc16976a3c
MD5 6920838f986be2020dcc11125158e107
BLAKE2b-256 dde6d61f8e0fb4fbaa44446cb5f82ccec6f133eff513c7730d87e863e8277e00

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 3c39fccdea01481995448a783be310f848497821a33eb4334af2b51bdf06e88f
MD5 e9d457311f9a46f46bd3a4ed8ad5b73b
BLAKE2b-256 306a6211814155f7d18e8fab630afe63bf3a3e500ddaa2e6547e51d023173ecf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f3655c7e787f3f514badf7694bf16c932289fa546c617f71209a1221c493a62d
MD5 1b3421c160a1656a8d3a71166317f918
BLAKE2b-256 08dbdd7138865b456ed1c8d255eec7ef77bfb38b6bc03f136aa91bc79302518e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for psygnal-0.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 bbab5b2b0d7c055861545b4b617c3ce34903ae7a9879541e39286af70526b396
MD5 f69410c402cbb44cc1fb0b53db8cd109
BLAKE2b-256 02318c47b10033120a1b0f09abbc3ff79849d08fcdc0fd736df58c5101b447eb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fee7fe257896fbbadc5a087644072707cd9b52e97998e4338f893edb2f2bf737
MD5 3e65ad8ae5210694e585c6e1690741f2
BLAKE2b-256 bb071cae499b498945ceba36f9f516d061a43f5062c63ec6103891077fa355ad

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 23df8b4db2b071bf0cb37f3135a81b5b98ca8ba7455a9872781f7b58b4dc9160
MD5 8a2eec3deb09eb81f698effdb969d5a5
BLAKE2b-256 11dfa9bca9718036619df20cca3141657ee2ec07a5375bd7c4d81e6e173bcc4d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 405.4 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.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 2fc7e9e26c7c75ecb674492258bb354347293a66252fb8b3e0c63b8877b0b4c3
MD5 87aa318c25b9677acb2cdf628c3a1934
BLAKE2b-256 fefc03cc7fb77a2216a2f9d2f70c1484b80c47b811ad9467aefabb4c2f0bafed

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 c183678f9d158367399b400fb76841e801e70a9ccfa6f595ecacfd5f7576b367
MD5 ab4050963fb59dd9d64873cb70ad37ce
BLAKE2b-256 31d32b2ed3e1f75c65358657c06fb16231e812e9478c6b076d5d8b22fdb5f769

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 a2421b3ab2bfcea1a387545263e29ec1c4bc7af5c6847acec20f8f1b1cbeceb3
MD5 7dee10eeec77974ec44b9dcf6730f110
BLAKE2b-256 218320301ed8dd65cdbe5f48b2c0d1782acdb9173c0342badbd690d5a25ed935

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 28451b8384dd46cfc678a22dd239d7b3fd1bec06b998708eb484997e749e0465
MD5 0838b8a5728012192f7520bad71dad76
BLAKE2b-256 6bd2081d88b3dbde9921bec435e19ff30e960e0aaa4ce73624e2f2988bd4afdf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for psygnal-0.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 0ac2fab9d72e5c8c0dd191461af76265eb906a73d75156cb212619485776db07
MD5 520efe2329b3375b5b9ec970ac0fbf6f
BLAKE2b-256 028ede42481931afb25b0b5d026b17fb9040feb639ce63a6f7f27b3a2ea9fc36

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.3.1-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.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 aabc3c4aaa5502dc8c1bd1cb23024e0b2d0ad1d7dcf82cc19f9dfb1460ba8f5d
MD5 6ba528750cd7b7b801a7fb924f8c1e3f
BLAKE2b-256 6fe4226b879b7d65065d1e60115c55797fdca6e7bc2a6d9b114f0a6528194f8a

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