mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 20:57:21 +00:00
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:
parent
dbe0ba87a3
commit
6a7bd19a5a
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user