Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Léo-Paul Géneau
erp5
Commits
e944e1ef
Commit
e944e1ef
authored
Jan 26, 2018
by
Vincent Pelletier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
all: Get rid of Folder_reindex{All,Objectlist,TreeObjectList}
These are now superseded by recursiveReindexObject.
parent
c0b284be
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
130 additions
and
630 deletions
+130
-630
bt5/erp5_configurator_run_my_doc/SkinTemplateItem/portal_skins/erp5_configurator_run_my_doc/BusinessConfiguration_reindexRunMyDocObjectsAndRoles.py
...c/BusinessConfiguration_reindexRunMyDocObjectsAndRoles.py
+1
-1
bt5/erp5_demo_smb/SkinTemplateItem/portal_skins/erp5_demo_smb/Alarm_installBusinessTemplateList.py
..._skins/erp5_demo_smb/Alarm_installBusinessTemplateList.py
+1
-1
product/ERP5/ERP5Site.py
product/ERP5/ERP5Site.py
+18
-22
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ERP5Site_reindexAll.py
...emplateItem/portal_skins/erp5_core/ERP5Site_reindexAll.py
+107
-181
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ERP5Site_reindexAll.xml
...mplateItem/portal_skins/erp5_core/ERP5Site_reindexAll.xml
+1
-1
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Folder_reindexAll.py
...nTemplateItem/portal_skins/erp5_core/Folder_reindexAll.py
+0
-114
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Folder_reindexAll.xml
...TemplateItem/portal_skins/erp5_core/Folder_reindexAll.xml
+0
-62
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Folder_reindexObjectList.py
...teItem/portal_skins/erp5_core/Folder_reindexObjectList.py
+0
-53
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Folder_reindexObjectList.xml
...eItem/portal_skins/erp5_core/Folder_reindexObjectList.xml
+0
-62
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Folder_reindexTreeObjectList.py
...em/portal_skins/erp5_core/Folder_reindexTreeObjectList.py
+0
-66
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Folder_reindexTreeObjectList.xml
...m/portal_skins/erp5_core/Folder_reindexTreeObjectList.xml
+0
-62
product/ERP5/tests/testBusinessTemplate.py
product/ERP5/tests/testBusinessTemplate.py
+0
-3
product/ERP5/tests/testDomainTool.py
product/ERP5/tests/testDomainTool.py
+2
-2
No files found.
bt5/erp5_configurator_run_my_doc/SkinTemplateItem/portal_skins/erp5_configurator_run_my_doc/BusinessConfiguration_reindexRunMyDocObjectsAndRoles.py
View file @
e944e1ef
""" This script reindex all the objects created before updating local roles """
portal
=
context
.
getPortalObject
()
portal
.
portal_types
.
Folder_reindexAll
()
portal
.
portal_types
.
recursiveReindexObject
()
stack
=
[
portal
.
document_module
,
portal
.
image_module
,
...
...
bt5/erp5_demo_smb/SkinTemplateItem/portal_skins/erp5_demo_smb/Alarm_installBusinessTemplateList.py
View file @
e944e1ef
...
...
@@ -5,7 +5,7 @@ portal.portal_templates.updateRepositoryBusinessTemplateList(
[
'http://www.erp5.org/dists/snapshot/bt5/'
])
business_template_list
=
context
.
Base_getDemoSMBBusinessTemplateList
()
kw
=
dict
(
tag
=
"start"
,
after_method_id
=
[
"immediateReindexObject"
,
"Folder_reindexAll"
])
kw
=
{
'tag'
:
"start"
,
'after_method_id'
:
[
"immediateReindexObject"
]}
for
business_template_id
in
business_template_list
:
portal
.
portal_templates
.
activate
(
**
kw
).
installBusinessTemplatesFromRepositories
((
business_template_id
,))
kw
[
"after_tag"
]
=
kw
[
"tag"
]
...
...
product/ERP5/ERP5Site.py
View file @
e944e1ef
...
...
@@ -1940,16 +1940,17 @@ class ERP5Generator(PortalGenerator):
p
.
_v_bootstrapping
=
False
# XXX: Is it useful to wait for indexing before using upgradeSite ?
after_method_id
=
'immediateReindexObject'
reindex_all_tag
=
'ERP5Site_reindexAll'
upgrade_tag
=
'updgradeSite'
preference_tag
=
'initSystemPreference'
if
bt5_repository_url
:
p
.
portal_templates
.
repository_dict
=
dict
.
fromkeys
(
bt5_repository_url
.
split
())
p
.
portal_templates
.
repository_dict
=
dict
.
fromkeys
(
bt5_repository_url
.
split
())
if
bt5
:
method_id
=
'upgradeSite'
getattr
(
p
.
portal_templates
.
activate
(
after_method_id
=
after_method_id
),
method_id
)(
bt5
.
split
(),
update_catalog
=
True
)
after_method_id
=
method_id
p
.
portal_templates
.
activate
(
# XXX: Is it useful to wait for indexing ?
after_tag
=
reindex_all_tag
,
tag
=
upgrade_tag
,
).
upgradeSite
(
bt5
.
split
(),
update_catalog
=
True
)
if
id_store_interval
!=
''
:
id_store_interval
=
int
(
id_store_interval
)
if
id_store_interval
<
0
:
...
...
@@ -1961,22 +1962,17 @@ class ERP5Generator(PortalGenerator):
else
:
ob
.
_setStoredInZodb
(
0
)
if
cloudooo_url
:
method_id
=
'_initSystemPreference'
getattr
(
p
.
portal_activities
.
activateObject
(
p
,
after_method_id
=
after_method_id
),
method_id
)(
cloudooo_url
=
cloudooo_url
)
after_method_id
=
method_id
p
.
portal_activities
.
activateObject
(
p
,
after_tag
=
(
reindex_all_tag
,
upgrade_tag
),
tag
=
preference_tag
,
).
_initSystemPreference
(
cloudooo_url
=
cloudooo_url
)
id_
=
'isPortalBeingCreated'
setattr
(
p
,
id_
,
ConstantGetter
(
id_
,
value
=
True
))
# XXX: ERP5Site_reindexAll should be reviewed so that one can depend on a
# final tag. A more general approach is to have an activity dependency
# to anything, so that _delPropValue is called as soon as activity
# nodes have nothing else to do.
after_method_id
=
tuple
({
after_method_id
}.
union
((
'Folder_reindexAll'
,
'Folder_reindexObjectList'
,
'InventoryModule_reindexMovementList'
,
'immediateReindexObject'
,
'SQLCatalog_deferFullTextIndexActivity'
)))
p
.
portal_activities
.
activateObject
(
p
,
after_method_id
=
after_method_id
,
).
_delPropValue
(
id_
)
p
.
portal_activities
.
activateObject
(
p
,
after_tag
=
(
reindex_all_tag
,
upgrade_tag
,
preference_tag
),
).
_delPropValue
(
id_
)
return
p
@
classmethod
...
...
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ERP5Site_reindexAll.py
View file @
e944e1ef
from
random
import
getrandbits
portal
=
context
.
getPortalObject
()
if
clear_catalog
:
# clear the catalog before reindexing
catalog
=
portal
.
portal_catalog
.
getSQLCatalog
(
sql_catalog_id
)
catalog
.
manage_catalogClear
()
portal
.
portal_catalog
.
getSQLCatalog
(
sql_catalog_id
).
manage_catalogClear
()
# disable alarms while we are reindexing
is_subscribed
=
portal
.
portal_alarms
.
isSubscribed
()
if
clear_catalog
:
if
is_subscribed
:
portal
.
portal_alarms
.
unsubscribe
()
# Reindex person module
if
clear_catalog
and
is_subscribed
:
portal
.
portal_alarms
.
unsubscribe
()
base_tag
=
'%s_%x_'
%
(
script
.
id
,
getrandbits
(
32
))
user_tag
=
base_tag
+
'person_stage_1'
category_tag
=
base_tag
+
'category'
document_tag
=
base_tag
+
'document'
preference_tag
=
base_tag
+
'portal_preferences'
simulation_tag
=
base_tag
+
'simulation'
inventory_tag
=
base_tag
+
'inventory'
last_inventory_tag
=
base_tag
+
'last_inventory_activity'
def
reindex
(
document_list
,
tag
,
after_tag
):
for
document
in
document_list
:
print
'#### Indexing'
,
document
.
id
,
'####'
document
.
activate
(
priority
=
additional_priority
,
tag
=
tag
,
after_tag
=
after_tag
,
).
recursiveReindexObject
(
activate_kw
=
{
'tag'
:
tag
,
'priority'
:
additional_priority
,
},
sql_catalog_id
=
sql_catalog_id
,
)
return
printed
# XXX: Must be replaced by an in-ZODB mapping from user_id to any type of user
# documents (not just Persons), otherwise catalog risks undergoing a
# security_uid explosion if many users (ex: persons) have local roles on
# documents (ex: persons) granting them View permission but the user is not
# indexed before corresponding document is.
print
"#### Indexing person_module, stage 1 ####"
person_module
=
getattr
(
portal
,
'person_module'
,
None
)
higher_priority
=
1
+
additional_priority
if
person_module
is
not
None
:
tag
=
'person_stage_1'
person_module
=
getattr
(
portal
,
'person_module'
,
None
)
if
person_module
is
not
None
:
person_module
.
recurseCallMethod
(
method_id
=
'immediateReindexObject'
,
group_method_id
=
'portal_catalog/catalogObjectList'
,
method_kw
=
{
'sql_catalog_id'
:
sql_catalog_id
,
},
activate_kw
=
{
'
tag'
:
tag
,
'
priority'
:
higher_priority
,
'
group_method_id'
:
'portal_catalog/catalogObjectList'
,
'
tag'
:
user_tag
,
},
max_depth
=
1
,
# Do not reindex Person's subobjects
)
print
"#### Indexing translations ####"
context
.
ERP5Site_updateTranslationTable
(
sql_catalog_id
=
sql_catalog_id
)
# Reindex categories
print
"#### Indexing categories ####"
folder_tag
=
'module'
folder_after_tag
=
(
'person_stage_1'
,
'group_person_stage_1'
)
object_tag
=
'category'
object_after_tag
=
folder_after_tag
context
.
portal_categories
.
activate
(
tag
=
folder_tag
,
priority
=
higher_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
=
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
,
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
,)
print
"#### Indexing preferences ####"
preference_tag
=
'portal_preferences'
context
.
portal_preferences
.
activate
(
tag
=
preference_tag
,
after_tag
=
'category'
,
priority
=
additional_priority
).
Folder_reindexAll
(
folder_tag
=
preference_tag
,
object_tag
=
preference_tag
,
object_priority
=
additional_priority
,
sql_catalog_id
=
sql_catalog_id
,
start_tree
=
start_tree
,
stop_tree
=
stop_tree
,)
# We index simulation first to make sure we can calculate tests
# (ie. related quantity)
print
"#### Indexing simulation ####"
folder_tag
=
'module'
folder_after_tag
=
(
'category'
,
'document'
,
'person_stage_1'
,
'group_person_stage_1'
,
preference_tag
)
object_tag
=
'simulation'
object_after_tag
=
folder_after_tag
object_priority
=
3
+
additional_priority
context
.
portal_simulation
.
activate
(
tag
=
folder_tag
,
priority
=
higher_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
=
higher_priority
,
sql_catalog_id
=
sql_catalog_id
,
start_tree
=
start_tree
,
stop_tree
=
stop_tree
,)
# We index tools secondly
print
"#### Indexing tools ####"
folder_tag
=
'module'
folder_after_tag
=
(
'category'
,
'person_stage_1'
,
'group_person_stage_1'
,
preference_tag
)
object_tag
=
'document'
object_after_tag
=
folder_after_tag
object_priority
=
2
+
additional_priority
tool_list
=
[
x
for
x
in
portal
.
objectValues
()
if
\
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
,
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 ERP5 Python Scripts and ERP5 Form
print
"#### Indexing ERP5 Python Scripts, ERP5 Forms and ERP5 Reports ####"
skin_activate_kw
=
{
'tag'
:
folder_tag
,
'priority'
:
object_priority
,
'after_tag'
:
folder_after_tag
}
portal
.
ERP5Site_updateTranslationTable
(
sql_catalog_id
=
sql_catalog_id
)
print
reindex
(
[
portal
.
portal_categories
],
tag
=
category_tag
,
after_tag
=
user_tag
,
),
print
reindex
(
[
portal
.
portal_alarms
,
portal
.
portal_activities
],
tag
=
document_tag
,
after_tag
=
(
user_tag
,
category_tag
),
),
print
reindex
(
[
portal
.
portal_preferences
],
tag
=
preference_tag
,
after_tag
=
(
user_tag
,
category_tag
),
),
# Simulation is needed to calculate tests (ie. related quantity)
print
reindex
(
[
portal
.
portal_simulation
],
tag
=
simulation_tag
,
after_tag
=
(
user_tag
,
category_tag
,
document_tag
,
preference_tag
),
),
print
reindex
(
[
x
for
x
in
portal
.
objectValues
()
if
x
.
getUid
!=
portal
.
getUid
and
x
.
id
not
in
(
'portal_alarms'
,
'portal_activities'
,
'portal_categories'
,
'portal_classes'
,
'portal_preferences'
,
'portal_simulation'
,
'portal_uidhandler'
,
)
and
'inventory'
not
in
x
.
id
],
tag
=
document_tag
,
after_tag
=
(
user_tag
,
category_tag
,
preference_tag
),
),
# Then we index ERP5 Python Scripts and ERP5 Form - this is fundamentally broken and will go away, do not depend on it !
skin_activate_kw
=
{
'tag'
:
document_tag
,
'priority'
:
additional_priority
,
'after_tag'
:
(
user_tag
,
category_tag
,
preference_tag
),
}
for
_
,
obj
in
portal
.
portal_skins
.
ZopeFind
(
portal
.
portal_skins
,
obj_metatypes
=
(
'ERP5 Python Script'
,
'ERP5 Form'
,
'ERP5 Report'
),
search_sub
=
1
):
obj
.
recursiveReindexObject
(
activate_kw
=
skin_activate_kw
,
sql_catalog_id
=
sql_catalog_id
)
# Then we index everything except inventories
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
,)
# Then we index inventories
object_tag
=
'inventory'
object_after_tag
=
(
'module'
,
'category'
,
'person_stage_1'
,
'document'
,
'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'
,
'simulation'
,
'person_stage_1'
,
'group_person_stage_1'
),
priority
=
3
+
additional_priority
).
InventoryModule_reindexMovementList
(
sql_catalog_id
=
sql_catalog_id
,
final_activity_tag
=
'last_inventory_activity'
)
print
reindex
(
[
x
for
x
in
portal
.
objectValues
((
"ERP5 Folder"
,
))
if
'inventory'
in
x
.
id
],
tag
=
inventory_tag
,
after_tag
=
(
user_tag
,
category_tag
,
document_tag
,
preference_tag
),
),
portal
.
portal_activities
.
activate
(
after_tag
=
(
user_tag
,
category_tag
,
document_tag
,
preference_tag
,
inventory_tag
,
simulation_tag
),
).
InventoryModule_reindexMovementList
(
sql_catalog_id
=
sql_catalog_id
,
final_activity_tag
=
last_inventory_tag
,
)
# restore alarm node
if
clear_catalog
and
is_subscribed
:
portal
.
portal_alarms
.
activate
(
after_tag
=
(
'inventory'
,
'module'
,
'inventory'
,
'simulation'
,
'person_stage_1'
,
'group_person_stage_1'
,
'last_inventory_activity'
,
'document'
)).
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'
,
'inventory'
,
'simulation'
,
'person_stage_1'
,
'group_person_stage_1'
,
'last_inventory_activity'
,
'document'
)
).
getId
()
portal
.
portal_alarms
.
activate
(
after_tag
=
(
user_tag
,
category_tag
,
document_tag
,
preference_tag
,
inventory_tag
,
simulation_tag
,
last_inventory_tag
),
).
subscribe
()
portal
.
portal_activities
.
activate
(
tag
=
final_activity_tag
,
after_tag
=
(
user_tag
,
category_tag
,
document_tag
,
preference_tag
,
inventory_tag
,
simulation_tag
,
last_inventory_tag
),
).
getId
()
return
printed
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ERP5Site_reindexAll.xml
View file @
e944e1ef
...
...
@@ -50,7 +50,7 @@
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
sql_catalog_id=None,
additional_priority=0, clear_catalog=0, final_activity_tag=None, start_tree=None, stop_tree=None
</string>
</value>
<value>
<string>
sql_catalog_id=None,
clear_catalog=False, additional_priority=1, final_activity_tag="ERP5Site_reindexAll"
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
...
...
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Folder_reindexAll.py
deleted
100644 → 0
View file @
c0b284be
folder
=
context
activate_kw
=
{
'tag'
:
object_tag
,
'after_tag'
:
folder_after_tag
,
}
for
key
,
value
in
activate_kw
.
items
():
if
value
is
None
:
activate_kw
.
pop
(
key
)
# Reindex folder immediately
folder
.
reindexObject
(
sql_catalog_id
=
sql_catalog_id
)
folder_id
=
folder
.
getId
()
if
folder_after_tag
is
None
:
folder_after_tag
=
()
bundle_tag
=
"%s_bundle_reindex"
%
folder_id
bundle_object_tag
=
"%s_reindex"
%
folder_id
# Spawn activities for bundles of content objects.
# Bundle size, in object count
BUNDLE_ITEM_COUNT
=
1000
def
Folder_reindexObjectList
(
id_list_list
):
"""
Create an activity calling Folder_reindexObjectList.
"""
folder
.
activate
(
activity
=
'SQLQueue'
,
priority
=
object_priority
,
**
activate_kw
).
Folder_reindexObjectList
(
id_list
=
None
,
id_list_list
=
id_list_list
,
object_priority
=
object_priority
,
object_tag
=
object_tag
,
object_after_tag
=
object_after_tag
,
folder_tag
=
bundle_tag
,
folder_after_tag
=
bundle_object_tag
,
sql_catalog_id
=
sql_catalog_id
,
)
archive_test_script
=
getattr
(
context
.
getPortalObject
(),
"Archive_test"
,
None
)
try
:
tree_id_list
=
folder
.
getTreeIdList
()
except
(
NotImplementedError
,
AttributeError
):
# Build a list of list, like this we parse ids only one time,
# and then Folder_reinexObjectList will work with one list at
# a time and remove it from the list of list
# This id_list_list can be quite big and generate quite big
# activities, but the effect is limited, because if we have too
# much objects (like millions), we should use HBTree Folders, and
# then the work will be splitted
id_list
=
[
x
for
x
in
folder
.
objectIds
()]
id_list_list
=
[]
for
bundle_index
in
xrange
(
len
(
id_list
)
/
BUNDLE_ITEM_COUNT
):
id_list_list
.
append
(
id_list
[
bundle_index
*
BUNDLE_ITEM_COUNT
:((
bundle_index
+
1
)
*
BUNDLE_ITEM_COUNT
)])
remaining_object_id_count
=
len
(
id_list
)
%
BUNDLE_ITEM_COUNT
if
remaining_object_id_count
>
0
:
id_list_list
.
append
(
id_list
[
-
remaining_object_id_count
:])
Folder_reindexObjectList
(
id_list_list
)
else
:
if
archive_test_script
is
not
None
:
new_tree_id_list
=
[]
for
tree_id
in
tree_id_list
:
if
folder
.
Archive_test
(
tree_id
=
tree_id
,
start_tree
=
start_tree
,
stop_tree
=
stop_tree
):
new_tree_id_list
.
append
(
tree_id
)
tree_id_list
=
new_tree_id_list
else
:
if
start_tree
is
not
None
:
new_tree_id_list
=
[]
for
tree_id
in
tree_id_list
:
if
tree_id
>=
start_tree
:
new_tree_id_list
.
append
(
tree_id
)
tree_id_list
=
new_tree_id_list
if
stop_tree
is
not
None
:
new_tree_id_list
=
[]
for
tree_id
in
tree_id_list
:
if
tree_id
<
stop_tree
:
new_tree_id_list
.
append
(
tree_id
)
tree_id_list
=
new_tree_id_list
if
len
(
tree_id_list
)
==
0
:
return
i
=
0
tree_tag
=
"%s_tree"
%
folder_id
# Say to Folder_reindexTreeObjectList to call himself again and
# again until all tree_id_list are parsed. Also, make sure that
# the work of the previous Folder_reindexTreeObjectList is completely
# done
tree_after_tag
=
folder_after_tag
+
(
bundle_tag
,
bundle_object_tag
)
folder
.
activate
(
activity
=
'SQLQueue'
,
priority
=
object_priority
,
after_tag
=
tree_after_tag
,
tag
=
tree_tag
,
).
Folder_reindexTreeObjectList
(
tree_id
=
None
,
tree_id_list
=
tree_id_list
,
folder_tag
=
bundle_tag
,
folder_after_tag
=
bundle_object_tag
,
object_priority
=
object_priority
,
sql_catalog_id
=
sql_catalog_id
,
object_tag
=
bundle_object_tag
,
tree_after_tag
=
tree_after_tag
,
tree_tag
=
tree_tag
,
)
# Start an activity wich will wait the end of the module
folder_id_after_tag
=
folder_after_tag
+
(
tree_tag
,
bundle_tag
,
bundle_object_tag
)
id_activate_kw
=
{}
if
object_tag
is
not
None
:
id_activate_kw
[
'tag'
]
=
object_tag
folder
.
activate
(
activity
=
'SQLDict'
,
priority
=
object_priority
,
after_tag
=
folder_id_after_tag
,
**
id_activate_kw
).
getId
()
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Folder_reindexAll.xml
deleted
100644 → 0
View file @
c0b284be
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
Script_magic
</string>
</key>
<value>
<int>
3
</int>
</value>
</item>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
folder_tag=None, folder_after_tag=None, object_tag=None, object_after_tag=None, object_priority=1, sql_catalog_id=None, start_tree=None, stop_tree=None
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
Folder_reindexAll
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Folder_reindexObjectList.py
deleted
100644 → 0
View file @
c0b284be
folder
=
context
# Keep compatibility with id_list
if
id_list_list
is
not
None
:
if
id_list
is
not
None
:
raise
ValueError
,
"both id_list and id_list_list can be defined"
if
len
(
id_list_list
)
==
0
:
return
None
id_list
=
id_list_list
.
pop
()
activate_kw
=
{
'tag'
:
object_tag
,
'after_tag'
:
object_after_tag
,
'priority'
:
object_priority
}
for
key
,
value
in
activate_kw
.
items
():
if
value
is
None
:
activate_kw
.
pop
(
key
)
for
id
in
id_list
:
obj
=
getattr
(
folder
,
id
,
None
)
if
obj
is
not
None
:
obj
.
recursiveReindexObject
(
activate_kw
=
activate_kw
,
sql_catalog_id
=
sql_catalog_id
)
if
id_list_list
is
not
None
:
if
len
(
id_list_list
)
>
0
:
if
count
is
None
:
count
=
1
new_activity_kw
=
{}
# We do not want to wait until there is enough activities
# So add BUNDLE_ITEM_COUNT * node_len activities before waiting
node_len
=
len
(
context
.
portal_activities
.
getProcessingNodeList
())
if
count
%
node_len
==
0
:
new_activity_kw
[
'after_tag'
]
=
folder_after_tag
count
=
0
count
+=
1
# By calling again and again, we improve performance and we have
# less activities by the same time
folder
.
activate
(
activity
=
'SQLQueue'
,
priority
=
object_priority
,
tag
=
folder_tag
,
**
new_activity_kw
).
Folder_reindexObjectList
(
None
,
id_list_list
=
id_list_list
,
object_priority
=
object_priority
,
object_tag
=
object_tag
,
sql_catalog_id
=
sql_catalog_id
,
folder_tag
=
folder_tag
,
folder_after_tag
=
folder_after_tag
,
count
=
count
,
)
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Folder_reindexObjectList.xml
deleted
100644 → 0
View file @
c0b284be
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
Script_magic
</string>
</key>
<value>
<int>
3
</int>
</value>
</item>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
id_list, id_list_list=None, folder_tag=None, folder_after_tag=None, object_tag=None, object_after_tag=None, object_priority=1, sql_catalog_id=None, count=None
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
Folder_reindexObjectList
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Folder_reindexTreeObjectList.py
deleted
100644 → 0
View file @
c0b284be
from
Products.ERP5Type.Log
import
log
folder
=
context
# Keep compatibility with tree_id
if
tree_id_list
is
not
None
:
log
(
'tree_id'
,
tree_id
)
log
(
'tree_id_list'
,
tree_id_list
)
if
tree_id
is
not
None
:
raise
ValueError
,
"both tree and tree_id_list should not be defined"
tree_id
=
tree_id_list
.
pop
()
# Spawn activities for bundles of content objects.
# Bundle size, in object count
BUNDLE_ITEM_COUNT
=
1000
folder_id
=
folder
.
getId
()
def
Folder_reindexObjectList
(
id_list_list
):
"""
Create an activity calling Folder_reindexObjectList.
"""
folder
.
activate
(
activity
=
'SQLQueue'
,
priority
=
object_priority
,
after_tag
=
object_tag
,
tag
=
folder_tag
).
Folder_reindexObjectList
(
None
,
id_list_list
=
id_list_list
,
object_priority
=
object_priority
,
object_tag
=
object_tag
,
sql_catalog_id
=
sql_catalog_id
,
folder_tag
=
folder_tag
,
folder_after_tag
=
folder_after_tag
,
)
# HBTree folder
id_list
=
[
x
for
x
in
folder
.
objectIds
(
base_id
=
tree_id
)]
# Build a list of list, like this we parse ids only one time,
# and then Folder_reinexObjectList will work with one list at
# a time and remove it from the list of list
# This id_list_list can be quite big and generate quite big
# activities, but the effect is limited, because the work is
# splitted for each base_id of the HBTree.
id_list_list
=
[]
for
bundle_index
in
xrange
(
len
(
id_list
)
/
BUNDLE_ITEM_COUNT
):
id_list_list
.
append
(
id_list
[
bundle_index
*
BUNDLE_ITEM_COUNT
:((
bundle_index
+
1
)
*
BUNDLE_ITEM_COUNT
)])
remaining_object_id_count
=
len
(
id_list
)
%
BUNDLE_ITEM_COUNT
if
remaining_object_id_count
>
0
:
id_list_list
.
append
(
id_list
[
-
remaining_object_id_count
:])
Folder_reindexObjectList
(
id_list_list
=
id_list_list
)
if
tree_id_list
is
not
None
:
if
len
(
tree_id_list
)
>
0
:
# Calling again and again the same script allow to decrease the
# number of activities by the same time and increase performance.
folder
.
activate
(
activity
=
'SQLQueue'
,
priority
=
object_priority
,
after_tag
=
tree_after_tag
,
tag
=
tree_tag
).
Folder_reindexTreeObjectList
(
tree_id
=
None
,
tree_id_list
=
tree_id_list
,
folder_tag
=
folder_tag
,
folder_after_tag
=
folder_after_tag
,
object_priority
=
object_priority
,
sql_catalog_id
=
sql_catalog_id
,
object_tag
=
object_tag
,
tree_after_tag
=
tree_after_tag
,
tree_tag
=
tree_tag
,
)
product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Folder_reindexTreeObjectList.xml
deleted
100644 → 0
View file @
c0b284be
<?xml version="1.0"?>
<ZopeData>
<record
id=
"1"
aka=
"AAAAAAAAAAE="
>
<pickle>
<global
name=
"PythonScript"
module=
"Products.PythonScripts.PythonScript"
/>
</pickle>
<pickle>
<dictionary>
<item>
<key>
<string>
Script_magic
</string>
</key>
<value>
<int>
3
</int>
</value>
</item>
<item>
<key>
<string>
_bind_names
</string>
</key>
<value>
<object>
<klass>
<global
name=
"NameAssignments"
module=
"Shared.DC.Scripts.Bindings"
/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key>
<string>
_asgns
</string>
</key>
<value>
<dictionary>
<item>
<key>
<string>
name_container
</string>
</key>
<value>
<string>
container
</string>
</value>
</item>
<item>
<key>
<string>
name_context
</string>
</key>
<value>
<string>
context
</string>
</value>
</item>
<item>
<key>
<string>
name_m_self
</string>
</key>
<value>
<string>
script
</string>
</value>
</item>
<item>
<key>
<string>
name_subpath
</string>
</key>
<value>
<string>
traverse_subpath
</string>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key>
<string>
_params
</string>
</key>
<value>
<string>
tree_id=None, tree_id_list=None, folder_tag=None, folder_after_tag=None, object_tag=None, object_after_tag=None, object_priority=1, sql_catalog_id=None, tree_tag=None, tree_after_tag=None
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
Folder_reindexTreeObjectList
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
product/ERP5/tests/testBusinessTemplate.py
View file @
e944e1ef
...
...
@@ -2768,9 +2768,6 @@ class BusinessTemplateMixin(ERP5TypeTestCase, LogInterceptor):
self
.
assertEqual
(
len
(
message_list
),
0
)
def
stepCheckHasClearedCatalog
(
self
,
sequence
=
None
,
**
kw
):
"""
Check if we have activity for Folder_reindexAll.
"""
self
.
assertTrue
(
self
.
_has_cleared_catalog
)
del
self
.
_has_cleared_catalog
[:]
...
...
product/ERP5/tests/testDomainTool.py
View file @
e944e1ef
...
...
@@ -419,7 +419,7 @@ class TestDomainTool(TestPredicateMixIn):
# Enable system preference and reindex relevant predicates
system_preference
.
enable
()
self
.
tic
()
supply_module
.
Folder_reindexAll
()
supply_module
.
recursiveReindexObject
()
self
.
tic
()
# if document has relations using base categories which are not present in the preference, then left join mode is still used.
assertUsesLeftJoinAndPredicateItemsMatchingOrderLineEqual
(
True
,
[
supply1_line1
])
...
...
@@ -432,7 +432,7 @@ class TestDomainTool(TestPredicateMixIn):
system_preference
.
setPreferredPredicateCategoryList
([
'source_section'
,
'destination_section'
,
'price_currency'
,
'resource'
])
self
.
portal
.
portal_caches
.
clearAllCache
()
self
.
tic
()
supply_module
.
Folder_reindexAll
()
supply_module
.
recursiveReindexObject
()
self
.
tic
()
# resource is not in preferred predicate category list, so only inner join is used
assertUsesLeftJoinAndPredicateItemsMatchingOrderLineEqual
(
False
,
[
supply1_line1
],
tested_base_category_list
=
[
'source_section'
,
'destination_section'
,
'price_currency'
,
'resource'
])
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment