Write ``.specify/integration.json`` with legacy-compatible state.
(
project_root: Path,
*,
version: str,
integration_key: str | None,
installed_integrations: list[str] | None = None,
settings: dict[str, dict[str, Any]] | None = None,
)
| 216 | |
| 217 | |
| 218 | def write_integration_json( |
| 219 | project_root: Path, |
| 220 | *, |
| 221 | version: str, |
| 222 | integration_key: str | None, |
| 223 | installed_integrations: list[str] | None = None, |
| 224 | settings: dict[str, dict[str, Any]] | None = None, |
| 225 | ) -> None: |
| 226 | """Write ``.specify/integration.json`` with legacy-compatible state.""" |
| 227 | dest = project_root / INTEGRATION_JSON |
| 228 | dest.parent.mkdir(parents=True, exist_ok=True) |
| 229 | |
| 230 | integration_key = clean_integration_key(integration_key) |
| 231 | installed = dedupe_integration_keys(installed_integrations or []) |
| 232 | if integration_key and integration_key not in installed: |
| 233 | installed.insert(0, integration_key) |
| 234 | if not integration_key and installed: |
| 235 | integration_key = installed[0] |
| 236 | |
| 237 | normalized_settings = normalize_integration_settings(settings or {}) |
| 238 | normalized_settings = { |
| 239 | key: normalized_settings[key] for key in installed if key in normalized_settings |
| 240 | } |
| 241 | |
| 242 | data: dict[str, Any] = { |
| 243 | "version": version, |
| 244 | "integration_state_schema": INTEGRATION_STATE_SCHEMA, |
| 245 | "installed_integrations": installed, |
| 246 | "integration_settings": normalized_settings, |
| 247 | } |
| 248 | if integration_key: |
| 249 | data["integration"] = integration_key |
| 250 | data["default_integration"] = integration_key |
| 251 | |
| 252 | dest.write_text(json.dumps(data, indent=2) + "\n", encoding="utf-8") |