[Zope-Checkins]
SVN: Zope/branches/Zope-2_8-branch/lib/python/Products/
backported some small interface improvements and related
cleanup from the trunk
Yvo Schubbe
y.2005- at wcm-solutions.de
Tue Oct 4 10:43:26 EDT 2005
Log message for revision 38741:
backported some small interface improvements and related cleanup from the trunk
Changed:
UU Zope/branches/Zope-2_8-branch/lib/python/Products/MailHost/MailHost.py
A Zope/branches/Zope-2_8-branch/lib/python/Products/MailHost/interfaces.py
UU Zope/branches/Zope-2_8-branch/lib/python/Products/MailHost/tests/testMailHost.py
UU Zope/branches/Zope-2_8-branch/lib/python/Products/PluginIndexes/common/PluggableIndex.py
U Zope/branches/Zope-2_8-branch/lib/python/Products/PluginIndexes/interfaces.py
UU Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/IZCatalog.py
UU Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ProgressHandler.py
UU Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ZCatalogIndexes.py
U Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/interfaces.py
-=-
Modified: Zope/branches/Zope-2_8-branch/lib/python/Products/MailHost/MailHost.py
===================================================================
--- Zope/branches/Zope-2_8-branch/lib/python/Products/MailHost/MailHost.py 2005-10-04 14:25:03 UTC (rev 38740)
+++ Zope/branches/Zope-2_8-branch/lib/python/Products/MailHost/MailHost.py 2005-10-04 14:43:25 UTC (rev 38741)
@@ -7,28 +7,38 @@
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE
+# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""SMTP mail objects
-$Id$"""
-__version__ = "$Revision: 1.83 $"[11:-2]
-from Globals import Persistent, DTMLFile, InitializeClass
+$Id$
+"""
+
+import mimetools
+import rfc822
+from cStringIO import StringIO
from smtplib import SMTP
+
+import Acquisition
+import OFS.SimpleItem
+from AccessControl import ClassSecurityInfo
+from AccessControl.Permissions import change_configuration
+from AccessControl.Permissions import use_mailhost_services
+from AccessControl.Permissions import view_management_screens
from AccessControl.Role import RoleManager
-from operator import truth
-import Acquisition, sys, types, mimetools
-import OFS.SimpleItem, re, quopri, rfc822
-from cStringIO import StringIO
-from AccessControl import ClassSecurityInfo
-from AccessControl.Permissions import view_management_screens, \
- use_mailhost_services
+from Globals import Persistent, DTMLFile, InitializeClass
from DateTime import DateTime
+from zope.interface import implements
-class MailHostError( Exception ):
+from interfaces import IMailHost
+
+
+class MailHostError(Exception):
+
pass
+
manage_addMailHostForm=DTMLFile('dtml/addMailHost_form', globals())
def manage_addMailHost( self, id, title='', smtp_host='localhost'
, localhost='localhost', smtp_port=25
@@ -42,8 +52,13 @@
add = manage_addMailHost
+
class MailBase(Acquisition.Implicit, OFS.SimpleItem.Item, RoleManager):
+
'a mailhost...?'
+
+ implements(IMailHost)
+
meta_type='Mail Host'
manage=manage_main=DTMLFile('dtml/manageMailHost', globals())
manage_main._setName('manage_main')
@@ -81,8 +96,7 @@
self.smtp_host=smtp_host
self.smtp_port=smtp_port
-
- security.declareProtected( 'Change configuration', 'manage_makeChanges' )
+ security.declareProtected(change_configuration, 'manage_makeChanges')
def manage_makeChanges(self,title,smtp_host,smtp_port,smtp_uid='',smtp_pwd='', REQUEST=None):
'make the changes'
@@ -102,8 +116,7 @@
, manage_tabs_message=msg
)
-
- security.declareProtected( use_mailhost_services, 'sendTemplate' )
+ security.declareProtected(use_mailhost_services, 'sendTemplate')
def sendTemplate(trueself, self, messageTemplate,
statusTemplate=None, mto=None, mfrom=None,
encode=None, REQUEST=None):
@@ -122,8 +135,7 @@
except:
return "SEND OK"
-
- security.declareProtected( use_mailhost_services, 'send' )
+ security.declareProtected(use_mailhost_services, 'send')
def send(self, messageText, mto=None, mfrom=None, subject=None,
encode=None):
@@ -131,21 +143,19 @@
messageText = _encode(messageText, encode)
self._send(mfrom, mto, messageText)
-
# This is here for backwards compatibility only. Possibly it could
# be used to send messages at a scheduled future time, or via a mail queue?
- security.declareProtected( use_mailhost_services, 'scheduledSend' )
+ security.declareProtected(use_mailhost_services, 'scheduledSend')
scheduledSend = send
- security.declareProtected( use_mailhost_services, 'simple_send' )
+ security.declareProtected(use_mailhost_services, 'simple_send')
def simple_send(self, mto, mfrom, subject, body):
body="From: %s\nTo: %s\nSubject: %s\n\n%s" % (
mfrom, mto, subject, body)
self._send( mfrom, mto, body )
-
- security.declarePrivate( '_send' )
+ security.declarePrivate('_send')
def _send( self, mfrom, mto, messageText ):
""" Send the message """
smtpserver = SMTP(self.smtp_host, int(self.smtp_port) )
@@ -154,12 +164,14 @@
smtpserver.sendmail( mfrom, mto, messageText )
smtpserver.quit()
+InitializeClass(MailBase)
-InitializeClass( MailBase )
class MailHost(Persistent, MailBase):
+
"persistent version"
+
def _encode(body, encode=None):
if encode is None:
return body
@@ -191,7 +203,7 @@
mo['Subject'] = '[No Subject]'
if mto:
- if isinstance(mto, types.StringType):
+ if isinstance(mto, basestring):
mto = [rfc822.dump_address_pair(addr) for addr in rfc822.AddressList(mto) ]
if not mo.getheader('To'):
mo['To'] = ','.join(mto)
Property changes on: Zope/branches/Zope-2_8-branch/lib/python/Products/MailHost/MailHost.py
___________________________________________________________________
Name: cvs2svn:cvs-rev
- 1.83
Copied: Zope/branches/Zope-2_8-branch/lib/python/Products/MailHost/interfaces.py (from rev 38739, Zope/trunk/lib/python/Products/MailHost/interfaces.py)
Modified: Zope/branches/Zope-2_8-branch/lib/python/Products/MailHost/tests/testMailHost.py
===================================================================
--- Zope/branches/Zope-2_8-branch/lib/python/Products/MailHost/tests/testMailHost.py 2005-10-04 14:25:03 UTC (rev 38740)
+++ Zope/branches/Zope-2_8-branch/lib/python/Products/MailHost/tests/testMailHost.py 2005-10-04 14:43:25 UTC (rev 38741)
@@ -1,11 +1,38 @@
-import os, sys, unittest
+##############################################################################
+#
+# Copyright (c) 2002 Zope Corporation and Contributors. All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""MailHost unit tests.
-import string, cStringIO, re
-import ZODB, Acquisition
+$Id$
+"""
+
+import unittest
+
from Products.MailHost.MailHost import MailHostError, _mungeHeaders
-class TestMailHost( unittest.TestCase ):
+class TestMailHost(unittest.TestCase):
+
+ def _getTargetClass(self):
+ from Products.MailHost.MailHost import MailHost
+
+ return MailHost
+
+ def test_z3interfaces(self):
+ from Products.MailHost.interfaces import IMailHost
+ from zope.interface.verify import verifyClass
+
+ verifyClass(IMailHost, self._getTargetClass())
+
def testAllHeaders( self ):
msg = """To: recipient at domain.com
From: sender at domain.com
@@ -18,12 +45,14 @@
self.failUnless(resfrom == 'sender at domain.com' )
# Add duplicated info
- resmsg, resto, resfrom = _mungeHeaders( msg, 'recipient at domain.com', 'sender at domain.com', 'This is the subject' )
+ resmsg, resto, resfrom = _mungeHeaders(msg, 'recipient at domain.com',
+ 'sender at domain.com', 'This is the subject' )
self.failUnless(resto == ['recipient at domain.com'])
self.failUnless(resfrom == 'sender at domain.com' )
# Add extra info
- resmsg, resto, resfrom = _mungeHeaders( msg, 'recipient2 at domain.com', 'sender2 at domain.com', 'This is the real subject' )
+ resmsg, resto, resfrom = _mungeHeaders(msg, 'recipient2 at domain.com',
+ 'sender2 at domain.com', 'This is the real subject' )
self.failUnless(resto == ['recipient2 at domain.com'])
self.failUnless(resfrom == 'sender2 at domain.com' )
@@ -32,18 +61,23 @@
This is the message body."""
# Doesn't specify to
- self.failUnlessRaises( MailHostError, _mungeHeaders, msg, mfrom='sender at domain.com' )
+ self.failUnlessRaises(MailHostError, _mungeHeaders, msg,
+ mfrom='sender at domain.com')
# Doesn't specify from
- self.failUnlessRaises( MailHostError, _mungeHeaders, msg, mto='recipient at domain.com' )
+ self.failUnlessRaises(MailHostError, _mungeHeaders, msg,
+ mto='recipient at domain.com')
def testNoHeaders( self ):
msg = """This is the message body."""
# Doesn't specify to
- self.failUnlessRaises( MailHostError, _mungeHeaders, msg, mfrom='sender at domain.com' )
+ self.failUnlessRaises(MailHostError, _mungeHeaders, msg,
+ mfrom='sender at domain.com')
# Doesn't specify from
- self.failUnlessRaises( MailHostError, _mungeHeaders, msg, mto='recipient at domain.com' )
+ self.failUnlessRaises(MailHostError, _mungeHeaders, msg,
+ mto='recipient at domain.com')
# Specify all
- resmsg, resto, resfrom = _mungeHeaders( msg, 'recipient2 at domain.com', 'sender2 at domain.com', 'This is the real subject' )
+ resmsg, resto, resfrom = _mungeHeaders(msg, 'recipient2 at domain.com',
+ 'sender2 at domain.com', 'This is the real subject')
self.failUnless(resto == ['recipient2 at domain.com'])
self.failUnless(resfrom == 'sender2 at domain.com' )
@@ -66,23 +100,24 @@
# Test Address-Parser for To & CC given in messageText
resmsg, resto, resfrom = _mungeHeaders( msg )
- self.failUnless(resto == ['"Name, Nick" <recipient at domain.com>','"Foo Bar" <foo at domain.com>','"Web, Jack" <jack at web.com>'])
+ self.failUnless(resto == ['"Name, Nick" <recipient at domain.com>',
+ '"Foo Bar" <foo at domain.com>',
+ '"Web, Jack" <jack at web.com>'])
self.failUnless(resfrom == 'sender at domain.com' )
# Test Address-Parser for a given mto-string
- resmsg, resto, resfrom = _mungeHeaders( msg, mto= '"Public, Joe" <pjoe at domain.com>, "Foo Bar" <foo at domain.com>')
+ resmsg, resto, resfrom = _mungeHeaders(msg, mto= '"Public, Joe" <pjoe at domain.com>, "Foo Bar" <foo at domain.com>')
- self.failUnless(resto == ['"Public, Joe" <pjoe at domain.com>','"Foo Bar" <foo at domain.com>'])
+ self.failUnless(resto == ['"Public, Joe" <pjoe at domain.com>',
+ '"Foo Bar" <foo at domain.com>'])
self.failUnless(resfrom == 'sender at domain.com' )
+
def test_suite():
suite = unittest.TestSuite()
suite.addTest( unittest.makeSuite( TestMailHost ) )
return suite
-def main():
- unittest.TextTestRunner().run(test_suite())
-
if __name__ == '__main__':
- main()
+ unittest.main(defaultTest='test_suite')
Property changes on: Zope/branches/Zope-2_8-branch/lib/python/Products/MailHost/tests/testMailHost.py
___________________________________________________________________
Name: cvs2svn:cvs-rev
- 1.5
Name: svn:keywords
+ Id
Modified: Zope/branches/Zope-2_8-branch/lib/python/Products/PluginIndexes/common/PluggableIndex.py
===================================================================
--- Zope/branches/Zope-2_8-branch/lib/python/Products/PluginIndexes/common/PluggableIndex.py 2005-10-04 14:25:03 UTC (rev 38740)
+++ Zope/branches/Zope-2_8-branch/lib/python/Products/PluginIndexes/common/PluggableIndex.py 2005-10-04 14:43:25 UTC (rev 38741)
@@ -7,94 +7,28 @@
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE
+# FOR A PARTICULAR PURPOSE.
#
##############################################################################
+"""Pluggable Index interfaces.
-"""Pluggable Index Interface"""
-__version__='$Revision: 1.9 $'[11:-2]
+$Id$
+"""
-import Interface
-class PluggableIndexInterface(Interface.Base):
+# create PluggableIndexInterface, UniqueValueIndex, SortIndex
+from Interface.bridge import createZope3Bridge
+from Products.PluginIndexes.interfaces import IPluggableIndex
+from Products.PluginIndexes.interfaces import ISortIndex
+from Products.PluginIndexes.interfaces import IUniqueValueIndex
+import PluggableIndex
- def getId():
- """Return Id of index."""
+createZope3Bridge(IPluggableIndex, PluggableIndex, 'PluggableIndexInterface')
+createZope3Bridge(ISortIndex, PluggableIndex, 'SortIndex')
+createZope3Bridge(IUniqueValueIndex, PluggableIndex, 'UniqueValueIndex')
- def getEntryForObject(documentId, default=None):
- """Get all information contained for 'documentId'."""
-
- def getIndexSourceNames():
- """ return a sequence of attribute names that are indexed
- by the index.
- """
-
- def index_object(documentId, obj, threshold=None):
- """Index an object.
-
- 'documentId' is the integer ID of the document.
- 'obj' is the object to be indexed.
- 'threshold' is the number of words to process between committing
- subtransactions. If None, subtransactions are disabled.
- """
-
- def unindex_object(documentId):
- """Remove the documentId from the index."""
-
- def _apply_index(request, cid=''):
- """Apply the index to query parameters given in 'request'.
-
- The argument should be a mapping object.
-
- If the request does not contain the needed parametrs, then
- None is returned.
-
- If the request contains a parameter with the name of the column
- + "_usage", it is sniffed for information on how to handle applying
- the index. (Note: this style or parameters is deprecated)
-
- If the request contains a parameter with the name of the
- column and this parameter is either a Record or a class
- instance then it is assumed that the parameters of this index
- are passed as attribute (Note: this is the recommended way to
- pass parameters since Zope 2.4)
-
- Otherwise two objects are returned. The first object is a
- ResultSet containing the record numbers of the matching
- records. The second object is a tuple containing the names of
- all data fields used.
- """
-
- def numObjects():
- """Return the number of indexed objects"""
-
- def indexSize():
- """Return the size of the index in terms of distinct values"""
-
- def clear():
- """Empty the index"""
-
-class UniqueValueIndex(PluggableIndexInterface):
- """An index which can return lists of unique values contained in it"""
-
- def hasUniqueValuesFor(name):
- """Return true if the index can return the unique values for name"""
-
- def uniqueValues(name=None, withLengths=0):
- """Return the unique values for name.
-
- If 'withLengths' is true, returns a sequence of tuples of
- (value, length)."""
-
-class SortIndex(PluggableIndexInterface):
- """An index which may be used to sort a set of document ids"""
-
- def keyForDocument(documentId):
- """Return the sort key that cooresponds to the specified document id
-
- This method is no longer used by ZCatalog, but is left for backwards
- compatibility."""
-
- def documentToKeyMap():
- """Return an object that supports __getitem__ and may be used to quickly
- lookup the sort key given a document id"""
+del createZope3Bridge
+del IPluggableIndex
+del ISortIndex
+del IUniqueValueIndex
+del PluggableIndex
Property changes on: Zope/branches/Zope-2_8-branch/lib/python/Products/PluginIndexes/common/PluggableIndex.py
___________________________________________________________________
Name: cvs2svn:cvs-rev
- 1.9
Name: svn:keywords
+ Id
Modified: Zope/branches/Zope-2_8-branch/lib/python/Products/PluginIndexes/interfaces.py
===================================================================
--- Zope/branches/Zope-2_8-branch/lib/python/Products/PluginIndexes/interfaces.py 2005-10-04 14:25:03 UTC (rev 38740)
+++ Zope/branches/Zope-2_8-branch/lib/python/Products/PluginIndexes/interfaces.py 2005-10-04 14:43:25 UTC (rev 38741)
@@ -19,8 +19,6 @@
from zope.schema import Bool
-# XXX: copied from common.PluggableIndex.PluggableIndexInterface;
-# should be bridged
class IPluggableIndex(Interface):
def getId():
@@ -30,8 +28,7 @@
"""Get all information contained for 'documentId'."""
def getIndexSourceNames():
- """ return a sequence of attribute names that are indexed
- by the index.
+ """Get a sequence of attribute names that are indexed by the index.
"""
def index_object(documentId, obj, threshold=None):
@@ -69,26 +66,24 @@
records. The second object is a tuple containing the names of
all data fields used.
"""
-
+
def numObjects():
"""Return the number of indexed objects"""
-# XXX: this is currently broken
+# XXX: not implemented by TextIndex and TopicIndex
# def indexSize():
# """Return the size of the index in terms of distinct values"""
-
+
def clear():
"""Empty the index"""
-# XXX: copied from from common.PluggableIndex.UniqueValueIndex;
-# should be bridged
class IUniqueValueIndex(IPluggableIndex):
"""An index which can return lists of unique values contained in it"""
-
+
def hasUniqueValuesFor(name):
"""Return true if the index can return the unique values for name"""
-
+
def uniqueValues(name=None, withLengths=0):
"""Return the unique values for name.
@@ -96,17 +91,15 @@
(value, length)."""
-# XXX: copied from from common.PluggableIndex.SortIndex;
-# should be bridged
class ISortIndex(IPluggableIndex):
"""An index which may be used to sort a set of document ids"""
-
+
def keyForDocument(documentId):
"""Return the sort key that cooresponds to the specified document id
-
- This method is no longer used by ZCatalog, but is left for backwards
+
+ This method is no longer used by ZCatalog, but is left for backwards
compatibility."""
-
+
def documentToKeyMap():
"""Return an object that supports __getitem__ and may be used to quickly
lookup the sort key given a document id"""
Modified: Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/IZCatalog.py
===================================================================
--- Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/IZCatalog.py 2005-10-04 14:25:03 UTC (rev 38740)
+++ Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/IZCatalog.py 2005-10-04 14:43:25 UTC (rev 38741)
@@ -1,7 +1,6 @@
##############################################################################
#
-# Copyright (c) 2002 Zope Corporation and Contributors.
-# All Rights Reserved.
+# Copyright (c) 2002 Zope Corporation and Contributors. All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
@@ -15,238 +14,13 @@
$Id$
"""
-from Interface import Interface
-class IZCatalog(Interface):
- """ZCatalog object
+# create IZCatalog
+from Interface.bridge import createZope3Bridge
+from interfaces import IZCatalog as z3IZCatalog
+import IZCatalog
- A ZCatalog contains arbitrary index like references to Zope
- objects. ZCatalog's can index object attribute using a variety
- of "plug-in" index types.
+createZope3Bridge(z3IZCatalog, IZCatalog, 'IZCatalog')
- Several index types are included, and others may be added.
-
- Text -- Text indexes index textual content. The index can be
- used to search for objects containing certain words.
-
- Field -- Field indexes index atomic values. The index can be
- used to search for objects that have certain properties.
-
- Keyword -- Keyword indexes index sequences of values. The index
- can be used to search for objects that match one or more of the
- search terms.
-
- Path -- Path indexes index URI paths. They allow you to find objects
- based on their placement in a hierarchy.
-
- Date -- Date indexes index date and type data. They are a type of field
- index specifically optimized for indexing dates.
-
- Date Range -- Date range indexes index time intervals. They are designed
- for efficient searching of dates falling between two boundaries
- (such as effective / expiration dates).
-
- Topic -- Topic indexes store prefiltered sets of documents. They are used
- to optimize complex queries into a single fast query by prefiltering
- documents by an expression
-
- The ZCatalog can maintain a table of extra data about cataloged
- objects. This information can be used on search result pages to
- show information about a search result.
-
- The meta-data table schema is used to build the schema for
- ZCatalog Result objects. The objects have the same attributes
- as the column of the meta-data table.
-
- ZCatalog does not store references to the objects themselves, but
- rather to a unique identifier that defines how to get to the
- object. In Zope, this unique identifier is the object's relative
- path to the ZCatalog (since two Zope objects cannot have the same
- URL, this is an excellent unique qualifier in Zope).
-
- """
-
- def catalog_object(obj, uid, idxs=None, update_metadata=1):
- """Catalogs the object 'obj' with the unique identifier 'uid'.
-
- The uid must be a physical path, either absolute or relative to
- the catalog.
-
- If provided, idxs specifies the names of indexes to update.
-
- If update_metadata is specified (the default), the object's metadata
- is updated. If it is not, the metadata is left untouched. This
- flag has no effect if the object is not yet cataloged (metadata
- is always added for new objects).
- """
-
- def uncatalog_object(uid):
- """Uncatalogs the object with the unique identifier 'uid'.
-
- The uid must be a physical path, either absolute or relative to
- the catalog.
- """
-
- def uniqueValuesFor(name):
- """returns the unique values for a given FieldIndex named 'name'.
- """
-
- def getpath(rid):
- """Return the path to a cataloged object given a 'data_record_id_'
- """
-
- def getrid(rid):
- """Return the 'data_record_id_' to a cataloged object given a path
- """
-
- def getobject(rid, REQUEST=None):
- """Return a cataloged object given a 'data_record_id_'
- """
-
- def schema():
- """Get the meta-data schema
-
- Returns a sequence of names that correspond to columns in the
- meta-data table.
-
- """
-
- def indexes():
- """Returns a sequence of names that correspond to indexes.
- """
-
- def index_objects():
- """Returns a sequence of actual index objects.
-
- NOTE: This returns unwrapped indexes! You should probably use
- getIndexObjects instead. Some indexes expect to be wrapped.
- """
-
- def getIndexObjects():
- """Returns a list of acquisition wrapped index objects
- """
-
- def searchResults(REQUEST=None, **kw):
- """Search the catalog.
-
- Search terms can be passed in the REQUEST or as keyword
- arguments.
-
- Search queries consist of a mapping of index names to search
- parameters. You can either pass a mapping to searchResults as
- the variable 'REQUEST' or you can use index names and search
- parameters as keyword arguments to the method, in other words::
-
- searchResults(title='Elvis Exposed',
- author='The Great Elvonso')
-
- is the same as::
-
- searchResults({'title' : 'Elvis Exposed',
- 'author : 'The Great Elvonso'})
-
- In these examples, 'title' and 'author' are indexes. This
- query will return any objects that have the title *Elvis
- Exposed* AND also are authored by *The Great Elvonso*. Terms
- that are passed as keys and values in a searchResults() call
- are implicitly ANDed together. To OR two search results, call
- searchResults() twice and add concatenate the results like this::
-
- results = ( searchResults(title='Elvis Exposed') +
- searchResults(author='The Great Elvonso') )
-
- This will return all objects that have the specified title OR
- the specified author.
-
- There are some special index names you can pass to change the
- behavior of the search query:
-
- sort_on -- This parameters specifies which index to sort the
- results on.
-
- sort_order -- You can specify 'reverse' or 'descending'.
- Default behavior is to sort ascending.
-
- sort_limit -- An optimization hint to tell the catalog how many
- results you are really interested in. See the limit argument
- to the search method for more details.
-
- There are some rules to consider when querying this method:
-
- - an empty query mapping (or a bogus REQUEST) returns all
- items in the catalog.
-
- - results from a query involving only field/keyword
- indexes, e.g. {'id':'foo'} and no 'sort_on' will be
- returned unsorted.
-
- - results from a complex query involving a field/keyword
- index *and* a text index,
- e.g. {'id':'foo','PrincipiaSearchSource':'bar'} and no
- 'sort_on' will be returned unsorted.
-
- - results from a simple text index query
- e.g.{'PrincipiaSearchSource':'foo'} will be returned
- sorted in descending order by 'score'. A text index
- cannot beused as a 'sort_on' parameter, and attempting
- to do so will raise an error.
-
- Depending on the type of index you are querying, you may be
- able to provide more advanced search parameters that can
- specify range searches or wildcards. These features are
- documented in The Zope Book.
-
- """
-
- def __call__(REQUEST=None, **kw):
- """Search the catalog, the same way as 'searchResults'.
- """
-
- def search(query_request, sort_index=None, reverse=0, limit=None, merge=1):
- """Programmatic search interface, use for searching the catalog from
- scripts.
-
- query_request -- Dictionary containing catalog query. This uses the
- same format as searchResults.
-
- sort_index -- Name of sort index
-
- reverse -- Boolean, reverse sort order (defaults to false)
-
- limit -- Limit sorted result count to the n best records. This is an
- optimization hint used in conjunction with a sort_index. If possible
- ZCatalog will use a different sort algorithm that uses much less memory
- and scales better then a full sort. The actual number of records
- returned is not guaranteed to be <= limit. You still need to apply the
- same batching to the results. Since the len() of the results will no
- longer be the actual result count, you can use the
- "actual_result_count" attribute of the lazy result object instead to
- determine the size of the full result set.
-
- merge -- Return merged, lazy results (like searchResults) or raw
- results for later merging. This can be used to perform multiple
- queries (even across catalogs) and merge and sort the combined results.
- """
-
- def refreshCatalog(clear=0, pghandler=None):
- """Reindex every object we can find, removing the unreachable
- ones from the index.
-
- clear -- values: 1|0 clear the catalog before reindexing
-
- pghandler -- optional Progresshandler as defined in ProgressHandler.py
- (see also README.txt)
- """
-
- def reindexIndex(name, REQUEST, pghandler=None):
- """Reindex a single index.
-
- name -- id of index
-
- REQUEST -- REQUEST object
-
- pghandler -- optional Progresshandler as defined in ProgressHandler.py
- (see also README.txt)
- """
-
-__doc__ = IZCatalog.__doc__ + __doc__
+del createZope3Bridge
+del z3IZCatalog
Property changes on: Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/IZCatalog.py
___________________________________________________________________
Name: cvs2svn:cvs-rev
- 1.7
Modified: Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ProgressHandler.py
===================================================================
--- Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ProgressHandler.py 2005-10-04 14:25:03 UTC (rev 38740)
+++ Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ProgressHandler.py 2005-10-04 14:43:25 UTC (rev 38741)
@@ -7,12 +7,11 @@
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE
+# FOR A PARTICULAR PURPOSE.
#
##############################################################################
-
"""
-$Id: ZCatalog.py 25050 2004-05-27 15:06:40Z chrisw $
+$Id$
"""
import time, sys
@@ -95,6 +94,7 @@
def output(self, text):
LOG(self._ident, INFO, text)
+
class FilelogHandler(StdoutHandler):
""" Use a custom file for logging """
@@ -106,6 +106,3 @@
def output(self, text):
open(self.filename, 'a').write(text + '\n')
-
-
-
Property changes on: Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ProgressHandler.py
___________________________________________________________________
Name: svn:keywords
- svn:eol-style
+ Id
Name: svn:eol-style
+ native
Modified: Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ZCatalogIndexes.py
===================================================================
--- Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ZCatalogIndexes.py 2005-10-04 14:25:03 UTC (rev 38740)
+++ Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ZCatalogIndexes.py 2005-10-04 14:43:25 UTC (rev 38741)
@@ -7,33 +7,37 @@
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE
+# FOR A PARTICULAR PURPOSE.
#
##############################################################################
+"""Virtual container for ZCatalog indexes.
-"""$Id$
+$Id$
"""
-
from Acquisition import Implicit
from Persistence import Persistent
from Globals import DTMLFile, InitializeClass
from AccessControl.SecurityInfo import ClassSecurityInfo
from AccessControl.Permissions import manage_zcatalog_indexes
from OFS.Folder import Folder
+from OFS.ObjectManager import IFAwareObjectManager
from OFS.SimpleItem import SimpleItem
-from OFS.ObjectManager import IFAwareObjectManager
+from Products.PluginIndexes.common.PluggableIndex \
+ import PluggableIndexInterface
+from Products.PluginIndexes.interfaces import IPluggableIndex
-from Products.PluginIndexes.common.PluggableIndex import PluggableIndexInterface
_marker = []
-class ZCatalogIndexes (IFAwareObjectManager, Folder, Persistent, Implicit):
+
+class ZCatalogIndexes(IFAwareObjectManager, Folder, Persistent, Implicit):
+
"""A mapping object, responding to getattr requests by looking up
the requested indexes in an object manager."""
# The interfaces we want to show up in our object manager
- _product_interfaces = (PluggableIndexInterface, )
+ _product_interfaces = (PluggableIndexInterface, IPluggableIndex)
meta_type = "ZCatalogIndex"
manage_options = ()
@@ -113,6 +117,7 @@
InitializeClass(ZCatalogIndexes)
+
class OldCatalogWrapperObject(SimpleItem, Implicit):
manage_options= (
Property changes on: Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/ZCatalogIndexes.py
___________________________________________________________________
Name: cvs2svn:cvs-rev
- 1.9
Modified: Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/interfaces.py
===================================================================
--- Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/interfaces.py 2005-10-04 14:25:03 UTC (rev 38740)
+++ Zope/branches/Zope-2_8-branch/lib/python/Products/ZCatalog/interfaces.py 2005-10-04 14:43:25 UTC (rev 38741)
@@ -18,8 +18,6 @@
from zope.interface import Interface
-# XXX: copied from IZCatalog.IZCatalog;
-# should be bridged
class IZCatalog(Interface):
"""ZCatalog object
@@ -66,7 +64,6 @@
object. In Zope, this unique identifier is the object's relative
path to the ZCatalog (since two Zope objects cannot have the same
URL, this is an excellent unique qualifier in Zope).
-
"""
def catalog_object(obj, uid, idxs=None, update_metadata=1):
@@ -111,7 +108,6 @@
Returns a sequence of names that correspond to columns in the
meta-data table.
-
"""
def indexes():
@@ -198,7 +194,6 @@
able to provide more advanced search parameters that can
specify range searches or wildcards. These features are
documented in The Zope Book.
-
"""
def __call__(REQUEST=None, **kw):
More information about the Zope-Checkins
mailing list