diff --git a/mycroft/skills/core.py b/mycroft/skills/core.py index 03211f90ab..7e83358b78 100644 --- a/mycroft/skills/core.py +++ b/mycroft/skills/core.py @@ -130,6 +130,7 @@ def load_skill(skill_descriptor, emitter, skill_id, BLACKLISTED_SKILLS=None): callable(skill_module.create_skill)): # v2 skills framework skill = skill_module.create_skill() + skill.settings.allow_overwrite = True skill.bind(emitter) skill.skill_id = skill_id skill.load_data_files(dirname(skill_descriptor['info'][1])) diff --git a/mycroft/skills/settings.py b/mycroft/skills/settings.py index 59b002cd79..f29e985a3e 100644 --- a/mycroft/skills/settings.py +++ b/mycroft/skills/settings.py @@ -80,6 +80,12 @@ class SkillSettings(dict): def __init__(self, directory, name): super(SkillSettings, self).__init__() + # when skills try to instantiate settings + # in __init__, it can erase the settings saved + # on disk (settings.json). So this prevents that + # This is set to true in core.py after skill init + self.allow_overwrite = False + self.api = DeviceApi() self.config = ConfigurationManager.get() self.name = name @@ -93,9 +99,8 @@ class SkillSettings(dict): self._device_identity = None self._api_path = None self._user_identity = None - # if settingsmeta.json exists - # this block of code is a control flow for - # different scenarios that may arises with settingsmeta + + # if settingsmeta exist if isfile(self._meta_path): self._poll_skill_settings() self.load_skill_settings() @@ -156,7 +161,8 @@ class SkillSettings(dict): def __setitem__(self, key, value): """ Add/Update key. """ - return super(SkillSettings, self).__setitem__(key, value) + if self.allow_overwrite or key not in self: + return super(SkillSettings, self).__setitem__(key, value) def _load_settings_meta(self): """ Loads settings metadata from skills path. """