Simplify hook registration by detecting upgrade hook functions

This commit is contained in:
Laurent Monin
2013-12-31 15:26:22 +01:00
parent 4554898e42
commit 5fc4129b32
2 changed files with 21 additions and 5 deletions

View File

@@ -17,6 +17,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import re
from operator import itemgetter
from PyQt4 import QtCore
from picard import (PICARD_APP_NAME, PICARD_ORG_NAME, PICARD_VERSION,
@@ -94,7 +95,25 @@ class Config(QtCore.QSettings):
else:
raise KeyError("Unknown profile '%s'" % (profilename,))
def register_upgrade_hook(self, to_version_str, func, *args):
def _detect_upgrade_hooks(self, symbol_table):
"""Detect upgrade functions based on their names"""
hooks = dict()
pattern = re.compile("^upgrade_to_v(\d+)_(\d+)_(\d+)_(dev|final)_(\d+)$")
for symbol in symbol_table:
match = re.search(pattern, symbol)
if not match:
continue
version = match.groups()
version_string = version_to_string(version)
hooks[version_string] = symbol_table[symbol]
return hooks
def register_upgrade_hooks(self, symbol_table):
hooks = self._detect_upgrade_hooks(symbol_table)
for version in sorted(hooks):
self._register_upgrade_hook(version, hooks[version])
def _register_upgrade_hook(self, to_version_str, func, *args):
"""Register a function to upgrade from one config version to another"""
to_version = version_from_string(to_version_str)
assert to_version <= PICARD_VERSION, "%r > %r !!!" % (to_version, PICARD_VERSION)

View File

@@ -216,10 +216,7 @@ class Tagger(QtGui.QApplication):
"from spaces to comma")
cfg = config._config
cfg.register_upgrade_hook("1.0.0final0", upgrade_to_v1_0_0_final_0)
cfg.register_upgrade_hook("1.3.0dev1", upgrade_to_v1_3_0_dev_1)
cfg.register_upgrade_hook("1.3.0dev2", upgrade_to_v1_3_0_dev_2)
cfg.register_upgrade_hooks(locals())
cfg.run_upgrade_hooks()
def move_files_to_album(self, files, albumid=None, album=None):