from typing import Any, TypeVar T = TypeVar("T") # https://stackoverflow.com/a/43184871 def find_item(obj: dict, key: str, default=None): stack = [iter(obj.items())] while stack: for k, v in stack[-1]: if k == key: return v elif isinstance(v, dict): stack.append(iter(v.items())) break elif isinstance(v, list): stack.append(iter(enumerate(v))) break else: stack.pop() return default def get_or(obj: dict, key: str, default_value: T = None) -> Any | T: for part in key.split("."): if part not in obj: return default_value obj = obj[part] return obj def int_or_none(obj: dict, key: str): try: val = get_or(obj, key) return int(val) if val is not None else None except Exception: return None