access to SQL-based implementation of favorites record basically working

This commit is contained in:
Helmut Merz 2023-12-20 15:39:10 +01:00
parent 466044eb77
commit 8e81bab3bf
5 changed files with 29 additions and 6 deletions

View file

@ -23,6 +23,7 @@ A framework for storing personal favorites and settings.
from zope.component import adapts from zope.component import adapts
from zope.interface import implements from zope.interface import implements
from cybertools.util.date import date2TimeStamp
from cybertools.tracking.btree import Track from cybertools.tracking.btree import Track
from cybertools.tracking.interfaces import ITrackingStorage from cybertools.tracking.interfaces import ITrackingStorage
from loops.organize.personal.interfaces import IFavorites, IFavorite from loops.organize.personal.interfaces import IFavorites, IFavorite
@ -50,7 +51,7 @@ class Favorites(object):
return return
personUid = util.getUidForObject(person) personUid = util.getUidForObject(person)
if sortKey is None: if sortKey is None:
sortKey = lambda x: (x.data.get('order', 100), -x.timeStamp) sortKey = lambda x: (x.data.get('order', 100), -date2TimeStamp(x.timeStamp))
for item in sorted(self.context.query(userName=personUid), key=sortKey): for item in sorted(self.context.query(userName=personUid), key=sortKey):
if type is not None: if type is not None:
if item.type != type: if item.type != type:
@ -95,7 +96,7 @@ class Favorites(object):
track.data = data track.data = data
class Favorite(Track): class BaseFavorite(object):
implements(IFavorite) implements(IFavorite)
@ -106,6 +107,10 @@ class Favorite(Track):
return self.data.get('type') or 'favorite' return self.data.get('type') or 'favorite'
class Favorite(BaseFavorite, Track):
pass
def updateSortInfo(person, task, data): def updateSortInfo(person, task, data):
if person is not None: if person is not None:
favorites = task.getLoopsRoot().getRecordManager().get('favorites') favorites = task.getLoopsRoot().getRecordManager().get('favorites')

View file

@ -3,11 +3,11 @@
"""SQL-based storage for personal favorites and settings.""" """SQL-based storage for personal favorites and settings."""
from cco.storage.common import registerContainerClass from cco.storage.common import registerContainerClass
from cco.storage.tracking import record from loops.organize.personal.favorite import BaseFavorite
from loops.organize.tracking.storage import compat from loops.organize.tracking.storage import compat
class Favorite(record.Track): class Favorite(BaseFavorite, compat.Track):
prefix = 'fav' prefix = 'fav'

View file

@ -9,6 +9,17 @@ used by code based on loops.organize.tracking.
from cco.storage.tracking import record from cco.storage.tracking import record
class Track(record.Track):
@property
def taskId(self):
return self.head.get('taskId')
class Container(record.Container): class Container(record.Container):
pass itemFactory = Track
def saveUserTrack(self, taskId, runId, userName, data):
track = self.itemFactory(taskId, userName, data=data)
return self.save(track)

View file

@ -3,6 +3,7 @@
"""Tools for migration ZODB-/BTree-based tracks to SQL-base records.""" """Tools for migration ZODB-/BTree-based tracks to SQL-base records."""
from datetime import datetime from datetime import datetime
import transaction
import config import config
from cco.storage.common import Storage, getEngine from cco.storage.common import Storage, getEngine
@ -34,4 +35,5 @@ def migrate(loopsRoot, recFolderName, factory=record.Container):
track = container.itemFactory(*head, trackId=int(id), track = container.itemFactory(*head, trackId=int(id),
timeStamp=ts, data=inTrack.data) timeStamp=ts, data=inTrack.data)
container.upsert(track) container.upsert(track)
transaction.commit()

View file

@ -16,6 +16,7 @@ from loops.organize.personal.storage.favorite import Favorites
from loops.organize.tracking.storage.migration import migrate from loops.organize.tracking.storage.migration import migrate
from loops.setup import addAndConfigureObject from loops.setup import addAndConfigureObject
from loops.storage.tests import common from loops.storage.tests import common
from loops import util
class TestStorage(common.TestCase): class TestStorage(common.TestCase):
@ -45,10 +46,14 @@ class TestStorage(common.TestCase):
def test_fav_010_add(self): def test_fav_010_add(self):
favs = FavoritesAdapter(self.g.favorites) favs = FavoritesAdapter(self.g.favorites)
trackId = favs.add(self.g.resources['d002.txt'], self.g.johnC)
print('*** add, result:', trackId)
def test_fav_020_query(self): def test_fav_020_query(self):
favs = FavoritesAdapter(self.g.favorites) favs = FavoritesAdapter(self.g.favorites)
self.assertEqual('a'.upper(), 'A') uid = util.getUidForObject(self.g.johnC)
result = list(self.g.favorites.query(userName=uid))
print('*** fav', list(favs.list(self.g.johnC)))
def test_zzz_tearDown(self): def test_zzz_tearDown(self):
transaction.commit() transaction.commit()