+ def add_wealth_diff(self, booking_id: int, wealth_diff: Wealth) -> None:
+ """Add knowledge that Booking of booking_add added wealth_diff."""
+ if booking_id in self._wealth_diffs:
+ self._wealth_diffs[booking_id] += wealth_diff
+ else:
+ self._wealth_diffs[booking_id] = wealth_diff
+
+ @staticmethod
+ def path_to_steps(full_path: str) -> Generator[tuple[str, str]]:
+ """Split full_path into steps, for each return its path, basename."""
+ rebuilt_path = ''
+ for step_name in full_path.split(':'):
+ rebuilt_path += (':' if rebuilt_path else '') + step_name
+ yield rebuilt_path, step_name
+
+ @classmethod
+ def ensure_in_dict(cls, full_path: str, paths_to_accs: dict[str, Self]
+ ) -> None:
+ """If full_path not key in paths_to_accs, add it with new Account."""
+ parent_path = ''
+ for path, step_name in cls.path_to_steps(full_path):
+ if path not in paths_to_accs:
+ paths_to_accs[path] = cls(
+ paths_to_accs[parent_path] if parent_path else None,
+ step_name)
+ parent_path = path
+