-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
187 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,69 @@ | ||
from message_flow import MessageFlow, Message, Payload, Header | ||
|
||
from types import TracebackType | ||
from typing import Type | ||
from message_flow import MessageFlow, Message, Payload, Header, BaseMiddleware | ||
from message_flow.utils import logger | ||
|
||
class OrderCreated(Message): | ||
order_id: str = Payload() | ||
tenant_id: str = Header() | ||
|
||
|
||
class MockMiddleware(BaseMiddleware): | ||
def on_consume(self) -> None: | ||
self.headers.update({"a": 123}) | ||
print("h") | ||
return super().on_consume() | ||
|
||
def after_consume(self, error: Exception | None = None) -> None: | ||
print("11") | ||
return super().after_consume(error) | ||
|
||
|
||
class MockMiddleware1(BaseMiddleware): | ||
def on_consume(self) -> None: | ||
self.headers.update({"a": 123}) | ||
print("h1") | ||
return super().on_consume() | ||
|
||
def after_consume(self, error: Exception | None = None) -> None: | ||
print("1122") | ||
return super().after_consume(error) | ||
|
||
def on_produce(self) -> None: | ||
print("produce") | ||
return super().on_produce() | ||
|
||
def after_produce(self, error: Exception | None = None) -> None: | ||
print("after produce") | ||
return super().after_produce(error) | ||
|
||
|
||
class CustomMiddleware(BaseMiddleware): | ||
def on_consume(self) -> None: | ||
logger.info("Message with %s payload and %s headers received.", self.payload, self.headers) | ||
return super().on_consume() | ||
|
||
def after_consume(self, error: Exception | None = None) -> None: | ||
logger.info("Message with %s payload and %s headers processed.", self.payload, self.headers) | ||
return super().after_consume(error) | ||
|
||
def on_produce(self) -> None: | ||
logger.info("Producing message with %s payload and %s headers.", self.payload, self.headers) | ||
return super().on_produce() | ||
|
||
def after_produce(self, error: Exception | None = None) -> None: | ||
logger.info("Message with %s payload and %s headers produced.", self.payload, self.headers) | ||
return super().after_produce(error) | ||
|
||
|
||
app = MessageFlow() | ||
app.add_middleware(MockMiddleware) | ||
app.add_middleware(MockMiddleware1) | ||
app.add_middleware(CustomMiddleware) | ||
|
||
@app.subscribe(address="orders", message=OrderCreated) | ||
def order_created_handler(order_created: OrderCreated) -> None: | ||
print("Event received", order_created.order_id, order_created.tenant_id) | ||
return order_created | ||
|
||
app.dispatch() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
from .base_middleware import * | ||
from .message_flow import * | ||
from .messaging import * |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
from contextlib import contextmanager | ||
from typing import Generator | ||
|
||
from ..utils import external | ||
|
||
|
||
@external | ||
class BaseMiddleware: | ||
def __init__(self, payload: bytes, headers: dict[str, str]) -> None: | ||
self.payload = payload | ||
self.headers = headers | ||
|
||
def on_consume(self) -> None: | ||
pass | ||
|
||
def after_consume( | ||
self, | ||
error: Exception | None = None, | ||
) -> None: | ||
if error is not None: | ||
raise error | ||
|
||
@contextmanager | ||
def consume(self) -> Generator[None, None, None]: | ||
consume_error: Exception | None = None | ||
|
||
try: | ||
self.on_consume() | ||
yield | ||
except Exception as error: | ||
consume_error = error | ||
|
||
self.after_consume(consume_error) | ||
|
||
def on_produce(self) -> None: | ||
pass | ||
|
||
def after_produce( | ||
self, | ||
error: Exception | None = None, | ||
) -> None: | ||
if error is not None: | ||
raise error | ||
|
||
@contextmanager | ||
def produce(self) -> Generator[None, None, None]: | ||
produce_error: Exception | None = None | ||
|
||
try: | ||
self.on_produce() | ||
yield | ||
except Exception as error: | ||
produce_error = error | ||
|
||
self.after_produce(produce_error) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters