From 086868d5b7504a7a4252cf2004e3665b7af074ef Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 19 Feb 2024 09:13:25 +0100 Subject: [PATCH] improve migration: use list of ids for access to source collection --- storage/migration/tracking.py | 19 ++++++++++--------- storage/tests/test_storage.py | 1 + 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/storage/migration/tracking.py b/storage/migration/tracking.py index c069c9d..9112424 100644 --- a/storage/migration/tracking.py +++ b/storage/migration/tracking.py @@ -14,16 +14,16 @@ from loops.storage.compat.common import Storage from loops import util -def migrate(loopsRoot, source, factory=tracking.Container, +def migrate(loopsRoot, recFolderName, sourceIds=None, factory=tracking.Container, start=0, stop=None, step=10, autoDelete=False): - if isinstance(source, basestring): - rf = loopsRoot.getRecordManager().get(source) - if rf is None: - print('*** ERROR: folder %r not found!' % recFolderName) - return - items = list(rf.items()[start:stop]) + rf = loopsRoot.getRecordManager().get(recFolderName) + if rf is None: + print('*** ERROR: folder %r not found!' % recFolderName) + return + if sourceIds is None: + trackIds = list(rf.keys()[start:stop]) else: - items = [(s.__name__, s) for s in source[start:stop]] + trackIds = sourceIds[start:stop] options = LoopsOptions(loopsRoot) #print('*** database:', config.dbname, config.dbuser, config.dbpassword) schema = options('scopes.storage.schema') or None @@ -34,7 +34,8 @@ def migrate(loopsRoot, source, factory=tracking.Container, container = storage.create(factory) ix = 0 prefix = factory.itemFactory.prefix - for ix, (id, inTrack) in enumerate(items): + for ix, id in enumerate(trackIds): + inTrack = rf[id] id = int(id) ts = datetime.fromtimestamp(inTrack.timeStamp) #print('*** in:', id, inTrack) diff --git a/storage/tests/test_storage.py b/storage/tests/test_storage.py index 6b5cab6..cabdf71 100644 --- a/storage/tests/test_storage.py +++ b/storage/tests/test_storage.py @@ -27,6 +27,7 @@ class TestStorage(common.TestCase): self.assertEqual(str(self.g.storage.engine.url), 'postgresql://ccotest:cco@localhost:5432/ccotest') self.g.storage.dropTable('favorites') + self.g.storage.dropTable('uid_mapping') component.provideAdapter(FavoritesAdapter) self.assertEqual(getName(self.loopsRoot), 'loops') self.assertEqual(getName(self.g.concepts), 'concepts')