[Erp5-report] r21497 - in /erp5/trunk/products/ERP5: bootstrap/erp5_core/SkinTemplateItem/p...
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Jun 11 15:35:18 CEST 2008
Author: jm
Date: Wed Jun 11 15:35:17 2008
New Revision: 21497
URL: http://svn.erp5.org?rev=21497&view=rev
Log:
Add new ERP5Site_checkDataWithScript script to erp5_core.
It is tested in testERP5Base (ERP5).
Added:
erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_makeActiveResult.xml (with props)
erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ERP5Site_checkDataWithScript.xml (with props)
Modified:
erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision
erp5/trunk/products/ERP5/tests/testERP5Base.py
Added: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_makeActiveResult.xml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_makeActiveResult.xml?rev=21497&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_makeActiveResult.xml (added)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_makeActiveResult.xml Wed Jun 11 15:35:17 2008
@@ -1,0 +1,161 @@
+<?xml version="1.0"?>
+<ZopeData>
+ <record id="1" aka="AAAAAAAAAAE=">
+ <pickle>
+ <tuple>
+ <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+ <tuple/>
+ </tuple>
+ </pickle>
+ <pickle>
+ <dictionary>
+ <item>
+ <key> <string>Python_magic</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>Script_magic</string> </key>
+ <value> <int>3</int> </value>
+ </item>
+ <item>
+ <key> <string>__ac_local_roles__</string> </key>
+ <value>
+ <none/>
+ </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>_body</string> </key>
+ <value> <string>from Products.CMFActivity.ActiveResult import ActiveResult\n
+active_result = ActiveResult()\n
+severity = len(error_list)\n
+if severity == 0:\n
+ summary = "No error"\n
+else:\n
+ summary = "Error"\n
+active_result.edit(summary=summary, severity=severity, detail=\'\\n\'.join(error_list))\n
+return active_result\n
+</string> </value>
+ </item>
+ <item>
+ <key> <string>_code</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>_filepath</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>_owner</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>_params</string> </key>
+ <value> <string>title, error_list</string> </value>
+ </item>
+ <item>
+ <key> <string>errors</string> </key>
+ <value>
+ <tuple/>
+ </value>
+ </item>
+ <item>
+ <key> <string>func_code</string> </key>
+ <value>
+ <object>
+ <klass>
+ <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+ </klass>
+ <tuple/>
+ <state>
+ <dictionary>
+ <item>
+ <key> <string>co_argcount</string> </key>
+ <value> <int>2</int> </value>
+ </item>
+ <item>
+ <key> <string>co_varnames</string> </key>
+ <value>
+ <tuple>
+ <string>title</string>
+ <string>error_list</string>
+ <string>Products.CMFActivity.ActiveResult</string>
+ <string>ActiveResult</string>
+ <string>active_result</string>
+ <string>len</string>
+ <string>severity</string>
+ <string>summary</string>
+ <string>_getattr_</string>
+ </tuple>
+ </value>
+ </item>
+ </dictionary>
+ </state>
+ </object>
+ </value>
+ </item>
+ <item>
+ <key> <string>func_defaults</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>id</string> </key>
+ <value> <string>Base_makeActiveResult</string> </value>
+ </item>
+ <item>
+ <key> <string>warnings</string> </key>
+ <value>
+ <tuple/>
+ </value>
+ </item>
+ </dictionary>
+ </pickle>
+ </record>
+</ZopeData>
Propchange: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_makeActiveResult.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/Base_makeActiveResult.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ERP5Site_checkDataWithScript.xml
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ERP5Site_checkDataWithScript.xml?rev=21497&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ERP5Site_checkDataWithScript.xml (added)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ERP5Site_checkDataWithScript.xml Wed Jun 11 15:35:17 2008
@@ -1,0 +1,280 @@
+<?xml version="1.0"?>
+<ZopeData>
+ <record id="1" aka="AAAAAAAAAAE=">
+ <pickle>
+ <tuple>
+ <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+ <tuple/>
+ </tuple>
+ </pickle>
+ <pickle>
+ <dictionary>
+ <item>
+ <key> <string>Python_magic</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>Script_magic</string> </key>
+ <value> <int>3</int> </value>
+ </item>
+ <item>
+ <key> <string>__ac_local_roles__</string> </key>
+ <value>
+ <none/>
+ </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>_body</string> </key>
+ <value> <string encoding="cdata"><![CDATA[
+
+"""Recursively call a script on all subobjects.\n
+\n
+From document pointed to by \'relative_url\':\n
+- If its depth is 1 (ie no slash) and \'id_list\' isn\'t empty, immediately call a\n
+ script (\'method_id\') on all objects given by id_list. Also call it\n
+ recursively on subobjects if \'recursive\' is true.\n
+- Else, forward this call to its subobjects, which are given by \'id_list\'.\n
+ If id_list is None:\n
+ - if \'relative_url\' points to a HBTree and if \'full\' is false,\n
+ all subobjects for last \'hbtree_days\' are considered.\n
+ - else, all subobjects are considered.\n
+\n
+ method_id - Script to call.\n
+ method_kw - Dict containing arguments for \'method_id\'.\n
+ packet - Maximum size (in number of objects to process)\n
+ of created activities.\n
+\n
+For the portal, \'relative_url\' must be false and only module objects are\n
+considered if id_list is None.\n
+"""\n
+\n
+document = context.getPortalObject()\n
+if relative_url:\n
+ document = document.restrictedTraverse(relative_url)\n
+ depth = len(relative_url.split(\'/\'))\n
+else:\n
+ depth = 0\n
+\n
+maximum_depth = 1\n
+\n
+assert depth <= maximum_depth\n
+\n
+def activate(**kw):\n
+ return context.activate(activity=\'SQLQueue\', lonely=1, tag=tag, **kw)\n
+\n
+if depth == maximum_depth and id_list:\n
+ # Immediate recursive check\n
+ error_list = []\n
+ if method_kw is None:\n
+ method_kw = {}\n
+ def recurse(document):\n
+ error_list.extend(getattr(document, method_id)(**method_kw))\n
+ if recursive:\n
+ for subdocument in document.objectValues():\n
+ recurse(subdocument)\n
+ for id in id_list:\n
+ recurse(document[id])\n
+ if active_process is None:\n
+ return error_list\n
+ if len(error_list):\n
+ # Create an activity to update active_process,\n
+ # in order to prevent conflict errors.\n
+ activate(active_process=active_process, priority=2) \\\n
+ .Base_asActiveResult(title=relative_url, error_list=error_list)\n
+else:\n
+ if id_list is None:\n
+ if full or not getattr(document, \'isHBTree\', lambda: 0)():\n
+ id_list = document.objectIds()\n
+ if not depth:\n
+ id_list = tuple(x for x in id_list if x.endswith(\'_module\'))\n
+ else:\n
+ from DateTime import DateTime\n
+ id_list = []\n
+ for day_ago in xrange(hbtree_days):\n
+ date = (DateTime()-day_ago).strftime(\'%Y%m%d\')\n
+ context.log(\'date for objectIds\', date)\n
+ try:\n
+ id_list += document.objectIds(base_id=date)\n
+ except (TypeError, IndexError):\n
+ pass\n
+\n
+ if active_process is None:\n
+ active_process = context.newActiveProcess().getPath()\n
+ kw = dict(relative_url=relative_url, active_process=active_process,\n
+ tag=tag, full=full, recursive=recursive, packet=packet,\n
+ method_id=method_id, method_kw=method_kw)\n
+ if depth < maximum_depth:\n
+ packet = 1\n
+ relative_url = relative_url and relative_url + \'/\' or \'\'\n
+ for i in xrange(0, len(id_list), packet):\n
+ if packet == 1:\n
+ kw[\'relative_url\'] = relative_url + id_list[i]\n
+ else:\n
+ kw[\'id_list\'] = tuple(id_list[i:i+packet])\n
+ activate(priority=4).ERP5Site_checkDataWithScript(**kw)\n
+
+
+]]></string> </value>
+ </item>
+ <item>
+ <key> <string>_code</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>_filepath</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>_owner</string> </key>
+ <value>
+ <none/>
+ </value>
+ </item>
+ <item>
+ <key> <string>_params</string> </key>
+ <value> <string>method_id, relative_url=None, active_process=None, id_list=None, full=0, recursive=1, tag=None, packet=30, hbtree_days=3, method_kw=None</string> </value>
+ </item>
+ <item>
+ <key> <string>errors</string> </key>
+ <value>
+ <tuple/>
+ </value>
+ </item>
+ <item>
+ <key> <string>func_code</string> </key>
+ <value>
+ <object>
+ <klass>
+ <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+ </klass>
+ <tuple/>
+ <state>
+ <dictionary>
+ <item>
+ <key> <string>co_argcount</string> </key>
+ <value> <int>10</int> </value>
+ </item>
+ <item>
+ <key> <string>co_varnames</string> </key>
+ <value>
+ <tuple>
+ <string>method_id</string>
+ <string>relative_url</string>
+ <string>active_process</string>
+ <string>id_list</string>
+ <string>full</string>
+ <string>recursive</string>
+ <string>tag</string>
+ <string>packet</string>
+ <string>hbtree_days</string>
+ <string>method_kw</string>
+ <string>_getattr_</string>
+ <string>context</string>
+ <string>document</string>
+ <string>len</string>
+ <string>depth</string>
+ <string>maximum_depth</string>
+ <string>AssertionError</string>
+ <string>activate</string>
+ <string>error_list</string>
+ <string>None</string>
+ <string>recurse</string>
+ <string>_getiter_</string>
+ <string>id</string>
+ <string>_getitem_</string>
+ <string>getattr</string>
+ <string>tuple</string>
+ <string>DateTime</string>
+ <string>xrange</string>
+ <string>day_ago</string>
+ <string>date</string>
+ <string>_inplacevar_</string>
+ <string>TypeError</string>
+ <string>IndexError</string>
+ <string>dict</string>
+ <string>kw</string>
+ <string>i</string>
+ <string>_write_</string>
+ <string>_apply_</string>
+ </tuple>
+ </value>
+ </item>
+ </dictionary>
+ </state>
+ </object>
+ </value>
+ </item>
+ <item>
+ <key> <string>func_defaults</string> </key>
+ <value>
+ <tuple>
+ <none/>
+ <none/>
+ <none/>
+ <int>0</int>
+ <int>1</int>
+ <none/>
+ <int>30</int>
+ <int>3</int>
+ <none/>
+ </tuple>
+ </value>
+ </item>
+ <item>
+ <key> <string>id</string> </key>
+ <value> <string>ERP5Site_checkDataWithScript</string> </value>
+ </item>
+ <item>
+ <key> <string>warnings</string> </key>
+ <value>
+ <tuple/>
+ </value>
+ </item>
+ </dictionary>
+ </pickle>
+ </record>
+</ZopeData>
Propchange: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ERP5Site_checkDataWithScript.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: erp5/trunk/products/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ERP5Site_checkDataWithScript.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Modified: erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision?rev=21497&r1=21496&r2=21497&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision (original)
+++ erp5/trunk/products/ERP5/bootstrap/erp5_core/bt/revision Wed Jun 11 15:35:17 2008
@@ -1,1 +1,1 @@
-840
+841
Modified: erp5/trunk/products/ERP5/tests/testERP5Base.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testERP5Base.py?rev=21497&r1=21496&r2=21497&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testERP5Base.py (original)
+++ erp5/trunk/products/ERP5/tests/testERP5Base.py Wed Jun 11 15:35:17 2008
@@ -34,7 +34,7 @@
from Products.ERP5Type.Utils import convertToUpperCase
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from Products.ERP5Type.tests.Sequence import SequenceList
-from Products.ERP5Type.tests.utils import FileUpload
+from Products.ERP5Type.tests.utils import createZODBPythonScript, FileUpload
from AccessControl.SecurityManagement import newSecurityManager
class TestERP5Base(ERP5TypeTestCase):
@@ -1171,6 +1171,33 @@
self.assertNotEquals(None, assignment.getStopDate())
self.assertEquals(DateTime().day(), assignment.getStopDate().day())
+ def test_ERP5Site_checkDataWithScript(self):
+ test = 'test_ERP5Site_checkDataWithScript'
+ createZODBPythonScript(self.getSkinsTool().custom, test, '',
+ 'return context.getRelativeUrl(),')
+
+ organisation = self.getOrganisationModule() \
+ .newContent(portal_type='Organisation')
+ organisation.setDefaultAddressCity('Lille')
+ organisation.setDefaultAddressZipCode('59000')
+ person = self.getPersonModule().newContent(portal_type='Person')
+ person.setDefaultEmailText('nobody at example.com')
+
+ portal_activities = self.getActivityTool()
+ active_process = portal_activities.newActiveProcess()
+ portal_activities.ERP5Site_checkDataWithScript(method_id=test, tag=test,
+ active_process=active_process.getPath())
+ self.tic()
+ relative_url_list = sum((x.detail.split('\n')
+ for x in active_process.getResultList()), [])
+
+ self.assertEquals(len(relative_url_list), len(set(relative_url_list)))
+ for obj in organisation, person, person.getDefaultEmailValue():
+ self.assertTrue(obj.getRelativeUrl() in relative_url_list)
+ for relative_url in relative_url_list:
+ self.assertTrue('/' in relative_url)
+ self.assertNotEquals(None, self.portal.unrestrictedTraverse(relative_url))
+
def test_suite():
suite = unittest.TestSuite()
More information about the Erp5-report
mailing list