Updated apps
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
"""Amazon Order Status integration."""
|
||||
|
||||
import logging
|
||||
from datetime import timedelta
|
||||
import voluptuous as vol
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant, ServiceCall
|
||||
from homeassistant.helpers import config_validation as cv
|
||||
|
||||
from .const import DOMAIN, SERVICE_PURGE_ORDER, ATTR_ORDER_ID
|
||||
from .coordinator import AmazonOrdersCoordinator
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
PLATFORMS = ["sensor"]
|
||||
DEFAULT_UPDATE_INTERVAL = 5 # minutes
|
||||
|
||||
PURGE_ORDER_SCHEMA = vol.Schema(
|
||||
{vol.Optional(ATTR_ORDER_ID, default=""): cv.string}
|
||||
)
|
||||
|
||||
|
||||
async def _handle_purge_order(hass: HomeAssistant, call: ServiceCall) -> None:
|
||||
"""Remove a specific order from tracking."""
|
||||
order_id = (call.data.get(ATTR_ORDER_ID) or "").strip()
|
||||
if not order_id:
|
||||
_LOGGER.warning(
|
||||
"purge_order called with empty order_id. "
|
||||
"If using a dashboard button, call script.purge_amazon_order instead so the order ID is read when you tap."
|
||||
)
|
||||
return
|
||||
domain_data = hass.data.get(DOMAIN) or {}
|
||||
removed = False
|
||||
for key, value in domain_data.items():
|
||||
if isinstance(value, AmazonOrdersCoordinator):
|
||||
if await value.async_purge_order(order_id):
|
||||
removed = True
|
||||
if not removed:
|
||||
_LOGGER.warning("Order %s not found or already purged", order_id)
|
||||
|
||||
|
||||
def _make_purge_order_handler(hass: HomeAssistant):
|
||||
"""Return an async service handler that closes over hass."""
|
||||
|
||||
async def handler(call: ServiceCall) -> None:
|
||||
await _handle_purge_order(hass, call)
|
||||
|
||||
return handler
|
||||
|
||||
|
||||
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
"""Set up Amazon Order Status from a config entry."""
|
||||
# Create the coordinator
|
||||
coordinator = AmazonOrdersCoordinator(hass, entry)
|
||||
await coordinator.async_config_entry_first_refresh()
|
||||
|
||||
# Ensure DOMAIN dict exists
|
||||
hass.data.setdefault(DOMAIN, {})
|
||||
|
||||
# Store coordinator under a fixed key for options_flow
|
||||
hass.data[DOMAIN]["coordinator"] = coordinator
|
||||
|
||||
# Also store by entry_id for platform setup
|
||||
hass.data[DOMAIN][entry.entry_id] = coordinator
|
||||
|
||||
# Register purge_order service (idempotent if multiple entries)
|
||||
if not hass.services.has_service(DOMAIN, SERVICE_PURGE_ORDER):
|
||||
hass.services.async_register(
|
||||
DOMAIN,
|
||||
SERVICE_PURGE_ORDER,
|
||||
_make_purge_order_handler(hass),
|
||||
schema=PURGE_ORDER_SCHEMA,
|
||||
)
|
||||
|
||||
# Forward entry setups (sensors)
|
||||
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
"""Unload a config entry."""
|
||||
# Unload platforms
|
||||
await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
|
||||
|
||||
# Remove coordinator references
|
||||
if DOMAIN in hass.data:
|
||||
if "coordinator" in hass.data[DOMAIN]:
|
||||
hass.data[DOMAIN].pop("coordinator")
|
||||
if entry.entry_id in hass.data[DOMAIN]:
|
||||
hass.data[DOMAIN].pop(entry.entry_id)
|
||||
|
||||
return True
|
||||
Reference in New Issue
Block a user