From 536903f3d85792e578c172f9a81d6144bf56161b Mon Sep 17 00:00:00 2001 From: helmutm Date: Mon, 19 Feb 2024 08:33:50 +0100 Subject: [PATCH] improve / fix tracking migration --- storage/migration/tracking.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/storage/migration/tracking.py b/storage/migration/tracking.py index 7cf2610..b6c1af4 100644 --- a/storage/migration/tracking.py +++ b/storage/migration/tracking.py @@ -15,13 +15,13 @@ from loops import util def migrate(loopsRoot, source, factory=tracking.Container, - start=0, stop=None, step=10): + 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 = rf.items()[start:stop] + items = list(rf.items()[start:stop]) else: items = [(s.__name__, s) for s in source[start:stop]] options = LoopsOptions(loopsRoot) @@ -32,18 +32,27 @@ def migrate(loopsRoot, source, factory=tracking.Container, #print('*** schema:', schema) storage = Storage(schema=schema) container = storage.create(factory) + ix = 0 for ix, (id, inTrack) in enumerate(items): ts = datetime.fromtimestamp(inTrack.timeStamp) #print('*** in:', id, inTrack) head = [inTrack.metadata[k] for k in container.itemFactory.headFields] + data = inTrack.data #print('*** out:', head, ts) + for k, v in inTrack.__dict__.items(): + if k[0] == '_' and k[1] != '_': + print('*** _field!', k, v, head) + data[k] = v track = container.itemFactory(*head, trackId=int(id), - timeStamp=ts, data=inTrack.data) + timeStamp=ts, data=data) container.upsert(track) ouid = util.getUidForObject(inTrack) storage.storeUid(ouid, track.uid) + if autoDelete: + inTrack.__parent__.removeTrack(inTrack) if divmod(ix+1, step)[1] == 0: print('*** migrated %d' % (ix + 1 + start)) transaction.commit() transaction.commit() + print('*** migrated %d' % (ix + 1 + start))