Commit 48ee3f8b authored by Rafael Monnerat's avatar Rafael Monnerat

slapos_deploy_theme: Speed up doing less catalog queries and not using Manager Proxy Roles

parent ac048155
mapping_dict = {}
map = {"function_common_content": "deploy-Function.Common",
"base_setup_content": "deploy-Base.Setup",
"slapos_install_content": "deploy-Vifib.Channel",
"slapos_testing_content": "deploy-Testing.Channel",
"slapos_unstable_content": "deploy-Unstable.Channel"}
url_map = {"deploy-Function.Common" : "function_common_content",
"deploy-Base.Setup": "base_setup_content",
"deploy-Vifib.Channel": "slapos_install_content",
"deploy-Testing.Channel": "slapos_testing_content",
"deploy-Unstable.Channel": "slapos_unstable_content"}
portal = context.getPortalObject()
for m, reference in map.iteritems():
doc = portal.portal_catalog.getResultValue(reference=reference,
from DateTime import DateTime
i = DateTime()
for doc in portal.portal_catalog(reference=url_map.keys(),
portal_type="Web Page",
validation_state="published")
validation_state="published"):
mapping_dict[m] = doc.getTextContent()
mapping_dict[url_map[doc.getReference()]] = doc.getTextContent()
context.log((DateTime() - i)*3600*24)
return mapping_dict
......@@ -56,7 +56,7 @@
<key> <string>_proxy_roles</string> </key>
<value>
<tuple>
<string>Manager</string>
<string>Anonymous</string>
</tuple>
</value>
</item>
......
"""
This script is part of ERP5 Web
ERP5 Web is a business template of ERP5 which provides a way
to create web sites which can display selected
ERP5 contents through multiple custom web layouts.
The default implementation searches for
documents which are in the user language if any
and which reference is equal to the name parameter.
Other implementations are possible: ex. display the last
version in the closest language rather than
the latest version in the user language.
NOTE:
- the portal parameter was introduced to
fix acquisition issues within the _aq_dynamic
lookup from WebSection class.
"""
from Products.ZSQLCatalog.SQLCatalog import SimpleQuery, ComplexQuery
if portal is None: portal = context.getPortalObject()
portal_catalog = portal.portal_catalog
# The list of portal types here should be large enough to include
# all portal_types defined in the various sections so that
# href tags which point to a document by reference can still work.
valid_portal_type_list = portal.getPortalDocumentTypeList()
# Find the applicable language
if language is None:
language = portal.Localizer.get_selected_language()
validation_state = None
effective_date = None
if validation_state is None:
validation_state = ('published', 'published_alive', 'public', 'validated')
if effective_date is None:
if now is None:
now = DateTime()
effective_date = ComplexQuery(
SimpleQuery(effective_date=None),
SimpleQuery(effective_date=now, comparison_operator='<='),
logical_operator='or',
)
# Note: In sorts, NULL is considered lesser than non-NULL. So in descending
# sort, NULLs will be listed after non-NULLs, which is perfect for
# effective_date, which defines the date at which content becomes effective.
# None (NULL) effective date hence means "effective since infinite in te past".
base_sort = (('effective_date', 'descending'), )
# Search the catalog for all documents matching the reference
# this will only return documents which are accessible by the user
web_page_list = portal_catalog(reference=name,
effective_date=effective_date,
portal_type=valid_portal_type_list,
validation_state=validation_state,
language=(language, ''),
sort_on=(('language', 'descending'), ) + base_sort,
limit=1,
**kw)
if len(web_page_list) == 0 and language != 'en':
# Search again with English as a fallback.
web_page_list = portal_catalog(reference=name,
effective_date=effective_date,
portal_type=valid_portal_type_list,
validation_state=validation_state,
language='en',
sort_on=base_sort,
limit=1,
**kw)
if len(web_page_list) == 0:
# Search again without the language
web_page_list = portal_catalog(reference=name,
effective_date=effective_date,
portal_type=valid_portal_type_list,
validation_state=validation_state,
sort_on=base_sort,
limit=1,
**kw)
if len(web_page_list) == 0:
# Default returns None
web_page = None
else:
# Try to get the first page on the list
web_page = web_page_list[0]
web_page = web_page.getObject()
# return the web page
return web_page
<?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>name, portal=None, language=None, strict_language=False, now=None, **kw</string> </value>
</item>
<item>
<key> <string>_proxy_roles</string> </key>
<value>
<tuple>
<string>Anonymous</string>
</tuple>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>WebSection_getDocumentValue</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
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