Remove archived 17track packages from the entity registry (#23049)

* Remove archived 17track packages from the entity registry

* Fix incorrect __init__.py

* Member comments

* Member comments

* Fix too many params

* Member comments

* Member comments
This commit is contained in:
Aaron Bach 2019-04-19 01:14:14 -06:00 committed by Martin Hjelmare
parent dbe0ba87a3
commit 6a7bd19a5a

View File

@ -33,6 +33,8 @@ DATA_SUMMARY = 'summary_data'
DEFAULT_ATTRIBUTION = 'Data provided by 17track.net'
DEFAULT_SCAN_INTERVAL = timedelta(minutes=10)
ENTITY_ID_TEMPLATE = 'package_{0}_{1}'
NOTIFICATION_DELIVERED_ID_SCAFFOLD = 'package_delivered_{0}'
NOTIFICATION_DELIVERED_TITLE = 'Package Delivered'
NOTIFICATION_DELIVERED_URL_SCAFFOLD = 'https://t.17track.net/track#nums={0}'
@ -71,8 +73,8 @@ async def async_setup_platform(
scan_interval = config.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL)
data = SeventeenTrackData(
client, async_add_entities, scan_interval, config[CONF_SHOW_ARCHIVED],
config[CONF_SHOW_DELIVERED])
hass, client, async_add_entities, scan_interval,
config[CONF_SHOW_ARCHIVED], config[CONF_SHOW_DELIVERED])
await data.async_update()
sensors = []
@ -208,7 +210,7 @@ class SeventeenTrackPackageSensor(Entity):
@property
def unique_id(self):
"""Return a unique, HASS-friendly identifier for this entity."""
return 'package_{0}_{1}'.format(
return ENTITY_ID_TEMPLATE.format(
self._data.account_id, self._tracking_number)
async def async_update(self):
@ -227,12 +229,13 @@ class SeventeenTrackPackageSensor(Entity):
# delete this entity:
_LOGGER.info(
'Deleting entity for stale package: %s', self._tracking_number)
reg = await self.hass.helpers.entity_registry.async_get_registry()
self.hass.async_create_task(reg.async_remove(self.entity_id))
self.hass.async_create_task(self.async_remove())
return
# If the user has elected to not see delivered packages and one gets
# delivered, post a notification, remove the entity from the UI, and
# delete it from the entity registry:
# delivered, post a notification:
if package.status == VALUE_DELIVERED and not self._data.show_delivered:
_LOGGER.info('Package delivered: %s', self._tracking_number)
self.hass.components.persistent_notification.create(
@ -245,10 +248,6 @@ class SeventeenTrackPackageSensor(Entity):
title=NOTIFICATION_DELIVERED_TITLE,
notification_id=NOTIFICATION_DELIVERED_ID_SCAFFOLD.format(
self._tracking_number))
reg = self.hass.helpers.entity_registry.async_get_registry()
self.hass.async_create_task(reg.async_remove(self.entity_id))
self.hass.async_create_task(self.async_remove())
return
self._attrs.update({
@ -262,11 +261,12 @@ class SeventeenTrackData:
"""Define a data handler for 17track.net."""
def __init__(
self, client, async_add_entities, scan_interval, show_archived,
show_delivered):
self, hass, client, async_add_entities, scan_interval,
show_archived, show_delivered):
"""Initialize."""
self._async_add_entities = async_add_entities
self._client = client
self._hass = hass
self._scan_interval = scan_interval
self._show_archived = show_archived
self.account_id = client.profile.account_id
@ -296,6 +296,18 @@ class SeventeenTrackData:
for package in to_add
], True)
# Remove archived packages from the entity registry:
to_remove = set(self.packages) - set(packages)
reg = await self._hass.helpers.entity_registry.async_get_registry()
for package in to_remove:
entity_id = reg.async_get_entity_id(
'sensor', 'seventeentrack',
ENTITY_ID_TEMPLATE.format(
self.account_id, package.tracking_number))
if not entity_id:
continue
self._hass.async_create_task(reg.async_remove(entity_id))
self.packages = packages
except SeventeenTrackError as err:
_LOGGER.error('There was an error retrieving packages: %s', err)