Update category_loader.py

This commit is contained in:
thekiwismarthome
2026-02-13 12:42:51 +13:00
committed by GitHub
parent ab59be6f1d
commit 8bc67b5331
@@ -1 +1,94 @@
"""Category loader utility."""
import json
import logging
import os
from typing import List, Dict, Any
_LOGGER = logging.getLogger(__name__)
def load_categories(component_path: str, country_code: str = None) -> List[Dict[str, Any]]:
"""Load categories from JSON file.
Args:
component_path: Path to the component directory
country_code: Country code from HA config (e.g., 'NZ', 'AU', 'US')
If None, loads default categories.json
Returns:
List of category dictionaries
"""
# Try country-specific file first if country_code provided
if country_code:
country_file = os.path.join(
component_path, "data", f"categories_{country_code.lower()}.json"
)
if os.path.exists(country_file):
categories_file = country_file
_LOGGER.debug("Using country-specific categories: %s", country_code)
else:
_LOGGER.debug(
"No country-specific categories found for %s, using default",
country_code
)
categories_file = os.path.join(component_path, "data", "categories.json")
else:
categories_file = os.path.join(component_path, "data", "categories.json")
try:
with open(categories_file, "r", encoding="utf-8") as f:
data = json.load(f)
_LOGGER.info(
"Loaded categories version %s for region %s",
data.get("version", "unknown"),
data.get("region", "default")
)
return data.get("categories", [])
except FileNotFoundError:
_LOGGER.error("Categories file not found: %s", categories_file)
return _get_fallback_categories()
except json.JSONDecodeError as err:
_LOGGER.error("Failed to parse categories file: %s", err)
return _get_fallback_categories()
except Exception as err:
_LOGGER.error("Unexpected error loading categories: %s", err)
return _get_fallback_categories()
def _get_fallback_categories() -> List[Dict[str, Any]]:
"""Get minimal fallback categories if file loading fails.
Returns:
List of basic category dictionaries
"""
_LOGGER.warning("Using fallback categories")
return [
{
"id": "produce",
"name": "Produce",
"icon": "mdi:fruit-cherries",
"color": "#4CAF50",
"sort_order": 1,
"system": True
},
{
"id": "dairy",
"name": "Dairy",
"icon": "mdi:cheese",
"color": "#FFC107",
"sort_order": 2,
"system": True
},
{
"id": "other",
"name": "Other",
"icon": "mdi:dots-horizontal",
"color": "#9E9E9E",
"sort_order": 99,
"system": True
}
]