import logging import traceback from typing import Any from server.utils.glom import PathAccessError, PathAssignError, assign SELF_KEY = "." logger = logging.getLogger("app") def setter(item: dict, key: str, value: Any): """Set value by key, support '.' self key for update Example1: item = {"a": 1} setter(item, "b.c", 2) item == {"a": 1, "b": {"c": 2}} Example2: item = {"a": 1} setter(item, ".", {"b": 2, "c": 3}) item == {"a": 1, "b": 2, "c": 3} """ if key is SELF_KEY: item.update(value) return try: assign(item, key, value, missing=dict) except (PathAccessError, PathAssignError) as ex: # need this because of Delphi absent data logger.warning( f"setter got an exception {ex} with item={item}, key={key}, value={value}\n" f"Traceback: {traceback.format_exc()}" )