pymake

A build system based on Build Systems à la Carte
git clone https://git.grace.moe/pymake
Log | Files | Refs | README

commit fb9a6fe690ec46a2a4c8f872c6a6b2840c2296d4
parent bcab7973f2109cacb013447226ecba899d920ae4
Author: gracefu <81774659+gracefuu@users.noreply.github.com>
Date:   Sun, 20 Apr 2025 07:18:03 +0800

Don't crash if eval throws an exception on a future run, store/load functions for interfacing with db

Diffstat:
Mtar-sketch/a.txt | 2+-
Mtar-sketch/tar2.py | 16+++++++++++-----
2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/tar-sketch/a.txt b/tar-sketch/a.txt @@ -1 +1 @@ -Sun Apr 20 07:08:59 AM +08 2025 +Sun Apr 20 07:16:53 AM +08 2025 diff --git a/tar-sketch/tar2.py b/tar-sketch/tar2.py @@ -61,7 +61,8 @@ def rerun_if(f_str): def cache_conditionally( keys_fn=lambda *args, **kwargs: (args, tuple(sorted(kwargs.items()))), - if_cached_fn=lambda cached_result, /, *_, **__: cached_result, + store_fn=lambda cached_result, /, *_, **__: cached_result, + load_fn=lambda cached_result, /, *_, **__: cached_result, ): def decorator(fn): signature = inspect.signature(fn) @@ -77,11 +78,14 @@ def cache_conditionally( db, ("track", "rerun_changes", fn.__qualname__, keys), [] ) for expr, old_val in old_rerun_changes: - res = eval(expr, locals=rerun_locals) - if res != old_val: + try: + res = eval(expr, locals=rerun_locals) + if res != old_val: + break + except: break else: - return if_cached_fn( + return load_fn( db[("track", "result", fn.__qualname__, keys)], *args, **kwargs ) @@ -91,7 +95,9 @@ def cache_conditionally( with_rerun_context, rerun_changes, rerun_locals, fn, *args, **kwargs ) db[("track", "rerun_changes", fn.__qualname__, keys)] = rerun_changes - db[("track", "result", fn.__qualname__, keys)] = result + db[("track", "result", fn.__qualname__, keys)] = store_fn( + result, *args, **kwargs + ) return result return wrapped