From bd62226a6ec52e8be1e305a6f26d2fa714aa8534 Mon Sep 17 00:00:00 2001 From: Markus Birth Date: Mon, 16 Sep 2019 13:05:48 +0200 Subject: [PATCH] Added debug parameter. More sanity checks. Return empty result set if no actual results were returned. --- get_updates.py | 4 ++++ grmn/updateserver.py | 18 ++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/get_updates.py b/get_updates.py index f280f6f..3f5a53f 100644 --- a/get_updates.py +++ b/get_updates.py @@ -23,6 +23,7 @@ optp.add_option("--code", action="append", dest="unlock_codes", metavar="UNLOCK_ optp.add_option("--devicexml", dest="devicexml", metavar="FILE", help="Use specified GarminDevice.xml (also implies -E)") optp.add_option("--json", action="store_true", dest="json", default=False, help="Output JSON") optp.add_option("--list-devices", action="store_true", dest="list_devices", default=False, help="Show a list of SKUs and product names") +optp.add_option("--debug", action="store_true", dest="debug", default=False, help="Dump raw server requests and replies to files") optp.usage = """ %prog [options] SKU1 [SKU2..SKUn] @@ -50,6 +51,9 @@ elif len(device_skus) < 1 and not opts.devicexml: us = updateserver.UpdateServer() +if opts.debug: + us.debug = True + if opts.devicexml: # Filename given, load GarminDevice.xml from there; also disable WebUpdater print("Using GarminDevice.xml from {}.".format(opts.devicexml)) diff --git a/grmn/updateserver.py b/grmn/updateserver.py index 1efb58a..8fab560 100644 --- a/grmn/updateserver.py +++ b/grmn/updateserver.py @@ -63,7 +63,8 @@ class UpdateInfo: self.device_name = self.dom_get_text(dom.getElementsByTagName("Description")) version_major = self.dom_get_text(dom.getElementsByTagName("VersionMajor")) version_minor = self.dom_get_text(dom.getElementsByTagName("VersionMinor")) - self.fw_version = "{}.{:0>2s}".format(version_major, version_minor) + if len(version_minor) > 0: + self.fw_version = "{}.{:0>2s}".format(version_major, version_minor) self.license_url = self.dom_get_text(dom.getElementsByTagName("LicenseLocation")) self.changelog = self.dom_get_text(dom.getElementsByTagName("ChangeDescription")) self.notes = self.dom_get_text(dom.getElementsByTagName("Notes")) @@ -107,11 +108,12 @@ class UpdateServer: device_xml = self.get_device_xml(sku_numbers) reply = self.get_unit_updates(device_xml) results = [] - for i in range(0, len(reply.update_info)): - ui = reply.update_info[i] - r = UpdateInfo() - r.fill_from_protobuf(ui) - results.append(r) + if reply: + for i in range(0, len(reply.update_info)): + ui = reply.update_info[i] + r = UpdateInfo() + r.fill_from_protobuf(ui) + results.append(r) return results def query_webupdater(self, sku_numbers): @@ -125,6 +127,10 @@ class UpdateServer: results = [] for resp in dom.getElementsByTagName("Response"): + uf = resp.getElementsByTagName("UpdateFile") + if len(uf) == 0: + # Empty result + continue r = UpdateInfo() r.fill_from_response_dom(resp) results.append(r)