src/pyams_content/site.py
changeset 93 89ac3216c5dd
parent 0 7c0001cacf8e
child 94 db2826d440df
--- a/src/pyams_content/site.py	Tue Jun 27 11:49:01 2017 +0200
+++ b/src/pyams_content/site.py	Tue Jun 27 11:49:38 2017 +0200
@@ -14,15 +14,19 @@
 
 
 # import standard library
+import transaction
 
 # import interfaces
+from hypatia.interfaces import ICatalog
+from pyams_content.shared.common.interfaces import IWfSharedContent
 from pyams_utils.interfaces.site import ISiteGenerations
 from zope.intid.interfaces import IIntIds
 from zope.site.interfaces import INewLocalSite
 
 # import packages
-from pyams_utils.registry import utility_config
-from pyams_utils.site import check_required_utilities
+from pyams_utils.container import find_objects_providing
+from pyams_utils.registry import utility_config, set_local_registry, get_utility
+from pyams_utils.site import check_required_utilities, site_factory
 from pyramid.events import subscriber
 from zope.intid import IntIds
 
@@ -46,3 +50,20 @@
     def evolve(self, site, current=None):
         """Check for required utilities"""
         check_required_utilities(site, REQUIRED_UTILITIES)
+
+
+def site_index(request):
+    """Index all site contents in internal catalog"""
+    application = site_factory(request)
+    if application is not None:
+        try:
+            set_local_registry(application.getSiteManager())
+            catalog = get_utility(ICatalog)
+            intids = get_utility(IIntIds)
+            for document in find_objects_providing(application, IWfSharedContent):
+                print("Indexing: {0!r}".format(document))
+                catalog.index_doc(intids.register(document), document)
+        finally:
+            set_local_registry(None)
+        transaction.commit()
+    return application