Commit 437a197e authored by Ayush Tiwari's avatar Ayush Tiwari

multiple_catalog:[Workaround] ERP5SiteReindexAll should reindex in all catalog...

multiple_catalog:[Workaround] ERP5SiteReindexAll should reindex in all catalog by creating activities for each one of them
parent 4a746445
...@@ -10,195 +10,223 @@ if clear_catalog: ...@@ -10,195 +10,223 @@ if clear_catalog:
if is_subscribed: if is_subscribed:
portal.portal_alarms.unsubscribe() portal.portal_alarms.unsubscribe()
# Reindex person module catalog_id_list = [portal.portal_catalog.getSQLCatalog().id]
print "#### Indexing person_module, stage 1 ####"
person_module=getattr(portal, 'person_module', None) for sql_catalog_id in catalog_id_list:
higher_priority = 1 + additional_priority # Reindex person module
if person_module is not None : print "#### Indexing person_module, stage 1 ####"
tag = 'person_stage_1' person_module=getattr(portal, 'person_module', None)
person_module.recurseCallMethod( higher_priority = 1 + additional_priority
method_id='immediateReindexObject', if person_module is not None :
group_method_id='portal_catalog/catalogObjectList', tag = 'person_stage_1_%s'%sql_catalog_id
method_kw={ person_module.recurseCallMethod(
'sql_catalog_id': sql_catalog_id, method_id='immediateReindexObject',
}, group_method_id='portal_catalog/catalogObjectList',
activate_kw={ method_kw={
'tag': tag, 'sql_catalog_id': sql_catalog_id,
'priority': higher_priority, },
}, activate_kw={
max_depth=1, # Do not reindex Person's subobjects 'tag': tag,
) 'priority': higher_priority,
},
print "#### Indexing translations ####" max_depth=1, # Do not reindex Person's subobjects
context.ERP5Site_updateTranslationTable(sql_catalog_id=sql_catalog_id) )
# Reindex categories print "#### Indexing translations ####"
print "#### Indexing categories ####" context.ERP5Site_updateTranslationTable(sql_catalog_id=sql_catalog_id)
folder_tag = 'module' # Reindex categories
folder_after_tag = ('person_stage_1', 'group_person_stage_1') print "#### Indexing categories ####"
object_tag = 'category' folder_tag = 'module_%s'%sql_catalog_id
object_after_tag = folder_after_tag folder_after_tag = ('person_stage_1_%s'%sql_catalog_id, 'group_person_stage_1')
object_tag = 'category_%s'%sql_catalog_id
context.portal_categories.activate( object_after_tag = folder_after_tag
tag=folder_tag,
priority=higher_priority, context.portal_categories.activate(
after_tag=folder_after_tag).Folder_reindexAll(
folder_tag=folder_tag,
folder_after_tag=folder_after_tag,
object_tag=object_tag,
object_after_tag=object_after_tag,
object_priority=higher_priority,
sql_catalog_id=sql_catalog_id,
start_tree=start_tree,
stop_tree=stop_tree,)
print "#### Indexing alarms ####"
print "#### Indexing active results ####"
folder_tag = 'module'
folder_after_tag = ('category', 'person_stage_1', 'group_person_stage_1')
object_tag = 'document'
object_after_tag = folder_after_tag
object_priority = 2 + additional_priority
for folder in [context.portal_alarms, context.portal_activities]:
folder.activate(
tag=folder_tag, tag=folder_tag,
priority=object_priority, priority=higher_priority,
after_tag=folder_after_tag).Folder_reindexAll( after_tag=folder_after_tag).Folder_reindexAll(
folder_tag=folder_tag, folder_tag=folder_tag,
folder_after_tag=folder_after_tag, folder_after_tag=folder_after_tag,
object_tag=object_tag, object_tag=object_tag,
object_after_tag=object_after_tag, object_after_tag=object_after_tag,
object_priority=object_priority, object_priority=higher_priority,
sql_catalog_id=sql_catalog_id, sql_catalog_id=sql_catalog_id,
start_tree=start_tree, start_tree=start_tree,
stop_tree=stop_tree,) stop_tree=stop_tree,)
print "#### Indexing preferences ####" print "#### Indexing alarms ####"
preference_tag = 'portal_preferences' print "#### Indexing active results ####"
context.portal_preferences.activate( folder_tag = 'module_%s'%sql_catalog_id
tag=preference_tag, folder_after_tag = ('category_%s'%sql_catalog_id, 'person_stage_1_%s'%sql_catalog_id, 'group_person_stage_1')
after_tag='category', object_tag = 'document_%s'%sql_catalog_id
priority=additional_priority).Folder_reindexAll( object_after_tag = folder_after_tag
folder_tag=preference_tag, object_priority = 2 + additional_priority
object_tag=preference_tag, for folder in [context.portal_alarms, context.portal_activities]:
object_priority=additional_priority, folder.activate(
sql_catalog_id=sql_catalog_id, tag=folder_tag,
start_tree=start_tree, priority=object_priority,
stop_tree=stop_tree,) after_tag=folder_after_tag).Folder_reindexAll(
folder_tag=folder_tag,
# We index simulation first to make sure we can calculate tests folder_after_tag=folder_after_tag,
# (ie. related quantity) object_tag=object_tag,
print "#### Indexing simulation ####" object_after_tag=object_after_tag,
folder_tag = 'module' object_priority=object_priority,
folder_after_tag = ('category', 'document', 'person_stage_1', 'group_person_stage_1', preference_tag) sql_catalog_id=sql_catalog_id,
object_tag = 'simulation' start_tree=start_tree,
object_after_tag = folder_after_tag stop_tree=stop_tree,)
object_priority = 3 + additional_priority
context.portal_simulation.activate( print "#### Indexing preferences ####"
tag=folder_tag, preference_tag = 'portal_preferences_%s'%sql_catalog_id
priority=higher_priority, context.portal_preferences.activate(
after_tag=folder_after_tag).Folder_reindexAll( tag=preference_tag,
folder_tag=folder_tag, after_tag='category',
folder_after_tag=folder_after_tag, priority=additional_priority).Folder_reindexAll(
object_tag=object_tag, folder_tag=preference_tag,
object_after_tag=object_after_tag, object_tag=preference_tag,
object_priority=higher_priority, object_priority=additional_priority,
sql_catalog_id=sql_catalog_id, sql_catalog_id=sql_catalog_id,
start_tree=start_tree, start_tree=start_tree,
stop_tree=stop_tree,) stop_tree=stop_tree,)
# We index tools secondly # We index simulation first to make sure we can calculate tests
print "#### Indexing tools ####" # (ie. related quantity)
print "#### Indexing simulation ####"
folder_tag = 'module' folder_tag = 'module_%s'%sql_catalog_id
folder_after_tag = ('category', 'person_stage_1', 'group_person_stage_1', preference_tag) folder_after_tag = ('category_%s'%sql_catalog_id, 'document_%s'%sql_catalog_id, 'person_stage_1_%s'%sql_catalog_id, 'group_person_stage_1', preference_tag)
object_tag = 'document' object_tag = 'simulation_%s'%sql_catalog_id
object_after_tag = folder_after_tag object_after_tag = folder_after_tag
object_priority = 2 + additional_priority object_priority = 3 + additional_priority
tool_list = [x for x in portal.objectValues() if \ context.portal_simulation.activate(
x.getUid != portal.getUid and \
x.meta_type != 'ERP5 Folder' and \
x.id not in ('portal_alarms', 'portal_activities', 'portal_classes', 'portal_preferences', 'portal_simulation', 'portal_uidhandler')]
for folder in tool_list:
folder.activate(
tag=folder_tag, tag=folder_tag,
priority=object_priority, priority=higher_priority,
after_tag=folder_after_tag).Folder_reindexAll( after_tag=folder_after_tag).Folder_reindexAll(
folder_tag=folder_tag, folder_tag=folder_tag,
folder_after_tag=folder_after_tag, folder_after_tag=folder_after_tag,
object_tag=object_tag, object_tag=object_tag,
object_after_tag=object_after_tag, object_after_tag=object_after_tag,
object_priority=object_priority, object_priority=higher_priority,
sql_catalog_id=sql_catalog_id, sql_catalog_id=sql_catalog_id,
start_tree=start_tree, start_tree=start_tree,
stop_tree=stop_tree,) stop_tree=stop_tree,)
# Then we index ERP5 Python Scripts and ERP5 Form # XXX: Hack to avoid even trying to index these objects
print "#### Indexing ERP5 Python Scripts, ERP5 Forms and ERP5 Reports ####" restricted_tool_id_list = ( 'portal_alarms', 'portal_activities',
for _, obj in portal.portal_skins.ZopeFind(portal.portal_skins, obj_metatypes=('ERP5 Python Script', 'ERP5 Form', 'ERP5 Report'), search_sub=1): 'portal_classes', 'portal_preferences',
obj.activate(tag=folder_tag, 'portal_simulation', 'portal_uidhandler',
priority=object_priority, 'portal_actions', 'portal_memberdata',
after_tag=folder_after_tag).immediateReindexObject(sql_catalog_id=sql_catalog_id) 'portal_skins', 'portal_undo',
'portal_url', 'portal_workflow',
# Then we index everything except inventories 'portal_discussion', 'portal_membership',
for folder in portal.objectValues(("ERP5 Folder",)): 'portal_registration', 'portal_properties',
if folder.getId().find('inventory') < 0: 'portal_metadata', 'portal_syndication',
print "#### Indexing contents inside folder %s ####" % folder.id 'portal_syndication', 'portal_syndication',
folder.activate( )
tag=folder_tag,
priority=object_priority,
after_tag=folder_after_tag).Folder_reindexAll( # We index tools secondly
folder_tag=folder_tag, print "#### Indexing tools ####"
folder_after_tag=folder_after_tag, folder_tag = 'module_%s'%sql_catalog_id
object_tag=object_tag, folder_after_tag = ('category_%s'%sql_catalog_id, 'person_stage_1_%s'%sql_catalog_id, 'group_person_stage_1', preference_tag)
object_after_tag=object_after_tag, object_tag = 'document_%s'%sql_catalog_id
object_priority=object_priority, object_after_tag = folder_after_tag
sql_catalog_id=sql_catalog_id, object_priority = 2 + additional_priority
start_tree=start_tree, tool_list = [x for x in portal.objectValues() if \
stop_tree=stop_tree,) x.meta_type != 'ERP5 Folder' and \
x.id != portal.id and \
# Then we index inventories x.id not in restricted_tool_id_list]
object_tag = 'inventory'
object_after_tag = ('module', 'category', 'person_stage_1', 'document', 'group_person_stage_1') for folder in tool_list:
for folder in portal.objectValues(("ERP5 Folder",)): try:
if folder.getId().find('inventory') >= 0: folder.activate(
print "#### Indexing contents inside folder %s ####" % folder.id tag=folder_tag,
folder.activate( priority=object_priority,
tag=folder_tag, after_tag=folder_after_tag).Folder_reindexAll(
priority=object_priority, folder_tag=folder_tag,
after_tag=folder_after_tag).Folder_reindexAll( folder_after_tag=folder_after_tag,
folder_tag=folder_tag, object_tag=object_tag,
folder_after_tag=folder_after_tag, object_after_tag=object_after_tag,
object_tag=object_tag, object_priority=object_priority,
object_after_tag=object_after_tag, sql_catalog_id=sql_catalog_id,
object_priority=object_priority, start_tree=start_tree,
sql_catalog_id=sql_catalog_id, stop_tree=stop_tree,)
start_tree=start_tree, except:
stop_tree=stop_tree,) continue
# start activty from simulation because the erp5site is not an active object # for sql_catalog_id in catalog_id_list:
context.portal_simulation.activate( # Then we index ERP5 Python Scripts
after_tag=('inventory', 'simulation', 'person_stage_1', 'group_person_stage_1'), print "#### Indexing ERP5 Python Scripts ####"
priority=3 + additional_priority for path, obj in portal.portal_skins.ZopeFind(portal.portal_skins, obj_metatypes=('ERP5 Python Script',), search_sub=1):
).InventoryModule_reindexMovementList( obj.activate(tag=folder_tag,
sql_catalog_id=sql_catalog_id, priority=object_priority,
final_activity_tag='last_inventory_activity') after_tag=folder_after_tag).immediateReindexObject(sql_catalog_id=sql_catalog_id)
# restore alarm node #for sql_catalog_id in catalog_id_list:
if clear_catalog and is_subscribed: # Then we index ERP5 SQL Methods
portal.portal_alarms.activate(after_tag=('inventory', 'module', 'inventory', 'simulation', 'person_stage_1', print "#### Indexing ERP5 SQL Methods ####"
'group_person_stage_1', 'last_inventory_activity', 'document')).subscribe() for path, obj in portal.portal_skins.ZopeFind(portal.portal_skins, obj_metatypes=('ERP5 SQL Method',), search_sub=1):
obj.activate(tag=folder_tag,
if final_activity_tag is not None: priority=object_priority,
# Start a dummy activity which will get discarded when all started activities after_tag=folder_after_tag).immediateReindexObject(sql_catalog_id=sql_catalog_id)
# (and all activities they trigger) are over.
# Started on portal_simulation because activate does not work on portal object... # Then we index everything except inventories
# No idea if there is a better place. for folder in portal.objectValues(("ERP5 Folder",)):
context.portal_simulation.activate(tag=final_activity_tag, if folder.getId().find('inventory') < 0:
priority=3 + additional_priority, print "#### Indexing contents inside folder %s ####" % folder.id
after_tag=('module', 'inventory', 'simulation', 'person_stage_1', folder.activate(
'group_person_stage_1', 'last_inventory_activity', 'document') tag=folder_tag,
).getId() priority=object_priority,
after_tag=folder_after_tag).Folder_reindexAll(
folder_tag=folder_tag,
folder_after_tag=folder_after_tag,
object_tag=object_tag,
object_after_tag=object_after_tag,
object_priority=object_priority,
sql_catalog_id=sql_catalog_id,
start_tree=start_tree,
stop_tree=stop_tree,)
# Then we index inventories
object_tag = 'inventory_%s'%sql_catalog_id
object_after_tag = ('module_%s'%sql_catalog_id, 'category_%s'%sql_catalog_id, 'person_stage_1_%s'%sql_catalog_id, 'document_%s'%sql_catalog_id, 'group_person_stage_1')
for folder in portal.objectValues(("ERP5 Folder",)):
if folder.getId().find('inventory') >= 0:
print "#### Indexing contents inside folder %s ####" % folder.id
folder.activate(
tag=folder_tag,
priority=object_priority,
after_tag=folder_after_tag).Folder_reindexAll(
folder_tag=folder_tag,
folder_after_tag=folder_after_tag,
object_tag=object_tag,
object_after_tag=object_after_tag,
object_priority=object_priority,
sql_catalog_id=sql_catalog_id,
start_tree=start_tree,
stop_tree=stop_tree,)
# start activty from simulation because the erp5site is not an active object
context.portal_simulation.activate(
after_tag=('inventory_%s'%sql_catalog_id, 'simulation_%s'%sql_catalog_id, 'person_stage_1_%s'%sql_catalog_id, 'group_person_stage_1'),
priority=3 + additional_priority
).InventoryModule_reindexMovementList(
sql_catalog_id=sql_catalog_id,
final_activity_tag='last_inventory_activity_%s'%sql_catalog_id)
# restore alarm node
if clear_catalog and is_subscribed:
portal.portal_alarms.activate(after_tag=('inventory_%s'%sql_catalog_id, 'module_%s'%sql_catalog_id, 'inventory_%s'%sql_catalog_id, 'simulation_%s'%sql_catalog_id, 'person_stage_1_%s'%sql_catalog_id,
'group_person_stage_1', 'last_inventory_activity_%s'%sql_catalog_id, 'document_%s'%sql_catalog_id)).subscribe()
if final_activity_tag is not None:
# Start a dummy activity which will get discarded when all started activities
# (and all activities they trigger) are over.
# Started on portal_simulation because activate does not work on portal object...
# No idea if there is a better place.
context.portal_simulation.activate(tag=final_activity_tag,
priority=3 + additional_priority,
after_tag=('module_%s'%sql_catalog_id, 'inventory_%s'%sql_catalog_id, 'simulation_%s'%sql_catalog_id, 'person_stage_1_%s'%sql_catalog_id,
'group_person_stage_1', 'last_inventory_activity_%s'%sql_catalog_id, 'document_%s'%sql_catalog_id)
).getId()
folder_after_tag = ()
return printed return printed
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment