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: [EMAIL PROTECTED] From: [EMAIL PROTECTED] @@ -18,12 +45,14 @@ self.failUnless(resfrom == '[EMAIL PROTECTED]' ) # Add duplicated info - resmsg, resto, resfrom = _mungeHeaders( msg, '[EMAIL PROTECTED]', '[EMAIL PROTECTED]', 'This is the subject' ) + resmsg, resto, resfrom = _mungeHeaders(msg, '[EMAIL PROTECTED]', + '[EMAIL PROTECTED]', 'This is the subject' ) self.failUnless(resto == ['[EMAIL PROTECTED]']) self.failUnless(resfrom == '[EMAIL PROTECTED]' ) # Add extra info - resmsg, resto, resfrom = _mungeHeaders( msg, '[EMAIL PROTECTED]', '[EMAIL PROTECTED]', 'This is the real subject' ) + resmsg, resto, resfrom = _mungeHeaders(msg, '[EMAIL PROTECTED]', + '[EMAIL PROTECTED]', 'This is the real subject' ) self.failUnless(resto == ['[EMAIL PROTECTED]']) self.failUnless(resfrom == '[EMAIL PROTECTED]' ) @@ -32,18 +61,23 @@ This is the message body.""" # Doesn't specify to - self.failUnlessRaises( MailHostError, _mungeHeaders, msg, mfrom='[EMAIL PROTECTED]' ) + self.failUnlessRaises(MailHostError, _mungeHeaders, msg, + mfrom='[EMAIL PROTECTED]') # Doesn't specify from - self.failUnlessRaises( MailHostError, _mungeHeaders, msg, mto='[EMAIL PROTECTED]' ) + self.failUnlessRaises(MailHostError, _mungeHeaders, msg, + mto='[EMAIL PROTECTED]') def testNoHeaders( self ): msg = """This is the message body.""" # Doesn't specify to - self.failUnlessRaises( MailHostError, _mungeHeaders, msg, mfrom='[EMAIL PROTECTED]' ) + self.failUnlessRaises(MailHostError, _mungeHeaders, msg, + mfrom='[EMAIL PROTECTED]') # Doesn't specify from - self.failUnlessRaises( MailHostError, _mungeHeaders, msg, mto='[EMAIL PROTECTED]' ) + self.failUnlessRaises(MailHostError, _mungeHeaders, msg, + mto='[EMAIL PROTECTED]') # Specify all - resmsg, resto, resfrom = _mungeHeaders( msg, '[EMAIL PROTECTED]', '[EMAIL PROTECTED]', 'This is the real subject' ) + resmsg, resto, resfrom = _mungeHeaders(msg, '[EMAIL PROTECTED]', + '[EMAIL PROTECTED]', 'This is the real subject') self.failUnless(resto == ['[EMAIL PROTECTED]']) self.failUnless(resfrom == '[EMAIL PROTECTED]' ) @@ -66,23 +100,24 @@ # Test Address-Parser for To & CC given in messageText resmsg, resto, resfrom = _mungeHeaders( msg ) - self.failUnless(resto == ['"Name, Nick" <[EMAIL PROTECTED]>','"Foo Bar" <[EMAIL PROTECTED]>','"Web, Jack" <[EMAIL PROTECTED]>']) + self.failUnless(resto == ['"Name, Nick" <[EMAIL PROTECTED]>', + '"Foo Bar" <[EMAIL PROTECTED]>', + '"Web, Jack" <[EMAIL PROTECTED]>']) self.failUnless(resfrom == '[EMAIL PROTECTED]' ) # Test Address-Parser for a given mto-string - resmsg, resto, resfrom = _mungeHeaders( msg, mto= '"Public, Joe" <[EMAIL PROTECTED]>, "Foo Bar" <[EMAIL PROTECTED]>') + resmsg, resto, resfrom = _mungeHeaders(msg, mto= '"Public, Joe" <[EMAIL PROTECTED]>, "Foo Bar" <[EMAIL PROTECTED]>') - self.failUnless(resto == ['"Public, Joe" <[EMAIL PROTECTED]>','"Foo Bar" <[EMAIL PROTECTED]>']) + self.failUnless(resto == ['"Public, Joe" <[EMAIL PROTECTED]>', + '"Foo Bar" <[EMAIL PROTECTED]>']) self.failUnless(resfrom == '[EMAIL PROTECTED]' ) + 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): _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins