Leverage data from UDP discovery to initialize device structure (#132)

* avoid talking to devices after UDP discovery

* formatting fix

* more formatting

* more formatting changes

* undo gitignore changes

* fixing git ignore for black

Co-authored-by: dlee1j1 <dlee1j@yahoo.comm>
This commit is contained in:
dlee1j1 2021-02-06 07:14:36 -08:00 committed by GitHub
parent 98b40b5072
commit d4a361dd3e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 7 additions and 3 deletions

View File

@ -174,13 +174,12 @@ async def dump_discover(ctx, scrub):
async def discover(ctx, timeout, discover_only, dump_raw): async def discover(ctx, timeout, discover_only, dump_raw):
"""Discover devices in the network.""" """Discover devices in the network."""
target = ctx.parent.params["target"] target = ctx.parent.params["target"]
click.echo(f"Discovering devices for {timeout} seconds") click.echo(f"Discovering devices on {target} for {timeout} seconds")
found_devs = await Discover.discover( found_devs = await Discover.discover(
target=target, timeout=timeout, return_raw=dump_raw target=target, timeout=timeout, return_raw=dump_raw
) )
if not discover_only: if not discover_only:
for ip, dev in found_devs.items(): for ip, dev in found_devs.items():
await dev.update()
if dump_raw: if dump_raw:
click.echo(dev) click.echo(dev)
continue continue

View File

@ -77,7 +77,7 @@ class _DiscoverProtocol(asyncio.DatagramProtocol):
device_class = Discover._get_device_class(info) device_class = Discover._get_device_class(info)
device = device_class(ip) device = device_class(ip)
asyncio.ensure_future(device.update()) device.update_from_discover_info(info)
self.discovered_devices[ip] = device self.discovered_devices[ip] = device
self.discovered_devices_raw[ip] = info self.discovered_devices_raw[ip] = info

View File

@ -304,6 +304,11 @@ class SmartDevice:
# TODO: keep accessible for tests # TODO: keep accessible for tests
self._sys_info = self._last_update["system"]["get_sysinfo"] self._sys_info = self._last_update["system"]["get_sysinfo"]
def update_from_discover_info(self, info):
"""Update state from info from the discover call."""
self._last_update = info
self._sys_info = info["system"]["get_sysinfo"]
@property # type: ignore @property # type: ignore
@requires_update @requires_update
def sys_info(self) -> Dict[str, Any]: def sys_info(self) -> Dict[str, Any]: