from __future__ import annotations from typing import Any from yuxi.utils.logging_config import logger _LEGACY_KEY_MAP: dict[str, str] = { "allow_private_network": "network.dangerously_allow_private_network", "allowPrivateNetwork": "network.dangerouslyAllowPrivateNetwork", } def create_legacy_private_network_doctor_contract( config: dict[str, Any], ) -> list[dict[str, str]]: migrations: list[dict[str, str]] = [] for legacy_key, new_key in _LEGACY_KEY_MAP.items(): if legacy_key in config: migrations.append( { "from": legacy_key, "to": new_key, "value": config[legacy_key], } ) return migrations def apply_doctor_migrations( config: dict[str, Any], migrations: list[dict[str, str]], ) -> dict[str, Any]: config = dict(config) for mig in migrations: legacy_key = mig["from"] new_key = mig["to"] value = mig["value"] config.setdefault("network", {}) config["network"]["dangerously_allow_private_network"] = value config["network"]["dangerouslyAllowPrivateNetwork"] = value config.pop(legacy_key, None) logger.info(f"[Urbit] Doctor: migrated {legacy_key} → {new_key} = {value}") return config def is_legacy_private_network_config(config: dict[str, Any]) -> bool: return "allow_private_network" in config or "allowPrivateNetwork" in config