Pure python implementation of Qt Signals
Project description
psygnal
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.ClassSignalis called simplySignalinpsygnal(to more closely match the PyQt/Pyside syntax). Correspondinglypysignal.Signalis similar topsygnal.SignalInstance. - Whereas
PySignalrefrained from doing any signature and/or type checking either at slot-connection time, or at signal emission time,psygnaloffers signature declaration similar to Qt with , for example,Signal(int, int). along with opt-in signature compatibility (withcheck_nargs=True) and type checking (withcheck_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
psygnalby using theSignal.sender()orSignal.current_emitter()class methods. (The former returns the instance emitting the signal, similar to Qt'sQObject.sender()method, whereas the latter returns the currently emittingSignalInstance.) - 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
SignalFactoryclasses 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2ebcb2ea0d876d9e378def20a016fc20597b34d618968749b4e014097e3202f
|
|
| MD5 |
7d65e0bacdc234579bab1fd54d36848f
|
|
| BLAKE2b-256 |
9e13eb670dea6c68b7a59473273d9508d1462ae8fd116726424acd0087e1da46
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
adf8e309d50cfb64451093ff8148e25c9af3078a5ed047dc651b6c529f2b48c6
|
|
| MD5 |
95d95ef7c3e1f2f5637f760626123007
|
|
| BLAKE2b-256 |
d8ae82a2192a33651674dfe5866414fc3db7d745d1524beb1fd8d443e860cd74
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff795696b13f917e961b113fd78188a4b04e1679a430d3bbe40451bb89f45f1b
|
|
| MD5 |
cee5271948ba18d7932356dc2fd88699
|
|
| BLAKE2b-256 |
70f99ec3832b076b1cfafb22006c5f90e70cc7013357a9bc49a10ffd4ab23a78
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
012bce457efc15e83630a08ee2afd59fb9734dff12dd5d6026fe7953968fd359
|
|
| MD5 |
0f1256cf2451e510692af05adbf8f3fd
|
|
| BLAKE2b-256 |
2c8a412fe072144f4f503f542b304dba7864822a8a0e621cb80b85ca2b4b0497
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98a3c810bf5b49fa1d2f23ba0a78f29bcca0796c761f8da6379e4a49acb077f0
|
|
| MD5 |
e0eef1a4af748b10ac14a81600e0b7fd
|
|
| BLAKE2b-256 |
35b05acdb431ecf3bc98b42760bbd77c44d17807c572f3edaa7e999b645abffa
|
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
- Download URL: psygnal-0.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82862c709479dbb0149cc85007f1d646a36dfee86a047e0a8612955456db1a33
|
|
| MD5 |
9ec0ee96ccebf01641c0a06dd9100fc4
|
|
| BLAKE2b-256 |
e47ed1be820fa420981dab081cb5c735fc3b6d44182ec10a6d872a34e512187a
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b2085d1489738493797a3a687d41c13b05aef13c01587a1a612edcc5154daac0
|
|
| MD5 |
c04e0ed60e2c3931ed173c260f57c262
|
|
| BLAKE2b-256 |
a6824aa53ec0b2e1008feb653cd8ce188428bdef1688c628ebf13542e643faf3
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82c726336f4924142a1b92defecc1646c89b8c6a17da8967f6b85f7785aa8f2a
|
|
| MD5 |
56b4800bfe849cbe9ece903b26f1f54e
|
|
| BLAKE2b-256 |
164c3fb1b698265fefc21a39b16e858c4a307eb087b3c8e4571bf018f642f9be
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
10f8f759fd62d1160f30af96eac9c6c109d5b4255b1ad3462d15267d4769581d
|
|
| MD5 |
8656067b64cfb166c902f279334515a2
|
|
| BLAKE2b-256 |
71fc216260582c0c1f4b704d1598e0c3c4c64b6339a2f52240e090455639cdd0
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
799b582603aff60eec33de42e85a7f88b54a7f135e69d7a70fd6ac895b55cac9
|
|
| MD5 |
151395cedbbff08eb4dac09f411a59fd
|
|
| BLAKE2b-256 |
feea53fdfab5b0dad5fc93886b7003db460d91a2b2c4f198c7828f562194f28f
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
291902fec95ea406af23060caca0350e55a72d4ecd4f9c7819bc02057edcd964
|
|
| MD5 |
63e9b105b999a10957de154d268de1e3
|
|
| BLAKE2b-256 |
022643600596561b47cff663069c7f6ab2a06f44df5eee1a20753427d01e275b
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e69d7d93ed41ac1ebae297809683402eee1536c23ac6cbdb9037f351fb8955e7
|
|
| MD5 |
40d7618c7a489c2886a7c8a7f5676eea
|
|
| BLAKE2b-256 |
9bb5ccf4bc637585429f81877a8de62df72a621b509a061d69d52c50056462cc
|
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
- Download URL: psygnal-0.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 2.4 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e911baef75c840faeee368b293c82a4eec062f9c2241b05d0279a0c439627b6
|
|
| MD5 |
8c27e0840b541ce2982f99fbe103303d
|
|
| BLAKE2b-256 |
968948528344bd5d7218c11ebd35d697f1a3e6c54f06ed0bf450d3342ca22d06
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29227bdf2e93a568a2b01d040b708dedab43790ba44f47912111407ae08d1cad
|
|
| MD5 |
5e7583c2dddafa12ff9a982d5edbd85d
|
|
| BLAKE2b-256 |
c9d31942dfba14cba06b8e11eb51c4a3493b54f1783c27a44eb85ae9f0e37933
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
061e5c478c4bfb8bcd9777b8373736e889c5aa11a866ee0c96a608453571740f
|
|
| MD5 |
da693758a4d33e2dbae92fe18e052fbf
|
|
| BLAKE2b-256 |
5f695d37ebf3f1166c1268bb991f5f754f371c21d85c734216fe86d0cd66c693
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d02de55c985c258a3e7fd5e73a21d6c42535576276f1db5655ecc6a6eff3359
|
|
| MD5 |
59f9ccccf96dbd19f86e4cb1e221c22c
|
|
| BLAKE2b-256 |
561d7692ea2fe5985fdb9b303ca507e162c2785e61a55d9207a57a58feec159b
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
afa228c81753f921734233b3eff1d36b5857c0b8c35389c54c0982dc16976a3c
|
|
| MD5 |
6920838f986be2020dcc11125158e107
|
|
| BLAKE2b-256 |
dde6d61f8e0fb4fbaa44446cb5f82ccec6f133eff513c7730d87e863e8277e00
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c39fccdea01481995448a783be310f848497821a33eb4334af2b51bdf06e88f
|
|
| MD5 |
e9d457311f9a46f46bd3a4ed8ad5b73b
|
|
| BLAKE2b-256 |
306a6211814155f7d18e8fab630afe63bf3a3e500ddaa2e6547e51d023173ecf
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3655c7e787f3f514badf7694bf16c932289fa546c617f71209a1221c493a62d
|
|
| MD5 |
1b3421c160a1656a8d3a71166317f918
|
|
| BLAKE2b-256 |
08dbdd7138865b456ed1c8d255eec7ef77bfb38b6bc03f136aa91bc79302518e
|
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
- Download URL: psygnal-0.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.8, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbab5b2b0d7c055861545b4b617c3ce34903ae7a9879541e39286af70526b396
|
|
| MD5 |
f69410c402cbb44cc1fb0b53db8cd109
|
|
| BLAKE2b-256 |
02318c47b10033120a1b0f09abbc3ff79849d08fcdc0fd736df58c5101b447eb
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fee7fe257896fbbadc5a087644072707cd9b52e97998e4338f893edb2f2bf737
|
|
| MD5 |
3e65ad8ae5210694e585c6e1690741f2
|
|
| BLAKE2b-256 |
bb071cae499b498945ceba36f9f516d061a43f5062c63ec6103891077fa355ad
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23df8b4db2b071bf0cb37f3135a81b5b98ca8ba7455a9872781f7b58b4dc9160
|
|
| MD5 |
8a2eec3deb09eb81f698effdb969d5a5
|
|
| BLAKE2b-256 |
11dfa9bca9718036619df20cca3141657ee2ec07a5375bd7c4d81e6e173bcc4d
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2fc7e9e26c7c75ecb674492258bb354347293a66252fb8b3e0c63b8877b0b4c3
|
|
| MD5 |
87aa318c25b9677acb2cdf628c3a1934
|
|
| BLAKE2b-256 |
fefc03cc7fb77a2216a2f9d2f70c1484b80c47b811ad9467aefabb4c2f0bafed
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c183678f9d158367399b400fb76841e801e70a9ccfa6f595ecacfd5f7576b367
|
|
| MD5 |
ab4050963fb59dd9d64873cb70ad37ce
|
|
| BLAKE2b-256 |
31d32b2ed3e1f75c65358657c06fb16231e812e9478c6b076d5d8b22fdb5f769
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2421b3ab2bfcea1a387545263e29ec1c4bc7af5c6847acec20f8f1b1cbeceb3
|
|
| MD5 |
7dee10eeec77974ec44b9dcf6730f110
|
|
| BLAKE2b-256 |
218320301ed8dd65cdbe5f48b2c0d1782acdb9173c0342badbd690d5a25ed935
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28451b8384dd46cfc678a22dd239d7b3fd1bec06b998708eb484997e749e0465
|
|
| MD5 |
0838b8a5728012192f7520bad71dad76
|
|
| BLAKE2b-256 |
6bd2081d88b3dbde9921bec435e19ff30e960e0aaa4ce73624e2f2988bd4afdf
|
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
- Download URL: psygnal-0.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.7m, manylinux: glibc 2.17+ i686, manylinux: glibc 2.5+ 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ac2fab9d72e5c8c0dd191461af76265eb906a73d75156cb212619485776db07
|
|
| MD5 |
520efe2329b3375b5b9ec970ac0fbf6f
|
|
| BLAKE2b-256 |
028ede42481931afb25b0b5d026b17fb9040feb639ce63a6f7f27b3a2ea9fc36
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aabc3c4aaa5502dc8c1bd1cb23024e0b2d0ad1d7dcf82cc19f9dfb1460ba8f5d
|
|
| MD5 |
6ba528750cd7b7b801a7fb924f8c1e3f
|
|
| BLAKE2b-256 |
6fe4226b879b7d65065d1e60115c55797fdca6e7bc2a6d9b114f0a6528194f8a
|