[zopeorg-checkins] CVS: Products/CMFDateIndexes - RSCatalogTool.py:1.1 __init__.py:1.1

Martijn Pieters mj at zope.com
Mon Mar 11 14:03:01 EST 2002


Update of /cvs-zopeorg/Products/CMFDateIndexes
In directory cvs.zope.org:/tmp/cvs-serv4154

Added Files:
	RSCatalogTool.py __init__.py 
Log Message:
Split out CMF specific tools from DateIndexes package.



=== Added File Products/CMFDateIndexes/RSCatalogTool.py ===
from Products.CMFCore.CatalogTool import CatalogTool
from Products.CMFCore.utils import _getAuthenticatedUser, _checkPermission
from Products.CMFCore import CMFCorePermissions
from Products.ZCatalog.ZCatalog import ZCatalog

from DateTime.DateTime import DateTime


class RSCatalogTool( CatalogTool ):
    """
        Override CMFCore's catalog to use a DataRangeIndex for the
        always-and-everywhere effective range query
    """
    meta_type = 'RSCatalog'

    # inherited security assertions
    def enumerateIndexes( self ):
        #   Return a list of ( index_name, type ) pairs for the initial
        #   index set.
        return ( CatalogTool.enumerateIndexes( self )
               + ( ( 'effectiveRange', 'DateRangeIndex' )
                 ,
                 )
               )

    def _initIndexes( self ):

        CatalogTool._initIndexes( self )
        er_index = self._catalog.indexes[ 'effectiveRange' ]
        er_index._edit( since_field='effective', until_field='expires' )

    # inherited security assertions
    def searchResults(self, REQUEST=None, **kw):
        '''
            Calls ZCatalog.searchResults() with extra arguments that
            limit the results to what the user is allowed to see.
        '''
        if REQUEST is None:
            REQUEST = self.REQUEST
        user = _getAuthenticatedUser(self)
        kw['allowedRolesAndUsers'] = list(user.getRoles()) + \
                                     ['Anonymous',
                                      'user:'+user.getUserName()]
        if not _checkPermission(
            CMFCorePermissions.AccessInactivePortalContent, self ):
            kw[ 'effectiveRange' ] = DateTime()

        results = apply( ZCatalog.searchResults, ( self, REQUEST ), kw )
        return results

    __call__ = searchResults


=== Added File Products/CMFDateIndexes/__init__.py ===
import RSCatalogTool

import Products.CMFCore.utils

from Products.CMFDefault.DublinCore import DefaultDublinCoreImpl

tools = ( RSCatalogTool.RSCatalogTool
        ,
        )

def better_effective( true_self ):
    """
        Fix DublinCore element to return 'None' properly.
    """
    marker = []
    date = getattr( true_self, 'effective_date', marker )

    if type( date ) == type( '' ):
        try:
            date = DateTime( date )
        except:
            date = None

    if date is marker:
        date = getattr( true_self, 'creation_date', None )

    return date

def better_expires( true_self ):
    """
        Fix DublinCore element to return 'None' properly.
    """
    return getattr( true_self, 'expiration_date', None )


def initialize( context ):
    Products.CMFCore.utils.ToolInit( 'DateRangeIndex Tool'
                                   , tools=tools
                                   , product_name='DateIndexes'
                                   , icon='tool.gif'
                                   ).initialize( context )

    DefaultDublinCoreImpl.effective = better_effective
    DefaultDublinCoreImpl.expires = better_expires





More information about the zopeorg-checkins mailing list