move access to records container (in ZODB or SQL DB) to util.records() function

This commit is contained in:
Helmut Merz 2024-01-03 15:44:08 +01:00
parent 5c4b7fd730
commit b4b93b122e
2 changed files with 24 additions and 29 deletions

View file

@ -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:

24
util.py
View file

@ -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)