From dae150c5d40158e8f91cedf4ffcaeed0d107ac61 Mon Sep 17 00:00:00 2001 From: Rob Nagler <5495179+robnagler@users.noreply.github.com> Date: Fri, 22 Aug 2025 17:00:54 +0000 Subject: [PATCH] Fix #148 read/write inside atomic update --- slicops/pkcli/yaml_db.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/slicops/pkcli/yaml_db.py b/slicops/pkcli/yaml_db.py index 82e4364..cd5b0d0 100644 --- a/slicops/pkcli/yaml_db.py +++ b/slicops/pkcli/yaml_db.py @@ -47,17 +47,20 @@ def _pairs(): return key_value_pairs[0].items() return key_value_pairs[0] + def _update(old, tmp): + nonlocal rv + + rv = _read(old).pkupdate(_validate()) + pykern.pkyaml.dump_pretty(rv, filename=tmp) + def _validate(): ctx = slicops.ctx.Ctx(base, base) for k, v in _pairs(): yield k, ctx.fields[k].value_set(v) p = path(base) - rv = _read(p).pkupdate(_validate()) - pykern.pkio.atomic_write( - p, - writer=lambda x: pykern.pkyaml.dump_pretty(rv, filename=x), - ) + rv = None + pykern.pkio.atomic_write(p, writer=lambda x: _update(p, x)) return rv