Commit 09db8b5c authored by Jérome Perrin's avatar Jérome Perrin

administration: add utility script to check external validators on fields

Check that script exists.
parent 1cc2c2db
"""
Print all field that uses non existing scripts as external_validator
"""
portal = context.getPortalObject()
skins_tool = portal.portal_skins
for skin_name, skin_path_list in skins_tool.getSkinPaths():
skins_tool.changeSkin(skin_name)
for skin_folder in skin_path_list.split(','):
for form_path, form in skins_tool.ZopeFind(
skins_tool[skin_folder], obj_metatypes=['ERP5 Form', 'ERP5 Report'], search_sub=1):
for field in form.get_fields():
if field.meta_type == 'ProxyField':
if field.getRecursiveTemplateField() is None or field.get_recursive_tales('external_validator'):
Please register or sign in to reply
continue
try:
external_validator = field.get_recursive_orig_value('external_validator')
except KeyError:
continue
else:
if field.get_tales('external_validator'):
continue
try:
external_validator = field.get_orig_value('external_validator')
except KeyError:
continue
if external_validator:
method_name = external_validator.getMethodName()
if portal.restrictedTraverse(method_name, None) is None:
  • detail, but for speedup we could do

    restrictedTraverse = portal.restrictedTraverse

    out of all the loops

  • Yes, why not, I find both ways equally readable. For the records, I tried on a small site with 657 forms and two skins selections, it changes from 0:00:24.294458 to 0:00:24.278996, measured like this:

    from DateTime import DateTime
    context.SkinsTool_checkFieldExternalValidator()
    start = DateTime().asdatetime()
    for _ in range(5):
      context.SkinsTool_checkFieldExternalValidator()
    print DateTime().asdatetime() - start
    return printed
Please register or sign in to reply
print "{form_path}/{field_id} uses an external validator non existant in {skin_name}: {method_name}".format(
form_path=form_path,
field_id=field.getId(),
skin_name=skin_name,
method_name=method_name,
)
return printed
<?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></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>SkinsTool_checkFieldExternalValidator</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