diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index 3a859d7b..7032b944 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -232,92 +232,11 @@ class Settings(object): self._migrateConfig() def _migrateConfig(self): - if not self._config: - return - - if "events" in self._config.keys() and ("gcodeCommandTrigger" in self._config["events"] or "systemCommandTrigger" in self._config["events"]): - self._logger.info("Migrating config (event subscriptions)...") - - # migrate event hooks to new format - placeholderRe = re.compile("%\((.*?)\)s") - - eventNameReplacements = { - "ClientOpen": "ClientOpened", - "TransferStart": "TransferStarted" - } - payloadDataReplacements = { - "Upload": {"data": "{file}", "filename": "{file}"}, - "Connected": {"data": "{port} at {baudrate} baud"}, - "FileSelected": {"data": "{file}", "filename": "{file}"}, - "TransferStarted": {"data": "{remote}", "filename": "{remote}"}, - "TransferDone": {"data": "{remote}", "filename": "{remote}"}, - "ZChange": {"data": "{new}"}, - "CaptureStart": {"data": "{file}"}, - "CaptureDone": {"data": "{file}"}, - "MovieDone": {"data": "{movie}", "filename": "{gcode}"}, - "Error": {"data": "{error}"}, - "PrintStarted": {"data": "{file}", "filename": "{file}"}, - "PrintDone": {"data": "{file}", "filename": "{file}"}, - } - - def migrateEventHook(event, command): - # migrate placeholders - command = placeholderRe.sub("{__\\1}", command) - - # migrate event names - if event in eventNameReplacements: - event = eventNameReplacements["event"] - - # migrate payloads to more specific placeholders - if event in payloadDataReplacements: - for key in payloadDataReplacements[event]: - command = command.replace("{__%s}" % key, payloadDataReplacements[event][key]) - - # return processed tuple - return event, command - - disableSystemCommands = False - if "systemCommandTrigger" in self._config["events"] and "enabled" in self._config["events"]["systemCommandTrigger"]: - disableSystemCommands = not self._config["events"]["systemCommandTrigger"]["enabled"] - - disableGcodeCommands = False - if "gcodeCommandTrigger" in self._config["events"] and "enabled" in self._config["events"]["gcodeCommandTrigger"]: - disableGcodeCommands = not self._config["events"]["gcodeCommandTrigger"]["enabled"] - - disableAllCommands = disableSystemCommands and disableGcodeCommands - newEvents = { - "enabled": not disableAllCommands, - "subscriptions": [] - } - - if "systemCommandTrigger" in self._config["events"] and "subscriptions" in self._config["events"]["systemCommandTrigger"]: - for trigger in self._config["events"]["systemCommandTrigger"]["subscriptions"]: - if not ("event" in trigger and "command" in trigger): - continue - - newTrigger = {"type": "system"} - if disableSystemCommands and not disableAllCommands: - newTrigger["enabled"] = False - - newTrigger["event"], newTrigger["command"] = migrateEventHook(trigger["event"], trigger["command"]) - newEvents["subscriptions"].append(newTrigger) - - if "gcodeCommandTrigger" in self._config["events"] and "subscriptions" in self._config["events"]["gcodeCommandTrigger"]: - for trigger in self._config["events"]["gcodeCommandTrigger"]["subscriptions"]: - if not ("event" in trigger and "command" in trigger): - continue - - newTrigger = {"type": "gcode"} - if disableGcodeCommands and not disableAllCommands: - newTrigger["enabled"] = False - - newTrigger["event"], newTrigger["command"] = migrateEventHook(trigger["event"], trigger["command"]) - newTrigger["command"] = newTrigger["command"].split(",") - newEvents["subscriptions"].append(newTrigger) - - self._config["events"] = newEvents + dirty = False + for migrate in (self._migrate_event_config, self._migrate_reverse_proxy_config): + dirty = migrate() or dirty + if dirty: self.save(force=True) - self._logger.info("Migrated %d event subscriptions to new format and structure" % len(newEvents["subscriptions"])) def _migrate_reverse_proxy_config(self): if "server" in self._config.keys() and ("baseUrl" in self._config["server"] or "scheme" in self._config["server"]):