Skip to main content

Pure python implementation of Qt Signals

Project description

psygnal

License PyPI 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.

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().

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)

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

Uploaded Source

Built Distributions

psygnal-0.1.2-py2.py3-none-any.whl (13.7 kB view details)

Uploaded Python 2 Python 3

psygnal-0.1.2-cp39-cp39-win_amd64.whl (138.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

psygnal-0.1.2-cp39-cp39-manylinux2014_x86_64.whl (730.0 kB view details)

Uploaded CPython 3.9

psygnal-0.1.2-cp39-cp39-manylinux2014_i686.whl (702.4 kB view details)

Uploaded CPython 3.9

psygnal-0.1.2-cp39-cp39-manylinux1_i686.whl (702.4 kB view details)

Uploaded CPython 3.9

psygnal-0.1.2-cp39-cp39-macosx_10_9_x86_64.whl (180.4 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

psygnal-0.1.2-cp38-cp38-win_amd64.whl (140.7 kB view details)

Uploaded CPython 3.8 Windows x86-64

psygnal-0.1.2-cp38-cp38-manylinux2014_x86_64.whl (859.8 kB view details)

Uploaded CPython 3.8

psygnal-0.1.2-cp38-cp38-manylinux2014_i686.whl (802.5 kB view details)

Uploaded CPython 3.8

psygnal-0.1.2-cp38-cp38-manylinux1_i686.whl (802.5 kB view details)

Uploaded CPython 3.8

psygnal-0.1.2-cp38-cp38-macosx_10_9_x86_64.whl (175.2 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

psygnal-0.1.2-cp37-cp37m-win_amd64.whl (135.4 kB view details)

Uploaded CPython 3.7m Windows x86-64

psygnal-0.1.2-cp37-cp37m-manylinux2014_x86_64.whl (654.9 kB view details)

Uploaded CPython 3.7m

psygnal-0.1.2-cp37-cp37m-manylinux2014_i686.whl (629.3 kB view details)

Uploaded CPython 3.7m

psygnal-0.1.2-cp37-cp37m-manylinux1_i686.whl (629.3 kB view details)

Uploaded CPython 3.7m

psygnal-0.1.2-cp37-cp37m-macosx_10_9_x86_64.whl (170.8 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: psygnal-0.1.2.tar.gz
  • Upload date:
  • Size: 24.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2.tar.gz
Algorithm Hash digest
SHA256 be2a41609c605f1e3b68141daccc4c66588e945b237cf615c46adfd676ae1eb8
MD5 9d5651dc3f21f9bf9920454b5f0710e6
BLAKE2b-256 78e57b76ac7a2a6da8b5a7eb11a133ced8c50eadf78ca96c5ab6d932f21080c9

See more details on using hashes here.

File details

Details for the file psygnal-0.1.2-py2.py3-none-any.whl.

File metadata

  • Download URL: psygnal-0.1.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 13.7 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 5ae541fa5f8a758aabfd169f476cd3f5b231fb6b62b7e8b170c51f84222071e7
MD5 0e2abd059a056d0afea31158416cd2be
BLAKE2b-256 842e020803d46deec21ba2fb3b03e3ff79630d7d044a544ed1f4fcbd61fc128f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.1.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 138.4 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a3f24bc14e4a6f80e129bdd75779a9829706f8ad451b08ff971a95ee41d5e0af
MD5 4b1bbddc0a6ccfd936f68959ba3eb946
BLAKE2b-256 f78ad6de6d0668eba9a8e67ec74a22fe5b37485e83457cf9243872348b1edf2f

See more details on using hashes here.

File details

Details for the file psygnal-0.1.2-cp39-cp39-manylinux2014_x86_64.whl.

File metadata

  • Download URL: psygnal-0.1.2-cp39-cp39-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 730.0 kB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp39-cp39-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1fccc6e4b705fef0505898c3ce780ad03214930ff728180db5bfb27aaca98edc
MD5 277a6bcbcc61d3e91a93ab908b047e2c
BLAKE2b-256 6b4649d59fc0b76cf2c6d8503d9f89efc438e400c3e76cdac1c9505bbd9e0de4

See more details on using hashes here.

File details

Details for the file psygnal-0.1.2-cp39-cp39-manylinux2014_i686.whl.

File metadata

  • Download URL: psygnal-0.1.2-cp39-cp39-manylinux2014_i686.whl
  • Upload date:
  • Size: 702.4 kB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp39-cp39-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 495790e5e8325b014eab38b885cd1f7275df7411e61d66238db26a93b108e41f
MD5 439791354765729f3daa85e698ca0c63
BLAKE2b-256 93af6a23b5eaeace6c35fdec25d3cb2bd61bdd96b64de2710469c457fa902319

See more details on using hashes here.

File details

Details for the file psygnal-0.1.2-cp39-cp39-manylinux1_i686.whl.

File metadata

  • Download URL: psygnal-0.1.2-cp39-cp39-manylinux1_i686.whl
  • Upload date:
  • Size: 702.4 kB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp39-cp39-manylinux1_i686.whl
Algorithm Hash digest
SHA256 9a80ab5f13329206108f8cc8cabfd38d28a5783e59439c24e038d21af47e7806
MD5 89caba43360aa53f2832c00a6298c421
BLAKE2b-256 b5297c088c3e29c0a207cc4c722362767d49a4e4363ff93f60ce85e97ac0a141

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.1.2-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 180.4 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5af790ca1ec26b00657c6f71976e2b46ac637280483b8eeb151f08e2659a7267
MD5 1c62bd554c8be2385376bf6a0d8089d3
BLAKE2b-256 166b3e27cf92d5aea361860103a63c0f1758841151f86a68e24e9b3d6049dd94

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.1.2-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 140.7 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 3d9f4e95296ed66fce1177b67d199f878823ac3d581badb3a7b7f09becd3f484
MD5 1bf5ff1b98705684c5c981f350a722ed
BLAKE2b-256 7a133bd8a76580e284ce4741f20aa419b170a2f7cc5199e0c070a850545f54d6

See more details on using hashes here.

File details

Details for the file psygnal-0.1.2-cp38-cp38-manylinux2014_x86_64.whl.

File metadata

  • Download URL: psygnal-0.1.2-cp38-cp38-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 859.8 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp38-cp38-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c02ae2b835be2f931072442c494dc1c151ad203089307fe062ffa4c72e2bcaad
MD5 efa7aa4413853ca658f7b9dd15c319aa
BLAKE2b-256 f70aeb8f0573f502be3269ce8ec5bff9855fbbf8208d8e347bd368caf198a2ad

See more details on using hashes here.

File details

Details for the file psygnal-0.1.2-cp38-cp38-manylinux2014_i686.whl.

File metadata

  • Download URL: psygnal-0.1.2-cp38-cp38-manylinux2014_i686.whl
  • Upload date:
  • Size: 802.5 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp38-cp38-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 4f516cce06bfcb3c9619d93bfb00bada5cc1b9aa98d668c47fc2e521e5a9f6ca
MD5 c4105ebd8f99f411c2434dab74d89dec
BLAKE2b-256 80b3b2b8f7d3147cbd472bfe1223ef14ca1fecd6c585de2490b33b3d33c636cc

See more details on using hashes here.

File details

Details for the file psygnal-0.1.2-cp38-cp38-manylinux1_i686.whl.

File metadata

  • Download URL: psygnal-0.1.2-cp38-cp38-manylinux1_i686.whl
  • Upload date:
  • Size: 802.5 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp38-cp38-manylinux1_i686.whl
Algorithm Hash digest
SHA256 2c41047f741c225de1ee1999a2c3dd444f41206a89bab16ec05891b74f0999a6
MD5 27dcee83c38284eb6b011b57416c5d2d
BLAKE2b-256 590e843b12a67b9d65f68e7e51a5ba682c5ac6e230a7aad1364a925913753f38

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.1.2-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 175.2 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 24cea1ae272b275c3370a0cb96c10aa7547bc35ab68bb21ce6cad2d41e56236e
MD5 c083a280a461fc58aeae1689e51d9d04
BLAKE2b-256 717e9a381690561c6cfa08081de6e415e16039a7bce6efc780bc0febd19fce2f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.1.2-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 135.4 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 4a726293065461d84c0d97a691672b060e11e4b042da91d1bdfd74160e148a91
MD5 81ef1fb368060891477c5785c6772737
BLAKE2b-256 1068cb415a644f3a839e4b8ae4c46e945555aa7f0cb1513c82eed15588cb71a1

See more details on using hashes here.

File details

Details for the file psygnal-0.1.2-cp37-cp37m-manylinux2014_x86_64.whl.

File metadata

  • Download URL: psygnal-0.1.2-cp37-cp37m-manylinux2014_x86_64.whl
  • Upload date:
  • Size: 654.9 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b33afe96e28559e9f17f21981e7dc4750deb6e199c447ec1f0612dacbdedc2bc
MD5 47ca98d34effc24aaa0ed392d7ea27d8
BLAKE2b-256 c6723557066729eed9fa4cdac78f1afa4b17aa8efcd08042099628e660343d96

See more details on using hashes here.

File details

Details for the file psygnal-0.1.2-cp37-cp37m-manylinux2014_i686.whl.

File metadata

  • Download URL: psygnal-0.1.2-cp37-cp37m-manylinux2014_i686.whl
  • Upload date:
  • Size: 629.3 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp37-cp37m-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 813fcb929e7c5aabf3cb65b47438551ba6294a072a604e8187b973b1c1af14ad
MD5 8830545ae33402acbf10ac203aab9d32
BLAKE2b-256 75da9b2f50313badfba75b9dd1882f4dd1ebceb7d91c63e95438894a5b2283da

See more details on using hashes here.

File details

Details for the file psygnal-0.1.2-cp37-cp37m-manylinux1_i686.whl.

File metadata

  • Download URL: psygnal-0.1.2-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 629.3 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 aba0f51f9fe0e86522ff57d29a082bc8b00c58a5d54f310e0ca9b9b4bd97454c
MD5 b66e8ff4eadbc5a29c227baf5755dc42
BLAKE2b-256 6f8bf9b626a1523ee06afe219f612f720dee21cd2d11d49213a16e9d8278a305

See more details on using hashes here.

File details

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

File metadata

  • Download URL: psygnal-0.1.2-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 170.8 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

File hashes

Hashes for psygnal-0.1.2-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4b49d95795861e1568349afc7c5c83116418fb471aba96009f337b72621f1853
MD5 b09484cfa53c1c0e041a19366d7fccc7
BLAKE2b-256 4b190ad12994fd14b52f442ece9fc991a7d79a6414c91b9fc4f18658582f628b

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