diff --git a/organize/personal/browser/favorite.py b/organize/personal/browser/favorite.py index c76ac82..31a114c 100644 --- a/organize/personal/browser/favorite.py +++ b/organize/personal/browser/favorite.py @@ -24,8 +24,6 @@ from zope import component from zope.app.pagetemplate import ViewPageTemplateFile from zope.cachedescriptors.property import Lazy -import config -from cco.storage.common import Storage, getEngine from cybertools.browser.configurator import ViewConfigurator, MacroViewProperty from loops.browser.node import NodeView from loops.common import adapted @@ -41,24 +39,6 @@ personal_macros = ViewPageTemplateFile('personal_macros.pt') class FavoriteView(NodeView): - containerName = 'favorites' - containerFactory = Favorites - - @Lazy - def useRecordsStorage(self): - return self.containerName in (self.globalOptions('cco.storage.records') or []) - - @Lazy - def recordsContainer(self): - schema = self.globalOptions('cco.storage.schema') or None - if schema is not None: - schema = schema[0] - storage = Storage(getEngine(config.dbengine, config.dbname, - config.dbuser, config.dbpassword, - host=config.dbhost, port=config.dbport), - schema=schema) - return storage.create(self.containerFactory) - @Lazy def item(self): return self @@ -69,14 +49,7 @@ class FavoriteView(NodeView): @Lazy def favorites(self): - if self.useRecordsStorage: - return FavAdapter(self.recordsContainer) - records = self.loopsRoot.getRecordManager() - if records is not None: - storage = records.get('favorites') - if storage is not None: - return IFavorites(storage) - return None + return FavAdapter(util.records(self.context, 'favorites', Favorites)) def listFavorites(self): if self.favorites is None: diff --git a/util.py b/util.py index 0ee7b5f..cf3a656 100644 --- a/util.py +++ b/util.py @@ -20,6 +20,7 @@ Utility functions. """ +from __future__ import absolute_import import os from zope.publisher.browser import BrowserView from zope import component @@ -38,7 +39,10 @@ try: except ImportError: markdown = None +import config +from cco.storage.common import Storage, getEngine import cybertools +from cybertools.meta.interfaces import IOptions from loops.browser.util import html_quote _ = MessageFactory('loops') @@ -115,6 +119,8 @@ def toUnicode(value, encoding='UTF-8'): return value +# catalog and index stuff + def getCatalog(context): from loops.common import baseObject context = baseObject(context) @@ -130,6 +136,23 @@ def reindex(obj, catalog=None): catalog.index_doc(int(getUidForObject(obj)), obj) +# options => storage + +def records(context, name, factory): + root = context.getLoopsRoot() + opts = IOptions(root) + if name in (opts('cco.storage.records') or []): + schema = (opts('cco.storage.schema') or [None])[0] + storage = Storage(getEngine(config.dbengine, config.dbname, + config.dbuser, config.dbpassword, + host=config.dbhost, port=config.dbport), + schema=schema) + cont = storage.create(factory) + else: + cont = root.getRecordManager().get(name) + return cont + + # UID stuff class IUid(Interface): @@ -137,7 +160,6 @@ class IUid(Interface): uid = Attribute("Unique Identifier") - def getItem(uid, intIds=None, storage=None): if storage is not None and '-' in uid: return storage.getItem(uid)