Skip to main content

Simple signals and handlers

Project description

Classic Signals

Библиотека предоставляет способ инверсии контроля через сигналы и реакции.

По сути, это паттерн Observer и немного сахара сверху. В одном месте программы мы объявляем сигналы, пользуясь декоратором signal, в других местах приложения пишем реакции на этих сигналов. Реакции - это любой вызываемый объект, принимающий один аргумент - инстанс сигнала. Это может быть и просто функция или метод, для удобства завернутый в декоратор reaction. Последнее, что нужно, это инстанс класса Hub. В Hub перед началом работы можно зарегистрировать реакции, потом можно вызвать у него метод notify, передав в него инстанс сигнала, и Hub вызовет все реакции, относящиеся к сигналу.

Реакции исполняются последовательно в единственном текущем потоке. Не рекомендуется создавать новые потоки из сигналов. Этот механизм предназначается для связки разных частей кода с инверсией зависимости, не для распараллеливания задач.

Пример:

from classic.components import component
from classic.signals import reaction, Hub, signal


@signal
class SomethingHappened:
    """Под капотом сигналы - на самом деле датаклассы"""
    some_field: int


@signal
class SomethingAnotherHappened:
    some_field: int


@component
class SomeHandlers:

    @reaction
    def on_something_happened(self, signal: SomethingHappened):
        print(f'Что-то произошло: {signal}')

    @reaction
    def on_something_another_happened(self, signal: SomethingAnotherHappened):
        print(f'Что-то еще произошло: {signal}')


hub = Hub()
SomeHandlers(signals=hub)


signal_1 = SomethingHappened(some_field=0)
signal_2 = SomethingAnotherHappened(some_field=0)

hub.notify(signal_1, signal_2)

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

classic_signals-0.1.1.tar.gz (7.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

classic_signals-0.1.1-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file classic_signals-0.1.1.tar.gz.

File metadata

  • Download URL: classic_signals-0.1.1.tar.gz
  • Upload date:
  • Size: 7.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for classic_signals-0.1.1.tar.gz
Algorithm Hash digest
SHA256 d04ca17baf245e691eb81f05afc9092154fbf8fc6f6412571f50fb7dba9846f7
MD5 63307623c7227a2233289c117fc1abba
BLAKE2b-256 d8ec14203fe1e2948c300b995ee4d7cff577bdb7d4f2830ce9d5548742ff4682

See more details on using hashes here.

Provenance

The following attestation bundles were made for classic_signals-0.1.1.tar.gz:

Publisher: publish.yml on variasov/classic-signals

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file classic_signals-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for classic_signals-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 820c33aa665d9431995cb758cbdbbb3332a532062361dcbc53642e020bbfe3fe
MD5 4cb58cad067a6ca059d01a9fa8ac8fa3
BLAKE2b-256 5ab5dc10e54dc4c8f546bcdcead9eb70812af15182a96161da3d3acb555a0e9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for classic_signals-0.1.1-py3-none-any.whl:

Publisher: publish.yml on variasov/classic-signals

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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