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

Uploaded Source

Built Distributions

psygnal-0.3.0-cp310-cp310-win_amd64.whl (409.6 kB view details)

Uploaded CPython 3.10 Windows x86-64

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

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

psygnal-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

psygnal-0.3.0-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.0-cp310-cp310-macosx_11_0_arm64.whl (457.1 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

psygnal-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl (523.2 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

psygnal-0.3.0-cp39-cp39-win_amd64.whl (409.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

psygnal-0.3.0-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.0-cp39-cp39-musllinux_1_1_i686.whl (2.4 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

psygnal-0.3.0-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.0-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.0-cp39-cp39-macosx_11_0_arm64.whl (458.8 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

psygnal-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl (524.9 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

psygnal-0.3.0-cp38-cp38-win_amd64.whl (412.9 kB view details)

Uploaded CPython 3.8 Windows x86-64

psygnal-0.3.0-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.0-cp38-cp38-musllinux_1_1_i686.whl (2.6 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

psygnal-0.3.0-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.0-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.0-cp38-cp38-macosx_11_0_arm64.whl (463.2 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

psygnal-0.3.0-cp38-cp38-macosx_10_9_x86_64.whl (525.0 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

psygnal-0.3.0-cp37-cp37m-win_amd64.whl (403.9 kB view details)

Uploaded CPython 3.7m Windows x86-64

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

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

psygnal-0.3.0-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.0-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.0-cp37-cp37m-macosx_10_9_x86_64.whl (511.4 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: psygnal-0.3.0.tar.gz
  • Upload date:
  • Size: 50.9 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0.tar.gz
Algorithm Hash digest
SHA256 00192772c76f75b7d722478badb1796352cf601b62e6c709a8a14ea782f812d3
MD5 3015a2b8f1550e4550b67c454327b4f4
BLAKE2b-256 371b40655e17c44b5248e7655bfe4547e362864fbf3ba564bd1e8ec2be64f220

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 409.6 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 79c13c2691172b6d79d08821ad623cd640cef50fa45ac05f04911dd969d8feea
MD5 95f4a29cc12fe309c4b1c89863ac7bed
BLAKE2b-256 72da4409e6a14e7466e6a7a38fe6dc507475491ad8ff69e1d6db3d72e244c560

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 6d45d705dd42c1129792710bafdcf22022cde712e5c22c069d4bb2c72eb7fe95
MD5 b0d1407a72f0a2583bab416b59794cf2
BLAKE2b-256 be76c6d407e86b7bf8e1d2567f3506d7961f44e5a5559444f02bb0b43ed1d167

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp310-cp310-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 17b3b1194606ead07a2657c1d51989e345803a64fec15b4d176015fec7acc172
MD5 b3a18597334063911bc6c1b41e8f27eb
BLAKE2b-256 a80b0329c120eccd743460aafc44ffb72c05d3aeca540e08cadbb761a169c530

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 2.5 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6680b80a0e01f59cb7f6a181aa1593ccc3fd3ade465a6f3795031fcd481ba7ef
MD5 cb24aa560a705b4371e96b6c41521ceb
BLAKE2b-256 293d46ec35ad5c9b6364fa6bd36e4f79dd109f6f1e2a8299e201483754c2ced0

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for psygnal-0.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 e8d2d61d309e7f9e7905ec462f1eed1880118b98987d26a7a642fcff3f3897eb
MD5 e4808d50bad00a8121d7fc3f82d6c4c7
BLAKE2b-256 6463736c343d9a6aedaeaa158f4bae1b6032725b05016146b1aa4b2a0fab8f8d

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp310-cp310-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 457.1 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8e5f318a99a0ad2770f18b361a0ae57149b2ac8e72a3a2bd027e4f0474befced
MD5 31be0b7e00b2091a74d3dc5bf03eb3d0
BLAKE2b-256 238ecfe62edfa161c720b281d784d50bd43c0c4f83a1509d688192de92dea39a

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 523.2 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cbc5fd68ea69da55f741db6b46acae9b04d94e0eb111b5ec34ce265af18c5ba2
MD5 e16a1700b05cc68d2c469b1628fece5f
BLAKE2b-256 803841bd8905dfc50e91ddd05b24ca3e1664228af3ceba21100d6144a86fe56f

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 409.4 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 1813d3854c0e68ca6b435ebee206797474a61e977ab73d709cd6635822cb90bb
MD5 43a3536ed18bdd23614a2607d504e020
BLAKE2b-256 4cc3192b6bda795dc45142651822649e420acb7ff0411091df22930905964787

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 c40875cf5751e46ef8e82a52581da57e61faf5f7e27f66eefd37ddcd79248b6f
MD5 6c17de4e73ea5683be6d475cf263c8a1
BLAKE2b-256 dc2f202e76b49c98dbf5fef79b3dcc46a16be44c631934380e74431724f75107

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp39-cp39-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 2.4 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp39-cp39-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 dce000af4db13fdce77f88feeb8c3d12345fef9efca4fdd0171a7e4c48ad1566
MD5 7581c85c05693d042b2aada2086deee9
BLAKE2b-256 0596da5d80e0727d5005cc4c859fa047bb6f14e7f7944bebc8333e641b319636

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 95e68320b0fb85819dbcd8f5a31017c0755cd219d68f8700113128b8145a432b
MD5 ceed79349471083a7c3642c16be31f9b
BLAKE2b-256 e1a783146096925cb30d878e39ce0c03b200bf551f34f8cf047c85ce56865f63

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for psygnal-0.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f4aa86ece44dd31ad4127e7937a816b680d9c6a309adfe1d8a0ca0ead9dbae62
MD5 c896de7562459b3408b4e56b5d9cc108
BLAKE2b-256 afb2ca81e4465fe1c790f4b002bfebe810771164f4bb11077df5a99c8b729c80

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 458.8 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 50b6d4145e5a4df95bf6652f6f85b875cea04192f8d47acd479e84c9b8d4af74
MD5 b210ee920589a08891a951bc43f71dfd
BLAKE2b-256 8e9e74c643a0874ed6cb834b6b7e8a108effb208b31374aac0158483c13119af

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 524.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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 201b4f4747c0ac0a70e0a2eb96a042e17b639ecf8b1d1a5349cde0b8ad5e665e
MD5 60ea58864b294d7a410847fbb735c09b
BLAKE2b-256 a5d7a2ba59ba75b10bba8d81be0e726d637d7bd7bbc3c825e110ee8ba7ee689a

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 412.9 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 4c4d5f6a03b0d18c82e9567b0761ff4aa7320bddd114c9c2544cbe23af91f0f4
MD5 68779caebb9c2cce3883178e9a43daef
BLAKE2b-256 ba74aa74c268f8707fa75900e1165b396bf38c5f72fb03298d8cd45ff9882012

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 4408b9a6f34b15aba7132a8dcf4459221bd15119ef4488185361530e302a7947
MD5 9bea3aa2767ab796aa850df63470e066
BLAKE2b-256 3d230bab10362f2b260cf180ce5a2c59d732b1cd17e7411bcc8569dbcb6befee

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp38-cp38-musllinux_1_1_i686.whl
  • Upload date:
  • Size: 2.6 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp38-cp38-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 7bebb136ec8f0d84813ace99a7a8d2c142ba6f40552aad425d2cf8ef54d28469
MD5 fb6b70d9311926aa8da084ccffff609e
BLAKE2b-256 e7411d3cd4da762517ee930ab3de2bc805525eb8e7595d88dfccc4635741c10d

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a2f2985d27fb713dddf19dba4a2bda829a6ab0b2734c516899f471a546dedd14
MD5 81f608ff9647bb53b985ac62bf223969
BLAKE2b-256 3164dcf0e2c5cceec71dde2d7c8f27fd42742ec5922c4bc1f63a8e81c9944e53

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for psygnal-0.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f5742ac1e5c12ee66d981d75113d789ab85f84a2e212181b34f151c694582d18
MD5 ac81f4cbc3ec6ee8ff1d25e3c8877790
BLAKE2b-256 447f574464bf76bc1d95ee31c3612c5760771c1c719e21f1c04d5c1085af1dc0

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 463.2 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 80322a1b9ae980ca62853c85552bdd91a56424eb352cf1be70dba702bc4bab2e
MD5 24d5025ff3c7a05293d05c62a529391a
BLAKE2b-256 3807f9038f186930d597a8e317f18cd1c3fe57a754d6d7965eeeba8d72aa57a6

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 525.0 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 11c86e32ae126b64dc51401e076f8a92cbe4ce8e2212983d06b9d342200cc6bc
MD5 d161ead29d1eb030c48e34baba57c7ef
BLAKE2b-256 8c0fcafc02ae799cf678514c2c14854edb4124151aa8b5a67124bde300a41be3

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 403.9 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 50014721dfea646ff4841f30f3058ba3fe510840632635a9f3e4e4e097fbe4ab
MD5 712b9a69a9f92750f1b22d4c812e016b
BLAKE2b-256 783ace6ead5c8a0187d454fe47e378c648a30d888072c0fe6980c126f08dd5b4

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 0bff04efbb90bf0f90d4ae80906d1639a6666e03318d75c7ab531e6352cfb6f9
MD5 0070749ac8b61015cd6963810e618446
BLAKE2b-256 2967f44a958b5d22303a3a27c6f394daddbadda7b1415e36222259151e7137dd

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp37-cp37m-musllinux_1_1_i686.whl
Algorithm Hash digest
SHA256 871dd03090179acb96da62e3968dfaba5b6fb91e25a561156401538ceeec1b51
MD5 803d787019672dfd44aa23d01ee80b65
BLAKE2b-256 eb9b272b550b074ce9c9418ad8328fc6e20da4e90bbeb86e75c1add3f9d59138

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b49ccd3538f70e2da7f2c4f2355fd088e64395b6d1b1fb3bdc4392d77369b2af
MD5 44231e62002012374ec44bb5899cadc9
BLAKE2b-256 c6c65fb0b0046b57f39747d8c3f4197ee262c1ebabf0c0beace37cfcff7a0aae

See more details on using hashes here.

Provenance

File details

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

File metadata

File hashes

Hashes for psygnal-0.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 9bd495656f76bcf8005f16763d09c81e5b8bd3a3850045059fa0cc662486142f
MD5 d42b15b69065ac0faf3afa9002f69665
BLAKE2b-256 5ad4ed834454c7bc7724bea0bbfcf8eb0a081344333772742f9977e766bc2c15

See more details on using hashes here.

Provenance

File details

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

File metadata

  • Download URL: psygnal-0.3.0-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 511.4 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.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for psygnal-0.3.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 54d0b30d43d69f5c996204561d33c0c74386ce4af9bcb2355c0ba1ea873dddc4
MD5 478ebb85f857d537ae66a3b055878787
BLAKE2b-256 51358856e22c71237591eb46c3c5c8ca6baa42af80ad5da28738dafebf278bf1

See more details on using hashes here.

Provenance

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