move storage migration from cybertools to loops, + updates from cco.storage
This commit is contained in:
parent
6d39f9f354
commit
781521ca88
6 changed files with 62 additions and 5 deletions
|
@ -1,4 +1 @@
|
||||||
"""
|
# package loops.organize.personal
|
||||||
$Id$
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
2
organize/personal/storage/__init__.py
Normal file
2
organize/personal/storage/__init__.py
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# package loops.organize.personal.storage
|
||||||
|
|
20
organize/personal/storage/favorite.py
Normal file
20
organize/personal/storage/favorite.py
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# loops.organize.personal.storage.favorite
|
||||||
|
|
||||||
|
"""SQL-based storage for personal favorites and settings."""
|
||||||
|
|
||||||
|
from cco.storage.common import registerContainerClass
|
||||||
|
from cco.storage.tracking import record
|
||||||
|
|
||||||
|
|
||||||
|
class Favorite(record.Track):
|
||||||
|
|
||||||
|
prefix = 'fav'
|
||||||
|
|
||||||
|
|
||||||
|
@registerContainerClass
|
||||||
|
class Favorites(record.Container):
|
||||||
|
|
||||||
|
itemFactory = Favorite
|
||||||
|
tableName = 'favorites'
|
||||||
|
insertOnChange = False
|
||||||
|
|
|
@ -98,7 +98,7 @@ class BaseTrackView(TrackView):
|
||||||
|
|
||||||
def getMetadataTarget(self, key):
|
def getMetadataTarget(self, key):
|
||||||
value = self.metadata.get(key)
|
value = self.metadata.get(key)
|
||||||
if isinstance(value, int) or value.isdigit():
|
if value is not None and (isinstance(value, int) or value.isdigit()):
|
||||||
obj = util.getObjectForUid(value)
|
obj = util.getObjectForUid(value)
|
||||||
if obj is not None:
|
if obj is not None:
|
||||||
url = ('%s/@@SelectedManagementView.html' %
|
url = ('%s/@@SelectedManagementView.html' %
|
||||||
|
|
1
organize/tracking/storage/__init__.py
Normal file
1
organize/tracking/storage/__init__.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# package loops.organize.tracking.storage
|
37
organize/tracking/storage/migration.py
Normal file
37
organize/tracking/storage/migration.py
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# loops.organize.tracking.storage.migration
|
||||||
|
|
||||||
|
"""Tools for migration ZODB-/BTree-based tracks to SQL-base records."""
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
import config
|
||||||
|
from cco.storage.common import Storage, getEngine
|
||||||
|
from cco.storage.tracking import record
|
||||||
|
from loops.config.base import LoopsOptions
|
||||||
|
|
||||||
|
|
||||||
|
def migrate(loopsRoot, recFolderName, factory=record.Container):
|
||||||
|
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)
|
||||||
|
storage = Storage(getEngine(config.dbengine, config.dbname,
|
||||||
|
config.dbuser, config.dbpassword,
|
||||||
|
host=config.dbhost, port=config.dbport),
|
||||||
|
schema=schema)
|
||||||
|
container = storage.create(factory)
|
||||||
|
for id, inTrack in rf.items():
|
||||||
|
ts = datetime.fromtimestamp(inTrack.timeStamp)
|
||||||
|
print('*** in:', id, inTrack)
|
||||||
|
head = [inTrack.metadata[k] for k in container.itemFactory.headFields]
|
||||||
|
print('*** out:', head, ts)
|
||||||
|
track = container.itemFactory(*head, trackId=int(id),
|
||||||
|
timeStamp=ts, data=inTrack.data)
|
||||||
|
container.upsert(track)
|
||||||
|
|
Loading…
Add table
Reference in a new issue