Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions src/python/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@ A Python implementation of the PolyBus messaging library, providing a unified in
# Navigate to the python directory
cd src/python

# Create a virtual environment (recommended)
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# The project uses a virtual environment at the repo root
# It should already be configured by VS Code
# If needed, activate it:
source ../../.venv/bin/activate # On Windows: ..\..\\.venv\Scripts\activate

# Install the package in development mode with dev dependencies
./dev.sh install
# Or manually:
pip install -e ".[dev]"
# Or use the dev script with PYTHON env var:
# PYTHON=../../.venv/bin/python ./dev.sh install
```

### Building the Project
Expand All @@ -39,13 +40,16 @@ pip install -e ".[dev]"
### Running Tests

```bash
# Activate virtual environment first
source ../../.venv/bin/activate # On Windows: .venv\Scripts\activate

# Run all tests
./dev.sh test
# Or: python -m pytest
python -m pytest
# Or: ./dev.sh test (if PYTHON env var is set)

# Run tests with coverage
./dev.sh test-cov
# Or: python -m pytest --cov=poly_bus --cov-report=html
python -m pytest --cov=src --cov-report=html --cov-report=term
# Or: ./dev.sh test-cov

# Run specific test files
python -m pytest tests/test_poly_bus.py
Expand Down
16 changes: 8 additions & 8 deletions src/python/src/i_poly_bus.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
from typing import Dict, List, Any, TYPE_CHECKING

if TYPE_CHECKING:
from src.transport.i_transport import ITransport
from src.transport.transaction.message.handlers.incoming_handler import IncomingHandler
from src.transport.transaction.message.handlers.outgoing_handler import OutgoingHandler
from src.transport.transaction.message.incoming_message import IncomingMessage
from src.transport.transaction.message.messages import Messages
from src.transport.transaction.transaction import Transaction
from src.transport.transaction.incoming_transaction import IncomingTransaction
from src.transport.transaction.outgoing_transaction import OutgoingTransaction
from transport.i_transport import ITransport
from transport.transaction.message.handlers.incoming_handler import IncomingHandler
from transport.transaction.message.handlers.outgoing_handler import OutgoingHandler
from transport.transaction.message.incoming_message import IncomingMessage
from transport.transaction.message.messages import Messages
from transport.transaction.transaction import Transaction
from transport.transaction.incoming_transaction import IncomingTransaction
from transport.transaction.outgoing_transaction import OutgoingTransaction


class IPolyBus(ABC):
Expand Down
18 changes: 9 additions & 9 deletions src/python/src/poly_bus.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
"""PolyBus implementation for the Python version."""

from typing import Dict, Any, List
from src.i_poly_bus import IPolyBus
from src.transport.i_transport import ITransport
from src.transport.transaction.incoming_transaction import IncomingTransaction
from src.transport.transaction.outgoing_transaction import OutgoingTransaction
from src.transport.transaction.message.incoming_message import IncomingMessage
from src.transport.transaction.message.messages import Messages
from src.transport.transaction.message.handlers.incoming_handler import IncomingHandler
from src.transport.transaction.message.handlers.outgoing_handler import OutgoingHandler
from src.transport.transaction.transaction import Transaction
from .i_poly_bus import IPolyBus
from .transport.i_transport import ITransport
from .transport.transaction.incoming_transaction import IncomingTransaction
from .transport.transaction.outgoing_transaction import OutgoingTransaction
from .transport.transaction.message.incoming_message import IncomingMessage
from .transport.transaction.message.messages import Messages
from .transport.transaction.message.handlers.incoming_handler import IncomingHandler
from .transport.transaction.message.handlers.outgoing_handler import OutgoingHandler
from .transport.transaction.transaction import Transaction


class PolyBus(IPolyBus):
Expand Down
10 changes: 5 additions & 5 deletions src/python/src/poly_bus_builder.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
"""PolyBus builder implementation for the Python version."""

from typing import Dict, Any, Optional, TYPE_CHECKING
from src.transport.transaction.incoming_transaction import IncomingTransaction
from src.transport.transaction.message.messages import Messages
from src.transport.transaction.outgoing_transaction import OutgoingTransaction
from .transport.transaction.incoming_transaction import IncomingTransaction
from .transport.transaction.message.messages import Messages
from .transport.transaction.outgoing_transaction import OutgoingTransaction

