implement config layering
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
from abc import ABC, abstractmethod
|
||||
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class ConfigMigrator(ABC):
|
||||
@abstractmethod
|
||||
@@ -26,11 +30,30 @@ class ConfigMigratorVersion1(ConfigMigrator):
|
||||
self.renameKey(config, "wsjt_queue_length", "decoding_queue_length")
|
||||
|
||||
config["version"] = 2
|
||||
return config
|
||||
|
||||
|
||||
class ConfigMigratorVersion2(ConfigMigrator):
|
||||
def migrate(self, config):
|
||||
if "waterfall_colors" in config and any(v > 0xFFFFFF for v in config["waterfall_colors"]):
|
||||
config["waterfall_colors"] = [v >> 8 for v in config["waterfall_colors"]]
|
||||
return config
|
||||
|
||||
config["version"] = 3
|
||||
|
||||
|
||||
class Migrator(object):
|
||||
currentVersion = 3
|
||||
migrators = {
|
||||
1: ConfigMigratorVersion1(),
|
||||
2: ConfigMigratorVersion2(),
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def migrate(config):
|
||||
version = config["version"] if "version" in config else 1
|
||||
if version == Migrator.currentVersion:
|
||||
return config
|
||||
|
||||
logger.debug("migrating config from version %i", version)
|
||||
migrators = [Migrator.migrators[i] for i in range(version, Migrator.currentVersion)]
|
||||
for migrator in migrators:
|
||||
migrator.migrate(config)
|
||||
|
||||
Reference in New Issue
Block a user