--- 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