Skip to content

Commit 7e03646

Browse files
committed
Refactor AOP ValueProvider.require()
1 parent 612c693 commit 7e03646

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

ascetic_ddd/faker/domain/aop/providers/value_provider.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
from ascetic_ddd.faker.domain.generators.interfaces import IAnyInputGenerator, IInputGenerator
99
from ascetic_ddd.faker.domain.generators.generators import prepare_input_generator
1010
from ascetic_ddd.faker.domain.providers.exceptions import DiamondUpdateConflict
11+
from ascetic_ddd.faker.domain.query.evaluate_visitor import EvaluateWalker
12+
from ascetic_ddd.faker.domain.query.visitors import query_to_dict
1113
from ascetic_ddd.session.interfaces import ISession
1214

1315
__all__ = ('ValueProvider',)
@@ -61,6 +63,7 @@ def output(self) -> T:
6163

6264
def require(self, criteria: dict[str, typing.Any]) -> None:
6365
new_criteria = parse_query(criteria)
66+
old_criteria = self._criteria
6467
if self._criteria is not None:
6568
try:
6669
self._criteria = self._criteria + new_criteria
@@ -70,7 +73,16 @@ def require(self, criteria: dict[str, typing.Any]) -> None:
7073
)
7174
else:
7275
self._criteria = new_criteria
73-
self._output = Nothing()
76+
77+
if self._criteria != old_criteria:
78+
if self._output.is_some():
79+
if not self.is_transient():
80+
state = self.state()
81+
walker = EvaluateWalker()
82+
if not walker.evaluate_sync(new_criteria, state):
83+
raise DiamondUpdateConflict(state, query_to_dict(new_criteria), self.provider_name)
84+
else:
85+
self._output = Nothing()
7486

7587
def state(self) -> typing.Any:
7688
return self._output.unwrap()

0 commit comments

Comments
 (0)