migration: allow source list, source list slicing, commit after step records

This commit is contained in:
Helmut Merz 2024-02-06 17:26:08 +01:00
parent bece8863ef
commit bea7ed0254
2 changed files with 15 additions and 8 deletions

View file

@ -14,11 +14,16 @@ from loops.storage.compat.common import Storage
from loops import util from loops import util
def migrate(loopsRoot, recFolderName, factory=tracking.Container): def migrate(loopsRoot, source, factory=tracking.Container,
rf = loopsRoot.getRecordManager().get(recFolderName) start=0, stop=None, step=10):
if isinstance(source, basestring):
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]
else:
items = [(s.__name__, s) for s in source[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('cco.storage.schema') or None schema = options('cco.storage.schema') or None
@ -27,7 +32,7 @@ def migrate(loopsRoot, recFolderName, 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)
for id, inTrack in rf.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]
@ -37,5 +42,8 @@ def migrate(loopsRoot, recFolderName, factory=tracking.Container):
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 divmod(ix+1, step)[1] == 0:
print('*** migrated %d' % (ix + 1 + start))
transaction.commit()
transaction.commit() transaction.commit()

View file

@ -37,7 +37,6 @@ engine = getEngine(config.dbengine, config.dbname,
cco.storage.common.engine = engine cco.storage.common.engine = engine
cco.storage.common.Session = sessionFactory(engine) cco.storage.common.Session = sessionFactory(engine)
renderingFactories = { renderingFactories = {
'text/plain': 'zope.source.plaintext', 'text/plain': 'zope.source.plaintext',
'text/stx': 'zope.source.stx', 'text/stx': 'zope.source.stx',