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.interface import implements
from cybertools.util.date import date2TimeStamp
from cybertools.tracking.btree import Track
from cybertools.tracking.interfaces import ITrackingStorage
from loops.organize.personal.interfaces import IFavorites, IFavorite
@ -50,7 +51,7 @@ class Favorites(object):
return
personUid = util.getUidForObject(person)
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):
if type is not None:
if item.type != type:
@ -95,7 +96,7 @@ class Favorites(object):
track.data = data
class Favorite(Track):
class BaseFavorite(object):
implements(IFavorite)
@ -106,6 +107,10 @@ class Favorite(Track):
return self.data.get('type') or 'favorite'
class Favorite(BaseFavorite, Track):
pass
def updateSortInfo(person, task, data):
if person is not None:
favorites = task.getLoopsRoot().getRecordManager().get('favorites')

View file

@ -3,11 +3,11 @@
"""SQL-based storage for personal favorites and settings."""
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
class Favorite(record.Track):
class Favorite(BaseFavorite, compat.Track):
prefix = 'fav'

View file

@ -9,6 +9,17 @@ used by code based on loops.organize.tracking.
from cco.storage.tracking import record
class Track(record.Track):
@property
def taskId(self):
return self.head.get('taskId')
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."""
from datetime import datetime
import transaction
import config
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),
timeStamp=ts, data=inTrack.data)
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.setup import addAndConfigureObject
from loops.storage.tests import common
from loops import util
class TestStorage(common.TestCase):
@ -45,10 +46,14 @@ class TestStorage(common.TestCase):
def test_fav_010_add(self):
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):
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):
transaction.commit()