access to SQL-based implementation of favorites record basically working
This commit is contained in:
parent
466044eb77
commit
8e81bab3bf
5 changed files with 29 additions and 6 deletions
|
@ -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')
|
||||||
|
|
|
@ -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'
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Add table
Reference in a new issue