diff --git a/homeassistant/components/aftership/manifest.json b/homeassistant/components/aftership/manifest.json index 5308d08be50..311674359c7 100644 --- a/homeassistant/components/aftership/manifest.json +++ b/homeassistant/components/aftership/manifest.json @@ -2,7 +2,9 @@ "domain": "aftership", "name": "AfterShip", "documentation": "https://www.home-assistant.io/integrations/aftership", - "requirements": ["pyaftership==0.1.2"], + "requirements": [ + "pyaftership==21.11.0" + ], "codeowners": [], "iot_class": "cloud_polling" -} +} \ No newline at end of file diff --git a/homeassistant/components/aftership/sensor.py b/homeassistant/components/aftership/sensor.py index 5d6c2cc74b9..82b844bbd01 100644 --- a/homeassistant/components/aftership/sensor.py +++ b/homeassistant/components/aftership/sensor.py @@ -1,11 +1,10 @@ """Support for non-delivered packages recorded in AfterShip.""" from __future__ import annotations -from http import HTTPStatus import logging from typing import Any, Final -from pyaftership.tracker import Tracking +from pyaftership import AfterShip, AfterShipException import voluptuous as vol from homeassistant.components.sensor import ( @@ -60,27 +59,23 @@ async def async_setup_platform( name = config[CONF_NAME] session = async_get_clientsession(hass) - aftership = Tracking(hass.loop, session, apikey) + aftership = AfterShip(api_key=apikey, session=session) - await aftership.get_trackings() - - if not aftership.meta or aftership.meta["code"] != HTTPStatus.OK: - _LOGGER.error( - "No tracking data found. Check API key is correct: %s", aftership.meta - ) + try: + await aftership.trackings.list() + except AfterShipException as err: + _LOGGER.error("No tracking data found. Check API key is correct: %s", err) return - instance = AfterShipSensor(aftership, name) - - async_add_entities([instance], True) + async_add_entities([AfterShipSensor(aftership, name)], True) async def handle_add_tracking(call: ServiceCall) -> None: """Call when a user adds a new Aftership tracking from Home Assistant.""" - title = call.data.get(CONF_TITLE) - slug = call.data.get(CONF_SLUG) - tracking_number = call.data[CONF_TRACKING_NUMBER] - - await aftership.add_package_tracking(tracking_number, title, slug) + await aftership.trackings.add( + tracking_number=call.data[CONF_TRACKING_NUMBER], + title=call.data.get(CONF_TITLE), + slug=call.data.get(CONF_SLUG), + ) async_dispatcher_send(hass, UPDATE_TOPIC) hass.services.async_register( @@ -92,10 +87,10 @@ async def async_setup_platform( async def handle_remove_tracking(call: ServiceCall) -> None: """Call when a user removes an Aftership tracking from Home Assistant.""" - slug = call.data[CONF_SLUG] - tracking_number = call.data[CONF_TRACKING_NUMBER] - - await aftership.remove_package_tracking(slug, tracking_number) + await aftership.trackings.remove( + tracking_number=call.data[CONF_TRACKING_NUMBER], + slug=call.data[CONF_SLUG], + ) async_dispatcher_send(hass, UPDATE_TOPIC) hass.services.async_register( @@ -113,7 +108,7 @@ class AfterShipSensor(SensorEntity): _attr_native_unit_of_measurement: str = "packages" _attr_icon: str = ICON - def __init__(self, aftership: Tracking, name: str) -> None: + def __init__(self, aftership: AfterShip, name: str) -> None: """Initialize the sensor.""" self._attributes: dict[str, Any] = {} self._state: int | None = None @@ -146,15 +141,10 @@ class AfterShipSensor(SensorEntity): @Throttle(MIN_TIME_BETWEEN_UPDATES) async def async_update(self, **kwargs: Any) -> None: """Get the latest data from the AfterShip API.""" - await self.aftership.get_trackings() - - if not self.aftership.meta: - _LOGGER.error("Unknown errors when querying") - return - if self.aftership.meta["code"] != HTTPStatus.OK: - _LOGGER.error( - "Errors when querying AfterShip. %s", str(self.aftership.meta) - ) + try: + trackings = await self.aftership.trackings.list() + except AfterShipException as err: + _LOGGER.error("Errors when querying AfterShip - %s", err) return status_to_ignore = {"delivered"} @@ -162,7 +152,7 @@ class AfterShipSensor(SensorEntity): trackings = [] not_delivered_count = 0 - for track in self.aftership.trackings["trackings"]: + for track in trackings: status = track["tag"].lower() name = ( track["tracking_number"] if track["title"] is None else track["title"] diff --git a/requirements_all.txt b/requirements_all.txt index a5ffbaa760f..f9880225472 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1374,7 +1374,7 @@ pyads==3.2.2 pyaehw4a1==0.3.9 # homeassistant.components.aftership -pyaftership==0.1.2 +pyaftership==21.11.0 # homeassistant.components.airnow pyairnow==1.1.0