Metadata-Version: 2.1
Name: classic-messaging
Version: 0.0.1
Summary: Provides abstract classes for messages publication in async queues
Home-page: https://github.com/variasov/classic_messaging
Author: Sergei Variasov
Author-email: variasov@gmail.com
License: UNKNOWN
Project-URL: Bug Tracker, https://github.com/variasov/classic_messaging/issues
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3.7
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Development Status :: 4 - Beta
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Provides-Extra: dev
License-File: LICENSE

# Classic Messaging

This package provides abstract classes for message queues.

Usage:

```python
from classic.components import component
from classic.messaging import Message, Publisher


@component
class SomeService:
    publisher: Publisher

    def do_some_work(self):
        message = Message('target', 'Some very useful info')
        self.publisher.publish(message)
```

Publisher have inner buffer. Messages can be planned for publishing, and 
will be published later

Usage with deferred publishing:
```python
from classic.components import component
from classic.messaging import Message, Publisher


@component
class SomeService:
    publisher: Publisher

    def create_message(self):
        message = Message('target', 'Some very useful info')
        self.publisher.plan(message)

    def do_some_work(self):
        try:
            self.create_message()
        except Exception:
            self.publisher.reset()
            raise 
        else:
            self.publisher.flush()
```


Usage with join_points:
```python
from classic.components import component
from classic.messaging import Message, Publisher
from classic.aspects import join_poin


@component
class SomeService:
    publisher: Publisher
    
    @join_poin
    def do_some_work(self):
        message = Message('target', 'Some very useful info')
        self.publisher.plan(message)

        
class RealPublisher(Publisher):
    
    def publish(self, message):
        print(message)


publisher = RealPublisher()

SomeService.do_some_work.join(publisher)
```

