improve / fix tracking migration

This commit is contained in:
Helmut Merz 2024-02-19 08:33:50 +01:00
parent 75fdced678
commit 536903f3d8

View file

@ -15,13 +15,13 @@ from loops import util
def migrate(loopsRoot, source, factory=tracking.Container, 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): if isinstance(source, basestring):
rf = loopsRoot.getRecordManager().get(source) 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
items = rf.items()[start:stop] items = list(rf.items()[start:stop])
else: else:
items = [(s.__name__, s) for s in source[start:stop]] items = [(s.__name__, s) for s in source[start:stop]]
options = LoopsOptions(loopsRoot) options = LoopsOptions(loopsRoot)
@ -32,18 +32,27 @@ def migrate(loopsRoot, source, factory=tracking.Container,
#print('*** schema:', schema) #print('*** schema:', schema)
storage = Storage(schema=schema) storage = Storage(schema=schema)
container = storage.create(factory) container = storage.create(factory)
ix = 0
for ix, (id, inTrack) in enumerate(items): for ix, (id, inTrack) in enumerate(items):
ts = datetime.fromtimestamp(inTrack.timeStamp) ts = datetime.fromtimestamp(inTrack.timeStamp)
#print('*** in:', id, inTrack) #print('*** in:', id, inTrack)
head = [inTrack.metadata[k] for k in container.itemFactory.headFields] head = [inTrack.metadata[k] for k in container.itemFactory.headFields]
data = inTrack.data
#print('*** out:', head, ts) #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), track = container.itemFactory(*head, trackId=int(id),
timeStamp=ts, data=inTrack.data) timeStamp=ts, data=data)
container.upsert(track) container.upsert(track)
ouid = util.getUidForObject(inTrack) ouid = util.getUidForObject(inTrack)
storage.storeUid(ouid, track.uid) storage.storeUid(ouid, track.uid)
if autoDelete:
inTrack.__parent__.removeTrack(inTrack)
if divmod(ix+1, step)[1] == 0: if divmod(ix+1, step)[1] == 0:
print('*** migrated %d' % (ix + 1 + start)) print('*** migrated %d' % (ix + 1 + start))
transaction.commit() transaction.commit()
transaction.commit() transaction.commit()
print('*** migrated %d' % (ix + 1 + start))