Metadata-Version: 2.4
Name: maslosoft-signals
Version: 0.1.0
Summary: Maslosoft Signals for Python
Author: Maslosoft
License-Expression: MIT
Project-URL: Homepage, https://github.com/Maslosoft/PySignals
Project-URL: Repository, https://github.com/Maslosoft/PySignals
Project-URL: Issues, https://github.com/Maslosoft/PySignals/issues
Keywords: signals,events,observer,dispatcher,maslosoft
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Typing :: Typed
Requires-Python: >=3.12
Description-Content-Type: text/markdown

Package name: maslosoft_signals

### Introduction

The package is port of PHP package [Maslosoft Signals][php-package] to
Python.

Instead of using custom, vintage annotations processor, the package
uses standard Python decorators.

### Installation

```bash
pip install maslosoft-signals
```

### Usage

```python
from maslosoft.signals import Signal, SignalFor, SlotFor

@SlotFor("my_app.signals.UserRegistered")
class SendWelcomeEmail:
    def __init__(self, signal):
        signal.sent = True

@SignalFor("my_app.slots.GatherSlot")
class GatherableModel:
    pass

signals = Signal(paths=["src"])
signals.build()

# Emit a signal to all matching slots.
result = signals.emit(signal)

# Gather signal classes for a slot.
result = signals.gather(slot)
```

### Current scope

The initial Python port supports:

- `SignalFor` on classes
- `SlotFor` on classes for constructor injection
- `SlotFor` on methods for method injection
- AST scanning of Python source files
- generation of `signals_definition.py`
- runtime loading through `Signal.build()`, `Signal.emit()`, and `Signal.gather()`

This first slice does not port PHP-style property injection.

[php-package]: https://github.com/Maslosoft/Signals
