diff --git a/.gitignore b/.gitignore index 41ef9e2..7ff38ab 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ ajax/dojo/* build/ dist/ +*.swp *.egg-info *.project *.pydevproject diff --git a/tracking/migration.py b/tracking/migration.py new file mode 100644 index 0000000..2f02ea5 --- /dev/null +++ b/tracking/migration.py @@ -0,0 +1,40 @@ +# cybertools.tracking.migration + +"""Tools for migration ZODB-/BTree-based tracks to SQL-base records.""" + +from datetime import datetime +import time + +import config +from cco.storage.common import Context, getEngine +from cco.storage.tracking import record +from loops.config.base import LoopsOptions + + +def migrate(loopsRoot, recFolderName, storageFactory=record.Storage): + rf = loopsRoot.getRecordManager().get(recFolderName) + if rf is None: + print('*** ERROR: folder %r not found!' % recFolderName) + return + options = LoopsOptions(loopsRoot) + print('*** database:', config.dbname, config.dbuser, config.dbpassword) + schema = options('cco.storage.schema') or None + if schema is not None: + schema = schema[0] + print('*** schema:', schema) + context = Context(getEngine(config.dbengine, config.dbname, + config.dbuser, config.dbpassword, + host=config.dbhost, port=config.dbport), + schema=schema) + storage = storageFactory(context) + for id, inTrack in rf.items(): + #ts = time.mktime(inTrack.timeStamp.timetuple()) + ts = datetime.fromtimestamp(inTrack.timeStamp) + print('*** in:', id, inTrack) + head = [inTrack.metadata[k] for k in storage.trackFactory.headFields] + print('*** out:', head, ts) + track = storage.trackFactory(*head, trackId=int(id), + timeStamp=ts, data=inTrack.data) + storage.upsert(track) + +