[Checkins] SVN: Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/ first cut at catalog adapter
Miles Waller
miles at jamkit.com
Fri Mar 13 14:56:15 EDT 2009
Log message for revision 98041:
first cut at catalog adapter
Changed:
U Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/CHANGES.txt
U Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/CatalogTool.py
U Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/configure.zcml
U Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/testing.py
U Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/tests/test_CatalogTool.py
-=-
Modified: Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/CHANGES.txt 2009-03-13 17:34:54 UTC (rev 98040)
+++ Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/CHANGES.txt 2009-03-13 18:56:15 UTC (rev 98041)
@@ -4,6 +4,10 @@
2.2.0 (unreleased)
------------------
+- PortalCatalog: Changed to use a multi-adaptor to allow pluggable
+ IndexableObjectWrapper class. The change will assist in integrating with
+ other indexing strategies from third-party packages.
+
- Events: Changed 'handleContentishEvent' behavior for IObjectCopiedEvent.
'WorkflowTool.notifyCreated' no longer resets the workflow state, so the
the event subscriber clears the workflow history instead.
Modified: Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/CatalogTool.py
===================================================================
--- Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/CatalogTool.py 2009-03-13 17:34:54 UTC (rev 98040)
+++ Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/CatalogTool.py 2009-03-13 18:56:15 UTC (rev 98041)
@@ -43,9 +43,13 @@
from Products.CMFCore.utils import getToolByName
from Products.CMFCore.utils import UniqueObject
+from zope.component import getMultiAdapter
class IndexableObjectSpecification(ObjectSpecificationDescriptor):
+ # This class makes the wrapper transparent, adapter lookup is
+ # carried out based on the interfaces of the wrapped object.
+
def __get__(self, inst, cls=None):
if inst is None:
return getObjectSpecification(cls)
@@ -60,8 +64,11 @@
implements(IIndexableObjectWrapper)
__providedBy__ = IndexableObjectSpecification()
- def __init__(self, vars, ob):
- self.__vars = vars
+ def __init__(self, ob, catalog):
+ # look up the workflow variables for the object
+ wftool = getToolByName(catalog, 'portal_workflow', None)
+ if wftool is not None:
+ self.__vars = wftool.getCatalogVariablesFor(ob)
self.__ob = ob
def __str__(self):
@@ -246,12 +253,7 @@
# information just before cataloging.
# XXX: this method violates the rules for tools/utilities:
# it depends on a non-utility tool
- wftool = getToolByName(self, 'portal_workflow', None)
- if wftool is not None:
- vars = wftool.getCatalogVariablesFor(obj)
- else:
- vars = {}
- w = IndexableObjectWrapper(vars, obj)
+ w = getMultiAdapter((object, self), IIndexableObjectWrapper)
ZCatalog.catalog_object(self, w, uid, idxs, update_metadata,
pghandler)
Modified: Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/configure.zcml
===================================================================
--- Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/configure.zcml 2009-03-13 17:34:54 UTC (rev 98040)
+++ Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/configure.zcml 2009-03-13 18:56:15 UTC (rev 98041)
@@ -13,4 +13,6 @@
<include file="tool.zcml"/>
+ <include file="implements.zcml"/>
+
</configure>
Modified: Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/testing.py
===================================================================
--- Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/testing.py 2009-03-13 17:34:54 UTC (rev 98040)
+++ Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/testing.py 2009-03-13 18:56:15 UTC (rev 98041)
@@ -131,6 +131,7 @@
zcml.load_config('traversing.zcml', Products.Five)
zcml.load_config('event.zcml', Products.Five)
zcml.load_config('event.zcml', Products.CMFCore)
+ zcml.load_config('implements.zcml', Products.CMFCore)
setHooks()
@classmethod
Modified: Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/tests/test_CatalogTool.py
===================================================================
--- Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/tests/test_CatalogTool.py 2009-03-13 17:34:54 UTC (rev 98040)
+++ Products.CMFCore/branches/miwa-catalog-adapter/Products/CMFCore/tests/test_CatalogTool.py 2009-03-13 18:56:15 UTC (rev 98041)
@@ -17,9 +17,27 @@
import unittest
+from Acquisition import Implicit
+from zope.interface import implements
+from Products.CMFCore.interfaces import ICatalogTool
from Products.CMFCore.tests.base.testcase import SecurityTest
+class FakeFolder(Implicit):
+ id = 'portal'
+class FakeCatalog(Implicit):
+ implements(ICatalogTool)
+ id = 'portal_catalog'
+
+class FakeWorkflowTool(Implicit):
+ id = 'portal_workflow'
+
+ def __init__(self, vars):
+ self._vars = vars
+
+ def getCatalogVariablesFor(self):
+ return self._vars
+
class IndexableObjectWrapperTests(unittest.TestCase):
def _getTargetClass(self):
@@ -27,11 +45,16 @@
return IndexableObjectWrapper
- def _makeOne(self, *args, **kw):
- return self._getTargetClass()(*args, **kw)
+ def _makeOne(self, obj, vars):
+ self.root = FakeFolder()
+ self.root.portal_catalog = FakeFolder('portal_catalog')
+ self.root.portal_workflow = FakeWorkflowTool(vars)
+ catalog = self.root.portal_catalog
+ return self._getTargetClass()(obj, catalog)
def _makeContent(self, *args, **kw):
from Products.CMFCore.tests.base.dummy import DummyContent
+
return DummyContent(*args, **kw)
def test_interfaces(self):
@@ -75,7 +98,6 @@
self.failUnless(IContentish.providedBy(w))
self.failUnless(IIndexableObjectWrapper.providedBy(w))
-
class CatalogToolTests(SecurityTest):
def _getTargetClass(self):
More information about the Checkins
mailing list