From 332d272e379152c5f06b592fec8177542b060e9c Mon Sep 17 00:00:00 2001 From: "Pavel V. Pristupa" Date: Tue, 1 Jun 2021 11:34:45 +0700 Subject: [PATCH 1/2] Fix early instantiating of global_domain_event_dispatcher --- CHANGELOG.md | 5 +++++ winter/__version__.py | 2 +- winter_ddd/__init__.py | 2 +- winter_ddd/domain_event_dispatcher.py | 6 ++++-- winter_ddd/domain_event_handler.py | 5 +---- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65cf7ae6..418e13da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [9.1.0] - 2021-06-01 + +### Bugfixes +- global_domain_event_dispatcher now lazily loads injector which could be empty if importing too early + ## [9.0.0] - 2021-03-31 ### New features diff --git a/winter/__version__.py b/winter/__version__.py index 33de8d16..8347f6c6 100644 --- a/winter/__version__.py +++ b/winter/__version__.py @@ -1 +1 @@ -__version__ = '9.0.0' +__version__ = '9.1.0' diff --git a/winter_ddd/__init__.py b/winter_ddd/__init__.py index bb828ebf..fb68719b 100644 --- a/winter_ddd/__init__.py +++ b/winter_ddd/__init__.py @@ -1,5 +1,5 @@ from .aggregate_root import AggregateRoot from .domain_event import DomainEvent +from .domain_event_dispatcher import global_domain_event_dispatcher from .domain_event_handler import domain_event_handler -from .domain_event_handler import global_domain_event_dispatcher from .domain_events import DomainEvents diff --git a/winter_ddd/domain_event_dispatcher.py b/winter_ddd/domain_event_dispatcher.py index b979995d..e127806a 100644 --- a/winter_ddd/domain_event_dispatcher.py +++ b/winter_ddd/domain_event_dispatcher.py @@ -20,7 +20,6 @@ class DomainEventDispatcher: def __init__(self): self._subscriptions: Dict[EventFilter, List[DomainEventSubscription]] = {} self._event_type_to_event_filters_map: Dict[Type[DomainEvent], List[EventFilter]] = {} - self._injector = get_injector() def add_subscription(self, subscription: DomainEventSubscription): self._subscriptions.setdefault(subscription.event_filter, []).append(subscription) @@ -40,9 +39,12 @@ def dispatch(self, events: Iterable[DomainEvent]): for event_filter, events in filtered_events.items(): for subscription in self._subscriptions.get(event_filter, []): - handler_instance = self._injector.get(subscription.handler_class) + handler_instance = get_injector().get(subscription.handler_class) if subscription.collection: subscription.handler_method(handler_instance, events) else: for event in events: subscription.handler_method(handler_instance, event) + + +global_domain_event_dispatcher = DomainEventDispatcher() diff --git a/winter_ddd/domain_event_handler.py b/winter_ddd/domain_event_handler.py index 9592fd35..41d1701d 100644 --- a/winter_ddd/domain_event_handler.py +++ b/winter_ddd/domain_event_handler.py @@ -2,15 +2,12 @@ import re from winter.core.utils.typing import is_union -from .domain_event_dispatcher import DomainEventDispatcher +from .domain_event_dispatcher import global_domain_event_dispatcher from .domain_event_subscription import DomainEventSubscription domain_events_class_name_pattern = re.compile(r'typing.List\[.+\]') -global_domain_event_dispatcher = DomainEventDispatcher() - - # noinspection PyPep8Naming class domain_event_handler: """Decorator for method in class""" From c3f1a997efc228ba2c0627d55ba120fb850bd739 Mon Sep 17 00:00:00 2001 From: "Pavel V. Pristupa" Date: Tue, 1 Jun 2021 12:48:13 +0700 Subject: [PATCH 2/2] Limit Django version to 2.* --- requirements/base.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/base.txt b/requirements/base.txt index 2afa5067..3fe8e492 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,6 +1,6 @@ dataclasses>=0.6 djangorestframework>=3.9.0 -Django>=1.11.16 +Django<3.0.0>=1.11.16 docstring_parser>=0.1 drf-yasg>=1.13.0 furl==2.0.0