From 14f270f0964b2e3ba8924ca9c58416655be34405 Mon Sep 17 00:00:00 2001 From: sander Date: Thu, 18 Feb 2016 14:19:46 +0100 Subject: [PATCH 1/2] Validate existence of custom_mode before setting --- dronekit/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dronekit/__init__.py b/dronekit/__init__.py index dd7ab8252..57833d297 100644 --- a/dronekit/__init__.py +++ b/dronekit/__init__.py @@ -1161,7 +1161,8 @@ def listener(self, name, m): self._armed = (m.base_mode & mavutil.mavlink.MAV_MODE_FLAG_SAFETY_ARMED) != 0 self.notify_attribute_listeners('armed', self.armed, cache=True) if self._master.mode_mapping() != None: - self._flightmode = {v: k for k, v in self._master.mode_mapping().items()}[m.custom_mode] + if m.custom_mode in {v: k for k, v in self._master.mode_mapping().items()}: + self._flightmode = {v: k for k, v in self._master.mode_mapping().items()}[m.custom_mode] self.notify_attribute_listeners('mode', self.mode, cache=True) self._system_status = m.system_status self.notify_attribute_listeners('system_status', self.system_status, cache=True) From d5eeb468e3f2061d7fd81637c7a3d0a1b54fe3ea Mon Sep 17 00:00:00 2001 From: sander Date: Thu, 18 Feb 2016 22:17:12 +0100 Subject: [PATCH 2/2] Avoid double evaluation --- dronekit/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dronekit/__init__.py b/dronekit/__init__.py index 57833d297..db2b5039b 100644 --- a/dronekit/__init__.py +++ b/dronekit/__init__.py @@ -1161,8 +1161,9 @@ def listener(self, name, m): self._armed = (m.base_mode & mavutil.mavlink.MAV_MODE_FLAG_SAFETY_ARMED) != 0 self.notify_attribute_listeners('armed', self.armed, cache=True) if self._master.mode_mapping() != None: - if m.custom_mode in {v: k for k, v in self._master.mode_mapping().items()}: - self._flightmode = {v: k for k, v in self._master.mode_mapping().items()}[m.custom_mode] + flightmodesById = {v: k for k, v in self._master.mode_mapping().items()} + if m.custom_mode in flightmodesById: + self._flightmode = flightmodesById[m.custom_mode] self.notify_attribute_listeners('mode', self.mode, cache=True) self._system_status = m.system_status self.notify_attribute_listeners('system_status', self.system_status, cache=True)