diff --git a/scone/head/dependency_tracking.py b/scone/head/dependency_tracking.py index 3965da8..2e08563 100644 --- a/scone/head/dependency_tracking.py +++ b/scone/head/dependency_tracking.py @@ -217,7 +217,7 @@ class DependencyVarProxy: else: return repr(self) - def raw_(self) -> Dict[str, Any]: + def raw_(self) -> Union[Dict[str, Any], List[Any], int, str, bool]: if not self._current_path_prefix: raw_dict = self._vars.toplevel() else: @@ -238,6 +238,12 @@ class DependencyVarProxy: self._tracker.register_variable(dotted_path, raw_value) return raw_value + def __iter__(self): + return iter(self.raw_()) + + def __contains__(self, item): + return item in self.raw_() + class DependencyCache: def __init__(self): diff --git a/scone/head/kitchen.py b/scone/head/kitchen.py index 584f1a8..c8bc5d3 100644 --- a/scone/head/kitchen.py +++ b/scone/head/kitchen.py @@ -247,7 +247,11 @@ class Kitchen: sous_vars = recipe.recipe_context.variables vars_to_hash = {} for var in prev_book.var_list: - vars_to_hash[var] = sous_vars.get_dotted(var) + try: + vars_to_hash[var] = sous_vars.get_dotted(var) + except KeyError: + # variable missing + return prev_book, False my_varhash = hash_dict(vars_to_hash) if prev_book.varhash != my_varhash: return prev_book, False