Feature/overwritten settings (#1304)

prevent settings initalization from skills __init__ to override settings.json values
pull/1309/head
Michael Nguyen 2017-12-13 16:25:33 -06:00 committed by Åke
parent f61ccfeed7
commit 4b7d6e5526
2 changed files with 11 additions and 4 deletions

View File

@ -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]))

View File

@ -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. """