Skip to content

Commit 3006eb1

Browse files
author
Sergio García Prado
committed
ISSUE #176
* Refactor `run` method.
1 parent 527d053 commit 3006eb1

File tree

2 files changed

+30
-30
lines changed

2 files changed

+30
-30
lines changed

packages/core/minos-microservice-saga/minos/saga/executions/runners.py

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -114,47 +114,39 @@ async def run(
114114
but with ``Errored`` status.
115115
:param return_execution: If ``True`` the ``SagaExecution`` instance is returned. Otherwise, only the
116116
identifier (``UUID``) is returned.
117+
# :param timeout: TODO
117118
:param kwargs: Additional named arguments.
118119
:return: This method does not return anything.
119120
"""
120121
if isinstance(definition, SagaDecoratorWrapper):
121122
definition = definition.meta.definition
122123

123-
if response is not None:
124-
return await self._load_and_run(
125-
response=response,
126-
autocommit=autocommit,
127-
pause_on_disk=pause_on_disk,
128-
raise_on_error=raise_on_error,
129-
return_execution=return_execution,
130-
**kwargs,
131-
)
132-
133-
return await self._run_new(
134-
definition=definition,
135-
context=context,
136-
user=user,
124+
if response is None:
125+
execution = await self._create(definition, context, user)
126+
else:
127+
execution = await self._load(response)
128+
129+
return await self._run(
130+
execution,
131+
response=response,
137132
autocommit=autocommit,
138133
pause_on_disk=pause_on_disk,
139134
raise_on_error=raise_on_error,
140135
return_execution=return_execution,
141136
**kwargs,
142137
)
143138

144-
async def _run_new(
145-
self, definition: Saga, context: Optional[SagaContext] = None, user: Optional[UUID] = None, **kwargs
146-
) -> Union[UUID, SagaExecution]:
139+
@staticmethod
140+
async def _create(definition: Saga, context: Optional[SagaContext], user: Optional[UUID]) -> SagaExecution:
147141
if REQUEST_USER_CONTEXT_VAR.get() is not None:
148142
if user is not None:
149143
warnings.warn("The `user` Argument will be ignored in favor of the `user` ContextVar", RuntimeWarning)
150144
user = REQUEST_USER_CONTEXT_VAR.get()
151145

152-
execution = SagaExecution.from_definition(definition, context=context, user=user)
153-
return await self._run(execution, **kwargs)
146+
return SagaExecution.from_definition(definition, context=context, user=user)
154147

155-
async def _load_and_run(self, response: SagaResponse, **kwargs) -> Union[UUID, SagaExecution]:
156-
execution = await self.storage.load(response.uuid)
157-
return await self._run(execution, response=response, **kwargs)
148+
async def _load(self, response: SagaResponse) -> Union[UUID, SagaExecution]:
149+
return await self.storage.load(response.uuid)
158150

159151
async def _run(
160152
self,
@@ -197,9 +189,11 @@ def _update_request_headers(execution: SagaExecution) -> None:
197189
headers["related_services"] = ",".join(related_services)
198190

199191
@staticmethod
200-
async def _run_with_pause_on_disk(execution: SagaExecution, autocommit: bool = True, **kwargs) -> None:
192+
async def _run_with_pause_on_disk(
193+
execution: SagaExecution, response: Optional[SagaResponse] = None, autocommit: bool = True, **kwargs
194+
) -> None:
201195
try:
202-
await execution.execute(autocommit=False, **kwargs)
196+
await execution.execute(autocommit=False, response=response, **kwargs)
203197
if autocommit:
204198
await execution.commit(**kwargs)
205199
except SagaPausedExecutionStepException:

packages/core/minos-microservice-saga/tests/test_saga/test_executions/test_runners.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,24 +91,30 @@ async def test_context_runner(self):
9191

9292
async def test_run(self):
9393
expected = SagaExecution.from_definition(ADD_ORDER)
94-
mock = AsyncMock(return_value=expected)
95-
self.runner._run_new = mock
94+
create_mock = AsyncMock()
95+
run_mock = AsyncMock(return_value=expected)
96+
self.runner._create = create_mock
97+
self.runner._run = run_mock
9698

9799
observed = await self.runner.run(ADD_ORDER)
98100
self.assertEqual(expected, observed)
99101

100102
async def test_run_from_wrapper(self):
101103
expected = SagaExecution.from_definition(DeleteOrderSaga)
102-
mock = AsyncMock(return_value=expected)
103-
self.runner._run_new = mock
104+
create_mock = AsyncMock()
105+
run_mock = AsyncMock(return_value=expected)
106+
self.runner._create = create_mock
107+
self.runner._run = run_mock
104108

105109
observed = await self.runner.run(DeleteOrderSaga)
106110
self.assertEqual(expected, observed)
107111

108112
async def test_load_and_run(self):
109113
expected = SagaExecution.from_definition(ADD_ORDER)
110-
mock = AsyncMock(return_value=expected)
111-
self.runner._load_and_run = mock
114+
load_mock = AsyncMock()
115+
run_mock = AsyncMock(return_value=expected)
116+
self.runner._load = load_mock
117+
self.runner._run = run_mock
112118

113119
observed = await self.runner.run(response=SagaResponse(uuid=expected.uuid))
114120
self.assertEqual(expected, observed)

0 commit comments

Comments
 (0)