if TYPE_CHECKING:
from src.poly_bus import PolyBus
from .poly_bus import PolyBus


async def _default_incoming_transaction_factory(builder: 'PolyBusBuilder', bus, message):
Expand Down Expand Up @@ -124,7 +124,7 @@ async def build(self) -> 'PolyBus':
Returns:
A configured PolyBus instance ready for use
"""
from src.poly_bus import PolyBus
from .poly_bus import PolyBus

bus = PolyBus(self)
bus.transport = await self.transport_factory(self, bus)
Expand Down
4 changes: 2 additions & 2 deletions src/python/src/transport/i_transport.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
"""Transport interface for the PolyBus Python implementation."""

from abc import ABC, abstractmethod
from src.transport.transaction.transaction import Transaction
from src.transport.transaction.message.message_info import MessageInfo
from .transaction.transaction import Transaction
from .transaction.message.message_info import MessageInfo


class ITransport(ABC):
Expand Down
12 changes: 6 additions & 6 deletions src/python/src/transport/in_memory/in_memory_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
"""

from typing import Callable, Optional, Dict
from src.i_poly_bus import IPolyBus
from src.transport.i_transport import ITransport
from src.transport.transaction.transaction import Transaction
from src.transport.transaction.message.incoming_message import IncomingMessage
from src.transport.transaction.message.message_info import MessageInfo
from src.transport.poly_bus_not_started_error import PolyBusNotStartedError
from ...i_poly_bus import IPolyBus
from ..i_transport import ITransport
from ..transaction.transaction import Transaction
from ..transaction.message.incoming_message import IncomingMessage
from ..transaction.message.message_info import MessageInfo
from ..poly_bus_not_started_error import PolyBusNotStartedError


class InMemoryEndpoint(ITransport):
Expand Down
12 changes: 6 additions & 6 deletions src/python/src/transport/in_memory/in_memory_message_broker.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
from datetime import datetime, timezone
from typing import Dict
from uuid import uuid4
from src.i_poly_bus import IPolyBus
from src.poly_bus_builder import PolyBusBuilder
from src.transport.i_transport import ITransport
from src.transport.in_memory.in_memory_endpoint import InMemoryEndpoint
from src.transport.transaction.transaction import Transaction
from src.transport.transaction.message.incoming_message import IncomingMessage
from ...i_poly_bus import IPolyBus
from ...poly_bus_builder import PolyBusBuilder
from ..i_transport import ITransport
from .in_memory_endpoint import InMemoryEndpoint
from ..transaction.transaction import Transaction
from ..transaction.message.incoming_message import IncomingMessage


class InMemoryMessageBroker:
Expand Down
6 changes: 3 additions & 3 deletions src/python/src/transport/transaction/incoming_transaction.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
"""Incoming transaction class for PolyBus Python implementation."""

from src.transport.transaction.transaction import Transaction
from src.transport.transaction.message.incoming_message import IncomingMessage
from src.i_poly_bus import IPolyBus
from .transaction import Transaction
from .message.incoming_message import IncomingMessage
from ...i_poly_bus import IPolyBus


class IncomingTransaction(Transaction):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
"""Incoming transaction factory for creating incoming transactions in the PolyBus Python implementation."""

from typing import Callable, Awaitable
from src.transport.transaction.incoming_transaction import IncomingTransaction
from src.transport.transaction.message.incoming_message import IncomingMessage
from .incoming_transaction import IncomingTransaction
from .message.incoming_message import IncomingMessage

