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