Index: mycroft-core-release-v18.2.11/mycroft/skills/settings.py =================================================================== --- mycroft-core-release-v18.2.11.orig/mycroft/skills/settings.py +++ mycroft-core-release-v18.2.11/mycroft/skills/settings.py @@ -105,6 +105,14 @@ class SkillSettings(dict): if isfile(self._meta_path): self._poll_skill_settings() + def __eq__(self, other): + return self.name == other.name and \ + self._settings_path == other._settings_path and self._meta_path == other._meta_path and \ + self.loaded_hash == other.loaded_hash + + def __hash__(self): + return hash((self.name, self._settings_path, self._meta_path, self.loaded_hash)) + def run_poll(self, _=None): """Immediately poll the web for new skill settings""" if self._poll_timer: Index: mycroft-core-release-v18.2.11/mycroft/messagebus/client/ws.py =================================================================== --- mycroft-core-release-v18.2.11.orig/mycroft/messagebus/client/ws.py +++ mycroft-core-release-v18.2.11/mycroft/messagebus/client/ws.py @@ -158,7 +158,7 @@ class WebsocketClient(object): else: LOG.debug("Not able to find '"+str(event_name)+"'") self.emitter.remove_listener(event_name, func) - except ValueError as e: + except (ValueError, KeyError) as e: LOG.warning('Failed to remove event {}: {}'.format(event_name, str(func))) for line in traceback.format_stack():