IncomingTransactionFactory = Callable[
['PolyBusBuilder', 'IPolyBus', 'IncomingMessage'],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import traceback
from datetime import datetime, timedelta, timezone
from typing import Callable, Awaitable
from src.transport.transaction.incoming_transaction import IncomingTransaction
from src.transport.transaction.message.outgoing_message import OutgoingMessage
from ....incoming_transaction import IncomingTransaction
from ...outgoing_message import OutgoingMessage


class ErrorHandler:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Incoming handler callable type for PolyBus Python implementation."""

from typing import Callable, Awaitable
from src.transport.transaction.incoming_transaction import IncomingTransaction
from ...incoming_transaction import IncomingTransaction

# Type alias for incoming message handlers
IncomingHandler = Callable[[IncomingTransaction, Callable[[], Awaitable[None]]], Awaitable[None]]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Outgoing handler callable type for PolyBus Python implementation."""

from typing import Callable, Awaitable
from src.transport.transaction.outgoing_transaction import OutgoingTransaction
from ...outgoing_transaction import OutgoingTransaction

# Type alias for outgoing message handlers
OutgoingHandler = Callable[[OutgoingTransaction, Callable[[], Awaitable[None]]], Awaitable[None]]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import json
from typing import Optional, Callable, Awaitable
from src.headers import Headers
from src.transport.transaction.incoming_transaction import IncomingTransaction
from src.transport.transaction.outgoing_transaction import OutgoingTransaction
from ......headers import Headers
from ....incoming_transaction import IncomingTransaction
from ....outgoing_transaction import OutgoingTransaction


class JsonHandlers:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from typing import Any, Optional, Type
from src.transport.transaction.message.message import Message
from src.transport.transaction.message.message_info import MessageInfo
from src.i_poly_bus import IPolyBus
from .message import Message
from .message_info import MessageInfo
from ....i_poly_bus import IPolyBus


class IncomingMessage(Message):
Expand Down
2 changes: 1 addition & 1 deletion src/python/src/transport/transaction/message/message.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from typing import Dict, Any
from src.i_poly_bus import IPolyBus
from ....i_poly_bus import IPolyBus


class Message:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import re
from typing import Optional
from src.transport.transaction.message.message_type import MessageType
from .message_type import MessageType


class MessageInfo:
Expand Down
6 changes: 3 additions & 3 deletions src/python/src/transport/transaction/message/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
A collection of message types and their associated message headers.
"""
from threading import Lock
from typing import Dict, Type, Tuple
from typing import Dict, Type, Tuple, Optional
import threading
from src.transport.transaction.message.message_info import MessageInfo
from src.transport.transaction.message.poly_bus_message_not_found_error import PolyBusMessageNotFoundError
from .message_info import MessageInfo
from .poly_bus_message_not_found_error import PolyBusMessageNotFoundError


class Messages:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from typing import Any, Optional, Type
from datetime import datetime
from src.transport.transaction.message.message import Message
from src.transport.transaction.message.message_info import MessageInfo
from src.i_poly_bus import IPolyBus
from .message import Message
from .message_info import MessageInfo
from ....i_poly_bus import IPolyBus


class OutgoingMessage(Message):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""
Exception raised when a requested type, attribute/decorator, or header is not found.
"""
from src.poly_bus_error import PolyBusError
from ....poly_bus_error import PolyBusError


class PolyBusMessageNotFoundError(PolyBusError):
Expand Down
4 changes: 2 additions & 2 deletions src/python/src/transport/transaction/outgoing_transaction.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Outgoing transaction class for PolyBus Python implementation."""

from src.transport.transaction.transaction import Transaction
from src.i_poly_bus import IPolyBus
from .transaction import Transaction
from ...i_poly_bus import IPolyBus


class OutgoingTransaction(Transaction):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Outgoing transaction factory for creating outgoing transactions in the PolyBus Python implementation."""

from typing import Callable, Awaitable
from src.transport.transaction.outgoing_transaction import OutgoingTransaction
from .outgoing_transaction import OutgoingTransaction

OutgoingTransactionFactory = Callable[
['PolyBusBuilder', 'IPolyBus'],
Expand Down
4 changes: 2 additions & 2 deletions src/python/src/transport/transaction/transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

from typing import Dict, List, Any, Optional
from abc import ABC
from src.transport.transaction.message.outgoing_message import OutgoingMessage
from src.i_poly_bus import IPolyBus
from .message.outgoing_message import OutgoingMessage
from ...i_poly_bus import IPolyBus


class Transaction(ABC):
Expand Down
2 changes: 1 addition & 1 deletion src/python/src/transport/transport_factory.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Transport factory for the PolyBus Python implementation."""

from typing import Callable, Awaitable
from src.transport.i_transport import ITransport
from .i_transport import ITransport

# Type alias for transport factory function
# Creates a transport instance to be used by PolyBus
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import pytest
from src.transport.transaction.message.messages import Messages
from src.transport.transaction.message.message_info import MessageInfo, message_info
from src.transport.transaction.message.message_info import MessageType
from src.transport.transaction.message.message_type import MessageType
from src.transport.transaction.message.poly_bus_message_not_found_error import PolyBusMessageNotFoundError


Expand Down
Loading