ztfy/utils/catalog.py
changeset 42 cb2a0e2d3bbf
parent 41 da1558b96f0a
child 43 beb799c08f57
--- a/ztfy/utils/catalog.py	Tue Mar 16 01:29:17 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,160 +0,0 @@
-### -*- coding: utf-8 -*- ####################################################
-##############################################################################
-#
-# Copyright (c) 2008-2009 Thierry Florac <tflorac AT ulthar.net>
-# 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.
-#
-##############################################################################
-
-__docformat__ = "restructuredtext"
-
-# import standard packages
-
-# import Zope3 interfaces
-from zope.annotation.interfaces import IAnnotations
-from zope.app.catalog.interfaces import ICatalog
-from zope.app.container.interfaces import IContainer
-from zope.app.file.interfaces import IFile
-from zope.app.intid.interfaces import IIntIds
-
-# import local interfaces
-
-# import Zope3 packages
-from zope.app import zapi
-
-# import local packages
-import request as request_utils
-
-from ztfy.utils import _
-
-
-#
-# IntIds utility functions
-#
-
-def getIntIdUtility(name='', request=None, context=None):
-    """Look for a named IIntIds utility"""
-    if request is None:
-        request = request_utils.getRequest()
-    intids = request_utils.getRequestData('IntIdsUtility::' + name, request)
-    if intids is None:
-        intids = zapi.queryUtility(IIntIds, name, context=context)
-        if intids is not None:
-            request_utils.setRequestData('IntIdsUtility::' + name, intids, request)
-    return intids
-
-
-def getObjectId(object, intids_name='', request=None, context=None):
-    """Look for an object Id as recorded by given IIntIds utility"""
-    if request is None:
-        request = request_utils.getRequest()
-    intids = getIntIdUtility(intids_name, request, context)
-    if intids is not None:
-        return intids.queryId(object)
-    return None
-
-
-def getObject(id, intids_name='', request=None, context=None):
-    """Look for an object recorded by given IIntIds utility and id"""
-    if request is None:
-        request = request_utils.getRequest()
-    intids = getIntIdUtility(intids_name, request, context)
-    if intids is not None:
-        return intids.queryObject(id)
-    return None
-
-
-#
-# Catalog utility functions
-#
-
-def queryCatalog(name='', context=None):
-    """Look for a registered catalog"""
-    return zapi.queryUtility(ICatalog, name, context=context)
-
-
-def indexObject(object, catalog_name='', index_name='', request=None, context=None):
-    """Index object into a registered catalog"""
-    if request is None:
-        request = request_utils.getRequest()
-    intids = getIntIdUtility('', request, context)
-    if intids is not None:
-        if ICatalog.providedBy(catalog_name):
-            catalog = catalog_name
-        else:
-            catalog = queryCatalog(catalog_name, context)
-        if catalog is not None:
-            id = intids.register(object)
-            if index_name:
-                catalog[index_name].index_doc(id, object)
-            else:
-                catalog.index_doc(id, object)
-            return True
-    return False
-
-
-def unindexObject(object, catalog_name='', index_name='', request=None, context=None):
-    """Remove object from a registered catalog"""
-    if request is None:
-        request = request_utils.getRequest()
-    id = getObjectId(object, '', request, context)
-    if id is not None:
-        if ICatalog.providedBy(catalog_name):
-            catalog = catalog_name
-        else:
-            catalog = queryCatalog(catalog_name, context)
-        if catalog is not None:
-            if index_name:
-                catalog[index_name].unindex_doc(id)
-            else:
-                catalog.unindex_doc(id)
-            return True
-    return False
-
-
-def _indexObject(object, intids, catalogs):
-    """Index object data into given set of catalogs"""
-    id = intids.register(object)
-    for catalog in catalogs:
-        catalog.index_doc(id, object)
-
-def _indexObjectValues(object, intids, catalogs):
-    """Index object values into given set of catalogs"""
-    container = IContainer(object, None)
-    if container is not None:
-        for subobject in container.values():
-            _indexAllObject(subobject, intids, catalogs)
-
-def _indexObjectAnnotations(object, intids, catalogs):
-    """Index object annotations into given set of catalogs"""
-    annotations = IAnnotations(object, None)
-    if annotations is not None:
-        keys = annotations.keys()
-        for key in keys:
-            _indexAllObject(annotations[key], intids, catalogs)
-            file = IFile(annotations[key], None)
-            if file is not None:
-                _indexObject(file, intids, catalogs)
-
-def _indexAllObject(object, intids, catalogs):
-    """Index object, object values and annotations into given set of catalogs"""
-    _indexObject(object, intids, catalogs)
-    _indexObjectValues(object, intids, catalogs)
-    _indexObjectAnnotations(object, intids, catalogs)
-
-def indexAllObjectValues(object, context=None):
-    """Reindex a whole container properties and contents (including annotations) into site's catalogs"""
-    if context is None:
-        context = object
-    intids = zapi.queryUtility(IIntIds, context=context)
-    if intids is not None:
-        catalogs = zapi.getAllUtilitiesRegisteredFor(ICatalog, context)
-        if catalogs:
-            _indexAllObject(object, intids, catalogs)