improve migration: use list of ids for access to source collection

This commit is contained in:
Helmut Merz 2024-02-19 09:13:25 +01:00
parent f51f3d4f25
commit 086868d5b7
2 changed files with 11 additions and 9 deletions

View file

@ -14,16 +14,16 @@ from loops.storage.compat.common import Storage
from loops import util 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): start=0, stop=None, step=10, autoDelete=False):
if isinstance(source, basestring): rf = loopsRoot.getRecordManager().get(recFolderName)
rf = loopsRoot.getRecordManager().get(source) if rf is None:
if rf is None: print('*** ERROR: folder %r not found!' % recFolderName)
print('*** ERROR: folder %r not found!' % recFolderName) return
return if sourceIds is None:
items = list(rf.items()[start:stop]) trackIds = list(rf.keys()[start:stop])
else: else:
items = [(s.__name__, s) for s in source[start:stop]] trackIds = sourceIds[start:stop]
options = LoopsOptions(loopsRoot) options = LoopsOptions(loopsRoot)
#print('*** database:', config.dbname, config.dbuser, config.dbpassword) #print('*** database:', config.dbname, config.dbuser, config.dbpassword)
schema = options('scopes.storage.schema') or None schema = options('scopes.storage.schema') or None
@ -34,7 +34,8 @@ def migrate(loopsRoot, source, factory=tracking.Container,
container = storage.create(factory) container = storage.create(factory)
ix = 0 ix = 0
prefix = factory.itemFactory.prefix prefix = factory.itemFactory.prefix
for ix, (id, inTrack) in enumerate(items): for ix, id in enumerate(trackIds):
inTrack = rf[id]
id = int(id) id = int(id)
ts = datetime.fromtimestamp(inTrack.timeStamp) ts = datetime.fromtimestamp(inTrack.timeStamp)
#print('*** in:', id, inTrack) #print('*** in:', id, inTrack)

View file

@ -27,6 +27,7 @@ class TestStorage(common.TestCase):
self.assertEqual(str(self.g.storage.engine.url), self.assertEqual(str(self.g.storage.engine.url),
'postgresql://ccotest:cco@localhost:5432/ccotest') 'postgresql://ccotest:cco@localhost:5432/ccotest')
self.g.storage.dropTable('favorites') self.g.storage.dropTable('favorites')
self.g.storage.dropTable('uid_mapping')
component.provideAdapter(FavoritesAdapter) component.provideAdapter(FavoritesAdapter)
self.assertEqual(getName(self.loopsRoot), 'loops') self.assertEqual(getName(self.loopsRoot), 'loops')
self.assertEqual(getName(self.g.concepts), 'concepts') self.assertEqual(getName(self.g.concepts), 'concepts')