Skip to content

Commit 046b436

Browse files
committed
[pac] reverse order of check event / asset event creation
1 parent 7fa7e93 commit 046b436

2 files changed

Lines changed: 56 additions & 3 deletions

File tree

python_modules/dagster/dagster/_core/execution/plan/execute_step.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,6 @@ def _process_user_event(
9797
asset_key = _resolve_asset_result_asset_key(user_event, assets_def)
9898
output_name = assets_def.get_output_name_for_asset_key(asset_key)
9999

100-
for check_result in user_event.check_results or []:
101-
yield from _process_user_event(step_context, check_result)
102-
103100
with disable_dagster_warnings():
104101
if isinstance(user_event, MaterializeResult):
105102
value = user_event.value
@@ -112,6 +109,10 @@ def _process_user_event(
112109
data_version=user_event.data_version,
113110
tags=user_event.tags,
114111
)
112+
113+
for check_result in user_event.check_results or []:
114+
yield from _process_user_event(step_context, check_result)
115+
115116
elif isinstance(user_event, AssetCheckResult):
116117
asset_check_evaluation = user_event.to_asset_check_evaluation(step_context)
117118
assets_def = _get_assets_def_for_step(step_context, user_event)

python_modules/dagster/dagster_tests/definitions_tests/test_materialize_result.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,58 @@ def ret_checks(context: AssetExecutionContext):
9494
assert direct_results
9595

9696

97+
def test_materialize_result_check_targets_current_materialization():
98+
with dg.instance_for_test() as instance:
99+
100+
@dg.asset(check_specs=[dg.AssetCheckSpec(name="my_check", asset=dg.AssetKey("my_asset"))])
101+
def my_asset(context: AssetExecutionContext):
102+
return dg.MaterializeResult(
103+
check_results=[dg.AssetCheckResult(check_name="my_check", passed=True)]
104+
)
105+
106+
# First materialization
107+
result1 = dg.materialize([my_asset], instance=instance)
108+
assert result1.success
109+
110+
# Get first check evaluation
111+
check_evals1 = result1.get_asset_check_evaluations()
112+
assert len(check_evals1) == 1
113+
check_eval1 = check_evals1[0]
114+
115+
# Get first materialization
116+
mat_record1 = instance.fetch_materializations(my_asset.key, limit=1).records[0]
117+
118+
# Verify first check references first materialization
119+
assert check_eval1.target_materialization_data is not None
120+
assert check_eval1.target_materialization_data.storage_id == mat_record1.storage_id
121+
assert check_eval1.target_materialization_data.run_id == result1.run_id
122+
123+
# Second materialization
124+
result2 = dg.materialize([my_asset], instance=instance)
125+
assert result2.success
126+
127+
# Get second check evaluation
128+
check_evals2 = result2.get_asset_check_evaluations()
129+
assert len(check_evals2) == 1
130+
check_eval2 = check_evals2[0]
131+
132+
# Get second materialization (most recent)
133+
mat_record2 = instance.fetch_materializations(my_asset.key, limit=1).records[0]
134+
135+
# Verify we have a *new* materialization (different storage_id)
136+
assert mat_record2.storage_id != mat_record1.storage_id
137+
138+
# Second check must reference *second* materialization, not first
139+
assert check_eval2.target_materialization_data is not None
140+
assert check_eval2.target_materialization_data.storage_id == mat_record2.storage_id, (
141+
"Check from run 2 should reference materialization from run 2, not run 1. "
142+
)
143+
assert check_eval2.target_materialization_data.storage_id != mat_record1.storage_id, (
144+
"Check should not reference old materialization"
145+
)
146+
assert check_eval2.target_materialization_data.run_id == result2.run_id
147+
148+
97149
def test_multi_asset():
98150
@dg.multi_asset(outs={"one": dg.AssetOut(), "two": dg.AssetOut()})
99151
def outs_multi_asset():

0 commit comments

Comments
 (0)