mirror of
https://github.com/Matysh/houseplan-card
synced 2026-07-31 16:38:31 +00:00
A wall can only exist as an edge of a closed room: - roomEdges(rooms) derives walls from room outlines, deduping shared ones, so deleting a room keeps the borders its neighbours still contribute and drops the rest — the rule falls out of the model instead of needing bookkeeping. - Nothing is persisted while drawing: an outline you never close leaves no lines behind (previously every click pair was written to space.segments immediately). - The 'Erase line' tool is gone; space.segments is stripped on every save (validation still tolerates it on read so a stale tab cannot fail a save). - Dead code out: _addSegment/_removeSegmentByKey/_distToSeg/_pathSegs/_segKey. Docs (ARCHITECTURE/TESTING/CHANGELOG) updated in the same commit. +2 tests (63).
41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
"""Diagnostics for House Plan (Settings → ... → Download diagnostics)."""
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from homeassistant.components.diagnostics import async_redact_data
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from .store import HouseplanConfigEntry
|
|
|
|
# Marker metadata may contain personal notes, external links and manual filenames.
|
|
TO_REDACT = {"link", "description", "pdfs", "name"}
|
|
|
|
|
|
async def async_get_config_entry_diagnostics(
|
|
hass: HomeAssistant, entry: HouseplanConfigEntry
|
|
) -> dict[str, Any]:
|
|
"""Return a redacted dump of the stores."""
|
|
data = entry.runtime_data
|
|
cfg_raw = await data.config_store.async_load() or {}
|
|
layout_raw = await data.store.async_load() or {}
|
|
config = cfg_raw.get("config", {})
|
|
layout = layout_raw.get("layout", {})
|
|
return {
|
|
"options": dict(entry.options),
|
|
"rev": cfg_raw.get("rev", 0),
|
|
"spaces": [
|
|
{
|
|
"id": s.get("id"),
|
|
"aspect": s.get("aspect"),
|
|
"has_plan": bool(s.get("plan_url")),
|
|
"rooms": len(s.get("rooms", [])),
|
|
"rooms_with_area": sum(1 for r in s.get("rooms", []) if r.get("area")),
|
|
}
|
|
for s in config.get("spaces", [])
|
|
],
|
|
"markers": async_redact_data(config.get("markers", []), TO_REDACT),
|
|
"settings": config.get("settings", {}),
|
|
"layout_entries": len(layout),
|
|
}
|