| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- """Diagnostics support for HACS."""
- from __future__ import annotations
- from typing import Any
- from aiogithubapi import GitHubException
- from homeassistant.components.diagnostics import async_redact_data
- from homeassistant.config_entries import ConfigEntry
- from homeassistant.core import HomeAssistant
- from .base import HacsBase
- from .const import DOMAIN
- from .utils.configuration_schema import TOKEN
- async def async_get_config_entry_diagnostics(
- hass: HomeAssistant,
- entry: ConfigEntry,
- ) -> dict[str, Any]:
- """Return diagnostics for a config entry."""
- hacs: HacsBase = hass.data[DOMAIN]
- data = {
- "entry": entry.as_dict(),
- "hacs": {
- "stage": hacs.stage,
- "version": hacs.version,
- "disabled_reason": hacs.system.disabled_reason,
- "new": hacs.status.new,
- "startup": hacs.status.startup,
- "categories": hacs.common.categories,
- "renamed_repositories": hacs.common.renamed_repositories,
- "archived_repositories": hacs.common.archived_repositories,
- "ignored_repositories": hacs.common.ignored_repositories,
- "lovelace_mode": hacs.core.lovelace_mode,
- "configuration": {},
- },
- "custom_repositories": [
- repo.data.full_name
- for repo in hacs.repositories.list_all
- if not hacs.repositories.is_default(str(repo.data.id))
- ],
- "repositories": [],
- }
- for key in (
- "appdaemon",
- "country",
- "debug",
- "dev",
- "experimental",
- "netdaemon",
- "python_script",
- "release_limit",
- "theme",
- ):
- data["hacs"]["configuration"][key] = getattr(hacs.configuration, key, None)
- for repository in hacs.repositories.list_downloaded:
- data["repositories"].append(
- {
- "data": repository.data.to_json(),
- "integration_manifest": repository.integration_manifest,
- "repository_manifest": repository.repository_manifest.to_dict(),
- "ref": repository.ref,
- "paths": {
- "localpath": repository.localpath.replace(hacs.core.config_path, "/config"),
- "local": repository.content.path.local.replace(
- hacs.core.config_path, "/config"
- ),
- "remote": repository.content.path.remote,
- },
- }
- )
- try:
- rate_limit_response = await hacs.githubapi.rate_limit()
- data["rate_limit"] = rate_limit_response.data.as_dict
- except GitHubException as exception:
- data["rate_limit"] = str(exception)
- return async_redact_data(data, (TOKEN,))
|