From e0fdbe2f92b9f43dd006fb4087a1419d7e9551af Mon Sep 17 00:00:00 2001 From: caila-marashaj Date: Thu, 21 Mar 2024 11:14:26 -0400 Subject: [PATCH 1/3] return has update for unexpected module fw filename --- api/src/opentrons/hardware_control/modules/mod_abc.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/src/opentrons/hardware_control/modules/mod_abc.py b/api/src/opentrons/hardware_control/modules/mod_abc.py index 48d7f79e4b2..ff1469be6b3 100644 --- a/api/src/opentrons/hardware_control/modules/mod_abc.py +++ b/api/src/opentrons/hardware_control/modules/mod_abc.py @@ -90,6 +90,8 @@ def has_available_update(self) -> bool: device_version = parse_version(self.device_info["version"]) available_version = parse_version(self._bundled_fw.version) return cast(bool, available_version > device_version) + elif self.device_info and not self._bundled_fw: + return True return False async def wait_for_is_running(self) -> None: From b8ba28158cfd62580e1518250cc6bfa6b4c540bb Mon Sep 17 00:00:00 2001 From: caila-marashaj Date: Thu, 21 Mar 2024 14:57:07 -0400 Subject: [PATCH 2/3] change regex instead --- api/src/opentrons/hardware_control/modules/mod_abc.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/api/src/opentrons/hardware_control/modules/mod_abc.py b/api/src/opentrons/hardware_control/modules/mod_abc.py index ff1469be6b3..cdf3b6ff32d 100644 --- a/api/src/opentrons/hardware_control/modules/mod_abc.py +++ b/api/src/opentrons/hardware_control/modules/mod_abc.py @@ -75,7 +75,7 @@ def get_bundled_fw(self) -> Optional[BundledFirmware]: return None file_prefix = self.firmware_prefix() - MODULE_FW_RE = re.compile(f"^{file_prefix}@v(.*)[.](hex|bin)$") + MODULE_FW_RE = re.compile(f"^{file_prefix}@v(.*)[.](hex|bin).*$") for fw_resource in ROBOT_FIRMWARE_DIR.iterdir(): # type: ignore matches = MODULE_FW_RE.search(fw_resource.name) if matches: @@ -90,8 +90,6 @@ def has_available_update(self) -> bool: device_version = parse_version(self.device_info["version"]) available_version = parse_version(self._bundled_fw.version) return cast(bool, available_version > device_version) - elif self.device_info and not self._bundled_fw: - return True return False async def wait_for_is_running(self) -> None: From ee0a015ef4b3fa3700266c817b7982d59c19c940 Mon Sep 17 00:00:00 2001 From: caila-marashaj Date: Fri, 22 Mar 2024 16:12:10 -0400 Subject: [PATCH 3/3] revert regex and try catch version update --- .../opentrons/hardware_control/modules/mod_abc.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/api/src/opentrons/hardware_control/modules/mod_abc.py b/api/src/opentrons/hardware_control/modules/mod_abc.py index cdf3b6ff32d..b0c2ba572ae 100644 --- a/api/src/opentrons/hardware_control/modules/mod_abc.py +++ b/api/src/opentrons/hardware_control/modules/mod_abc.py @@ -4,7 +4,7 @@ import re from pkg_resources import parse_version from typing import ClassVar, Mapping, Optional, cast, TypeVar - +from packaging.version import InvalidVersion from opentrons.config import IS_ROBOT, ROBOT_FIRMWARE_DIR from opentrons.drivers.rpi_drivers.types import USBPort @@ -75,7 +75,7 @@ def get_bundled_fw(self) -> Optional[BundledFirmware]: return None file_prefix = self.firmware_prefix() - MODULE_FW_RE = re.compile(f"^{file_prefix}@v(.*)[.](hex|bin).*$") + MODULE_FW_RE = re.compile(f"^{file_prefix}@v(.*)[.](hex|bin)$") for fw_resource in ROBOT_FIRMWARE_DIR.iterdir(): # type: ignore matches = MODULE_FW_RE.search(fw_resource.name) if matches: @@ -87,8 +87,15 @@ def get_bundled_fw(self) -> Optional[BundledFirmware]: def has_available_update(self) -> bool: """Return whether a newer firmware file is available""" if self.device_info and self._bundled_fw: - device_version = parse_version(self.device_info["version"]) - available_version = parse_version(self._bundled_fw.version) + # try catch this + try: + device_version = parse_version(self.device_info["version"]) + except InvalidVersion: + device_version = parse_version("v0.0.0") + try: + available_version = parse_version(self._bundled_fw.version) + except InvalidVersion: + available_version = parse_version("v0.0.0") return cast(bool, available_version > device_version) return False