@@ -117,7 +117,7 @@ def _wrap_with_middlewares(
117117 p = partial (middleware , self , p , command , query , event )
118118 return p
119119
120- def execute_query (self , query ):
120+ def execute_query (self , query ) -> QueryResult :
121121 assert (
122122 self .task is None
123123 ), "Cannot execute query while another task is being executed"
@@ -127,12 +127,15 @@ def execute_query(self, query):
127127 handler_kwargs = self .dependency_provider .get_handler_kwargs (
128128 handler_func , ** self .overrides
129129 )
130- handler_func = partial (handler_func , query , ** handler_kwargs )
131- wrapped_handler = self ._wrap_with_middlewares (handler_func , query = query )
130+ p = partial (handler_func , query , ** handler_kwargs )
131+ wrapped_handler = self ._wrap_with_middlewares (p , query = query )
132132 result = wrapped_handler ()
133+ assert isinstance (
134+ result , QueryResult
135+ ), f"Got { result } instead of QueryResult from { handler_func } "
133136 return result
134137
135- def execute_command (self , command ):
138+ def execute_command (self , command ) -> CommandResult :
136139 assert (
137140 self .task is None
138141 ), "Cannot execute command while another task is being executed"
@@ -142,53 +145,55 @@ def execute_command(self, command):
142145 handler_kwargs = self .dependency_provider .get_handler_kwargs (
143146 handler_func , ** self .overrides
144147 )
145- handler_func = partial (handler_func , command , ** handler_kwargs )
146- wrapped_handler = self ._wrap_with_middlewares (handler_func , command = command )
148+ p = partial (handler_func , command , ** handler_kwargs )
149+ wrapped_handler = self ._wrap_with_middlewares (p , command = command )
147150
148151 # execute wrapped command handler
149152 command_result = wrapped_handler ()
153+ assert isinstance (
154+ command_result , CommandResult
155+ ), f"Got { command_result } instead of CommandResult from { handler_func } "
150156
151157 self .next_commands = []
152158 self .integration_events = []
153159 event_queue = command_result .events .copy ()
154160 while len (event_queue ) > 0 :
155161 event = event_queue .pop (0 )
156162 if isinstance (event , IntegrationEvent ):
157- self ._process_integration_event (event )
163+ self .collect_integration_event (event )
158164
159165 elif isinstance (event , DomainEvent ):
160- new_command , new_events = self ._process_domain_event (event )
161- self .next_commands .extend (new_command )
162- event_queue .extend (new_events )
166+ event_results = self .handle_domain_event (event )
167+ self .next_commands .extend (event_results . commands )
168+ event_queue .extend (event_results . events )
163169
164170 return CommandResult .success (payload = command_result .payload )
165171
172+ def handle_domain_event (self , event ) -> EventResultSet :
173+ event_results = []
174+ for handler_func in self .app .get_event_handlers (event ):
175+ handler_kwargs = self .dependency_provider .get_handler_kwargs (
176+ handler_func , ** self .overrides
177+ )
178+ p = partial (handler_func , event , ** handler_kwargs )
179+ wrapped_handler = self ._wrap_with_middlewares (p , event = event )
180+ result = wrapped_handler ()
181+ assert isinstance (
182+ result , EventResult
183+ ), f"Got { result } instead of EventResult from { handler_func } "
184+ event_results .append (result )
185+ return EventResultSet (event_results )
186+
187+ def collect_integration_event (self , event ):
188+ self .integration_events .append (event )
189+
166190 def get_service (self , service_cls ):
167191 return self .dependency_provider .get_dependency (service_cls )
168192
169193 @property
170194 def current_user (self ):
171195 return self .dependency_provider .get_dependency ("current_user" )
172196
173- def _process_integration_event (self , event ):
174- self .integration_events .append (event )
175-
176- def _process_domain_event (self , event ):
177- new_commands = []
178- new_events = []
179- for handler_func in self .app .get_event_handlers (event ):
180- handler_kwargs = self .dependency_provider .get_handler_kwargs (
181- handler_func , ** self .overrides
182- )
183- event_handler = partial (handler_func , event , ** handler_kwargs )
184- wrapped_handler = self ._wrap_with_middlewares (event_handler , event = event )
185- result = wrapped_handler ()
186- if isinstance (result , Command ):
187- new_commands .append (result )
188- elif isinstance (result , EventResult ):
189- new_events .extend (result .events )
190- return new_commands , new_events
191-
192197
193198class ApplicationModule :
194199 def __init__ (self , name , version = 1.0 ):
0 commit comments