From d1252652bde0ac8ce33c0cd619328047f46ee93a Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Wed, 1 Sep 2021 22:14:57 -0400 Subject: [PATCH 1/2] Fix Ledvance OTA by accounting for new JSON version keys (#801) * Fix Ledvance OTA by accounting for new JSON version keys Fixes #800 * Clarify `LedvanceImage` arguments --- tests/test_ota_provider.py | 18 ++++++++++++++---- zigpy/ota/provider.py | 22 +++++++++++++++------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/tests/test_ota_provider.py b/tests/test_ota_provider.py index 96b498aa3..ec352b45d 100644 --- a/tests/test_ota_provider.py +++ b/tests/test_ota_provider.py @@ -655,7 +655,12 @@ async def test_ledvance_refresh_list( "identity": { "company": 4489, "product": 25, - "version": {"major": 1, "minor": 2, "build": 428}, + "version": { + "major": 1, + "minor": 2, + "build": 428, + "revision": 40, + }, }, "releaseNotes": "", "shA256": sha_1, @@ -672,7 +677,12 @@ async def test_ledvance_refresh_list( "identity": { "company": 4489, "product": 13, - "version": {"major": 1, "minor": 2, "build": 428}, + "version": { + "major": 1, + "minor": 2, + "build": 428, + "revision": 40, + }, }, "releaseNotes": "", "shA256": sha_2, @@ -699,11 +709,11 @@ async def test_ledvance_refresh_list( cached_1 = ledvance_prov._cache[img1.key] assert cached_1.image_type == img1.image_type base = "https://api.update.ledvance.com/v1/zigbee/firmwares/download" - assert cached_1.url == base + "?Company=4489&Product=25&Version=1.2.428" + assert cached_1.url == base + "?Company=4489&Product=25&Version=1.2.428.40" cached_2 = ledvance_prov._cache[img2.key] assert cached_2.image_type == img2.image_type - assert cached_2.url == base + "?Company=4489&Product=13&Version=1.2.428" + assert cached_2.url == base + "?Company=4489&Product=13&Version=1.2.428.40" assert not ledvance_prov.expired diff --git a/zigpy/ota/provider.py b/zigpy/ota/provider.py index 076e7084a..1f930d79f 100644 --- a/zigpy/ota/provider.py +++ b/zigpy/ota/provider.py @@ -7,6 +7,7 @@ import os import os.path from typing import Dict, Optional +import urllib.parse import aiohttp import attr @@ -195,17 +196,24 @@ class LedvanceImage: @classmethod def new(cls, data): - ident = data["identity"] - company, product, ver = (ident["company"], ident["product"], ident["version"]) - major, minor, build = (ver["major"], ver["minor"], ver["build"]) + identity = data["identity"] + ver = identity["version"] - res = cls(company, product) + res = cls(manufacturer_id=identity["company"], image_type=identity["product"]) res.file_version = int(data["fullName"].split("/")[1], 16) res.image_size = data["length"] - res.url = ( - f"https://api.update.ledvance.com/v1/zigbee/firmwares/download" - f"?Company={company}&Product={product}&Version={major}.{minor}.{build}" + "https://api.update.ledvance.com/v1/zigbee/firmwares/download?" + + urllib.parse.urlencode( + { + "Company": identity["company"], + "Product": identity["product"], + "Version": ( + f"{ver['major']}.{ver['minor']}" + f".{ver['build']}.{ver['revision']}" + ), + } + ) ) return res From 9d7848fd0ae632695c8dfd93684194f2e69152d1 Mon Sep 17 00:00:00 2001 From: Alexei Chetroi Date: Thu, 2 Sep 2021 20:24:38 -0400 Subject: [PATCH 2/2] 0.37.2 version bump --- zigpy/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zigpy/__init__.py b/zigpy/__init__.py index 00aa5bef4..c95b6c7c1 100644 --- a/zigpy/__init__.py +++ b/zigpy/__init__.py @@ -1,6 +1,6 @@ # coding: utf-8 MAJOR_VERSION = 0 MINOR_VERSION = 37 -PATCH_VERSION = "1" +PATCH_VERSION = "2" __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}"