Commit 8ddd1e40 authored by Vivien Alger's avatar Vivien Alger

Merge branch 'rafael-configurator'

parents a10dd078 99a968f7
......@@ -58,15 +58,16 @@
alarms to be invoked always.\n
"""\n
alarm_to_solve_list = [\'promise_certificate_autority_tool\',\n
\'promise_conversion_server\'\n
\'promise_kumofs_server\'\n
\'promise_mailhost_configuration\'\n
\'promise_conversion_server\',\n
\'promise_kumofs_server\',\n
\'promise_mailhost_configuration\',\n
\'promise_memcached_server\']\n
\n
for alarm in context.portal_alarms.contentValues():\n
alarm_id = alarm.getId()\n
if alarm_id.startswith("promise_slapos") or \\\n
alarm_id in alarm_to_solve_list:\n
context.log("Solve %s" % alarm_id)\n
alarm.solve()\n
</string> </value>
</item>
......
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2012 Nexedi SA and Contributors. All Rights Reserved.
#
##############################################################################
from Products.SlapOS.tests.testSlapOSMixin import \
testSlapOSMixin, withAbort
from zExceptions import Unauthorized
from DateTime import DateTime
import os
import time
class TestSlapOSConfigurator(testSlapOSMixin):
def testConfiguredVolatileCache(self):
"""
Make sure Memcached is configured
"""
from Products.ERP5Type.tests.ERP5TypeTestCase import \
_getVolatileMemcachedServerDict
memcached_tool = self.getPortal().portal_memcached
connection_dict = _getVolatileMemcachedServerDict()
url_string = '%(hostname)s:%(port)s' % connection_dict
self.assertEquals(memcached_tool.default_memcached_plugin.getUrlString(),
url_string)
def testConfiguredPersistentCache(self):
"""
Make sure Kumofs is configured
"""
from Products.ERP5Type.tests.ERP5TypeTestCase import\
_getPersistentMemcachedServerDict
memcached_tool = self.getPortal().portal_memcached
connection_dict = _getPersistentMemcachedServerDict()
url_string = '%(hostname)s:%(port)s' % connection_dict
self.assertEquals(memcached_tool.persistent_memcached_plugin.getUrlString(),
url_string)
def testConfiguredConversionServer(self):
"""
Make sure Conversion Server (Cloudooo) is
well configured
"""
from Products.ERP5Type.tests.ERP5TypeTestCase import\
_getConversionServerDict
# set preference
preference_tool = self.portal.portal_preferences
conversion_dict = _getConversionServerDict()
self.assertEquals(preference_tool.getPreferredOoodocServerAddress(),conversion_dict['hostname'])
self.assertEquals(preference_tool.getPreferredOoodocServerPortNumber(), conversion_dict['port'])
def testConfiguredCertificateAuthoring(self):
"""
Make sure Certificate Authoting is
well configured.
"""
self.assertTrue(self.portal.hasObject('portal_certificate_authority'))
self.assertEquals(os.environ['TEST_CA_PATH'],
self.portal.portal_certificate_authority.certificate_authority_path)
def testConfiguredBusinessTemplateList(self):
"""
Make sure Installed business Templates are
what it is expected.
"""
expected_business_template_list = [
'erp5_core',
'erp5_xhtml_style',
'erp5_property_sheets',
'erp5_mysql_innodb_catalog',
'erp5_promise',
'erp5_upgrader',
'slapos_upgrader',
'erp5_full_text_myisam_catalog',
'erp5_core_proxy_field_legacy',
'erp5_base',
'erp5_administration',
'erp5_workflow',
'erp5_configurator',
'slapos_configurator',
'erp5_simulation',
'erp5_pdm',
'erp5_trade',
'erp5_tiosafe_core',
'erp5_item',
'erp5_forge',
'erp5_ingestion_mysql_innodb_catalog',
'erp5_ingestion',
'erp5_crm',
'erp5_system_event',
'erp5_secure_payment',
'erp5_payzen_secure_payment',
'erp5_ooo_import',
'erp5_odt_style',
'erp5_ods_style',
'erp5_jquery',
'erp5_jquery_ui',
'erp5_dhtml_style',
'erp5_knowledge_pad',
'erp5_web',
'erp5_rss_style',
'erp5_dms',
'erp5_content_translation',
'erp5_software_pdm',
'erp5_computer_immobilisation',
'erp5_open_trade',
'erp5_accounting',
'erp5_commerce',
'erp5_xhtml_jquery_style',
'erp5_credential',
'erp5_km',
'erp5_web_download_theme',
'erp5_web_shacache',
'erp5_data_set',
'erp5_web_shadir',
'erp5_accounting',
'erp5_invoicing',
'erp5_simplified_invoicing',
'erp5_credential_oauth2',
'erp5_accounting_l10n_fr',
'erp5_bearer_token',
'erp5_access_token',
'erp5_project',
'slapos_cache',
'slapos_cloud',
'slapos_slap_tool',
'slapos_category',
'slapos_rest_api_tool_portal_type',
'slapos_rest_api',
'slapos_hypermedia',
'slapos_pdm',
'slapos_crm',
'slapos_accounting',
'slapos_payzen',
'slapos_web',
'slapos_erp5',
]
self.assertSameSet(expected_business_template_list,
self.portal.portal_templates.getInstalledBusinessTemplateTitleList())
5
\ No newline at end of file
7
\ No newline at end of file
testSlapOSConfigurator
\ No newline at end of file
erp5_administration
erp5_credential
erp5_project
erp5_ooo_import
erp5_odt_style
erp5_ods_style
erp5_forge
erp5_dhtml_style
slapos_accounting
slapos_cache
slapos_category
......@@ -13,4 +16,5 @@ slapos_crm
slapos_pdm
slapos_web
slapos_payzen
slapos_hypermedia
\ No newline at end of file
slapos_hypermedia
slapos_upgrader
\ No newline at end of file
171
\ No newline at end of file
172
\ No newline at end of file
......@@ -7,4 +7,5 @@ erp5_rss_style
erp5_credential_oauth2
erp5_bearer_token
erp5_access_token
slapos_pdm
\ No newline at end of file
slapos_pdm
slapos_crm
49
\ No newline at end of file
50
\ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Business Configuration" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>resource/workflow_module/vifib_configuration_workflow</string>
</tuple>
</value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>vifib_legacy_configuration</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Business Configuration</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Vifib Master Legacy</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Workflow" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_local_properties</string> </key>
<value>
<tuple>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>state_variable_name</string> </value>
</item>
<item>
<key> <string>type</string> </key>
<value> <string>string</string> </value>
</item>
</dictionary>
</tuple>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>source/workflow_module/vifib_configuration_workflow/1</string>
</tuple>
</value>
</item>
<item>
<key> <string>configuration_after_script_id</string> </key>
<value> <string>BusinessConfiguration_invokePromiseAlarmList</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>The Legacy Vifib configuration workflow, used to setup a former vifib.net Configuration.</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>vifib_configuration_workflow</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Workflow</string> </value>
</item>
<item>
<key> <string>state_base_category</string> </key>
<value> <string>current_state</string> </value>
</item>
<item>
<key> <string>state_variable_name</string> </key>
<value> <string>current_state</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Vifib Master Legacy Configuration Workflow</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="State" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/vifib_configuration_workflow/56</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>1</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>State</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Start</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="State" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/vifib_configuration_workflow/64</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>11</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>State</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Download</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Transition" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>after_script_id</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/vifib_configuration_workflow/11</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>guard_expression</string> </key>
<value> <string>python: True</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>14</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Transition</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Install</string> </value>
</item>
<item>
<key> <string>transition_form_id</string> </key>
<value> <string>BusinessConfiguration_displayDownloadForm</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="State" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_local_properties</string> </key>
<value>
<tuple>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>comment</string> </value>
</item>
<item>
<key> <string>type</string> </key>
<value> <string>string</string> </value>
</item>
</dictionary>
</tuple>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/vifib_configuration_workflow/14</string>
</tuple>
</value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string>Set Customer Business Template</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>29</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>State</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Customer BT</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Transition" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>after_script_id</string> </key>
<value> <string>BusinessConfiguration_setupCustomerBT5</string> </value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/vifib_configuration_workflow/29</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>guard_expression</string> </key>
<value> <string>python: True</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>30</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Transition</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Setup customer BT5</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Variable" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>automatic_update</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>42</string> </value>
</item>
<item>
<key> <string>initial_value</string> </key>
<value> <string>python: member.getUserName()</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Variable</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>actor</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Variable" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>automatic_update</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>43</string> </value>
</item>
<item>
<key> <string>initial_value</string> </key>
<value> <string>python: object.getDateTime()</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Variable</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>time</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Variable" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>automatic_update</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>44</string> </value>
</item>
<item>
<key> <string>initial_value</string> </key>
<value> <string>python: None</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Variable</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>comment</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Variable" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>automatic_update</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>45</string> </value>
</item>
<item>
<key> <string>initial_value</string> </key>
<value> <string>python: None</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Variable</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>error_message</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Variable" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>automatic_update</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>46</string> </value>
</item>
<item>
<key> <string>initial_value</string> </key>
<value> <string>python: request.get(\'configuration_save_url\', None)</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Variable</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>configuration_save_url</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Variable" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_local_properties</string> </key>
<value>
<tuple>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>comment</string> </value>
</item>
<item>
<key> <string>type</string> </key>
<value> <string>string</string> </value>
</item>
</dictionary>
</tuple>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>automatic_update</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>python: (object.transition is not None) and (object.transition.getTransitionFormId() not in [\'\', None])</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>47</string> </value>
</item>
<item>
<key> <string>initial_value</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Variable</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>displayed</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Variable" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>automatic_update</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string>Id of client</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>52</string> </value>
</item>
<item>
<key> <string>initial_value</string> </key>
<value> <string>python: request.get(\'client_id\', None)</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Variable</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>client_id</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="State" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/vifib_configuration_workflow/30</string>
</tuple>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>55</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>State</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Standard BT5</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Transition" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_local_properties</string> </key>
<value>
<tuple>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>comment</string> </value>
</item>
<item>
<key> <string>type</string> </key>
<value> <string>string</string> </value>
</item>
</dictionary>
</tuple>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>after_script_id</string> </key>
<value> <string>BusinessConfiguration_setupVifibStandardBT5</string> </value>
</item>
<item>
<key> <string>before_script_id</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/vifib_configuration_workflow/55</string>
</tuple>
</value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string>Setup all standard bt for ERP5</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>guard_expression</string> </key>
<value> <string>python: True</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>56</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Transition</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Setup standard BT5</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Variable" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>automatic_update</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>59</string> </value>
</item>
<item>
<key> <string>initial_value</string> </key>
<value> <string>python: request.get(\'transition\', None)</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Variable</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>transition</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="State" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>63</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>State</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>End</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Transition" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>destination/workflow_module/vifib_configuration_workflow/63</string>
</tuple>
</value>
</item>
<item>
<key> <string>guard_expression</string> </key>
<value> <string>python: True</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>64</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Transition</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Finalize</string> </value>
</item>
<item>
<key> <string>transition_form_id</string> </key>
<value>
<none/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Embedded File" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_EtagSupport__etag</string> </key>
<value> <string>ts48660187.92</string> </value>
</item>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>content_md5</string> </key>
<value> <string>97bd0f828ffbac2681af0f4bd72cba27</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>image/png</string> </value>
</item>
<item>
<key> <string>data</string> </key>
<value> <string encoding="base64">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</string> </value>
</item>
<item>
<key> <string>height</string> </key>
<value> <int>130</int> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>default_image</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Embedded File</string> </value>
</item>
<item>
<key> <string>size</string> </key>
<value> <int>16864</int> </value>
</item>
<item>
<key> <string>width</string> </key>
<value> <int>176</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_local_properties</string> </key>
<value>
<tuple>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>business_template_skin_layer_priority</string> </value>
</item>
<item>
<key> <string>type</string> </key>
<value> <string>float</string> </value>
</item>
</dictionary>
</tuple>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>business_template_skin_layer_priority</string> </key>
<value> <float>51.0</float> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>vifib_configurator</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_body</string> </key>
<value> <string>"""\n
Solve all alarms which starts with id as "promise_vifib*".\n
\n
(rafael): This approach could be generalized on \n
configurator level, by providing a list of \n
alarms to be invoked always.\n
"""\n
context.BusinessConfiguration_invokeSlapOSMasterPromiseAlarmList()\n
\n
# This script only complements slapos_configurator definition\n
# with the code not yet rebranded/migrated.\n
\n
for alarm in context.portal_alarms.contentValues():\n
alarm_id = alarm.getId()\n
if alarm_id.startswith("promise_vifib"):\n
alarm.solve()\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_invokePromiseAlarmList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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>_body</string> </key>
<value> <string>configuration_save = context.restrictedTraverse(configuration_save_url)\n
\n
bt5_update_catalog_list = (\'erp5_ingestion_mysql_innodb_catalog\',\n
\'slapos_cloud\')\n
\n
bt5_installation_list = bt5_update_catalog_list + (\'vifib_erp5\',)\n
\n
for name in bt5_installation_list:\n
configuration_save.addConfigurationItem("Standard BT5 Configurator Item",\n
title=name, bt5_id=name,\n
update_catalog=(name in bt5_update_catalog_list))\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>configuration_save_url=None, **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>BusinessConfiguration_setupVifibStandardBT5</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Setup standard ERP5 business templates</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
2011-06-06 rafael
* Initial Release
\ No newline at end of file
Copyright (c) 2011 Vifib SARL
\ No newline at end of file
erp5_configurator
slapos_configurator
\ No newline at end of file
Configuration workflow for create a SlapOS master.
\ No newline at end of file
business_configuration_module/vifib_legacy_configuration
workflow_module/vifib_configuration_workflow
workflow_module/vifib_configuration_workflow/**
\ No newline at end of file
vifib_configurator
\ No newline at end of file
vifib_configurator
\ No newline at end of file
Vifib 0.5
\ No newline at end of file
......@@ -53,23 +53,10 @@ class testSlapOSMixin(ERP5TypeTestCase):
self.portal.portal_caches.clearAllCache()
self.portal.portal_workflow.refreshWorklistCache()
def getDefaultSitePreferenceId(self):
"""Default id, usefull method to override
"""
return "slapos_default_system_preference"
def setUpMemcached(self):
from Products.ERP5Type.tests.ERP5TypeTestCase import\
_getVolatileMemcachedServerDict, _getPersistentMemcachedServerDict
memcached_tool = self.getPortal().portal_memcached
# setup default volatile distributed memcached
connection_dict = _getVolatileMemcachedServerDict()
url_string = '%(hostname)s:%(port)s' % connection_dict
memcached_tool.default_memcached_plugin.setUrlString(url_string)
# setup default persistent distributed memcached
connection_dict = _getPersistentMemcachedServerDict()
url_string = '%(hostname)s:%(port)s' % connection_dict
memcached_tool.persistent_memcached_plugin.setUrlString(url_string)
#def getDefaultSitePreferenceId(self):
# """Default id, usefull method to override
# """
# return "slapos_default_system_preference"
def createAlarmStep(self):
def makeCallAlarm(alarm):
......@@ -87,14 +74,8 @@ class testSlapOSMixin(ERP5TypeTestCase):
setattr(self, 'stepCall' + convertToUpperCase(alarm.getId()) \
+ 'Alarm', makeCallAlarm(alarm))
def setupPortalCertificateAuthority(self):
def createCertificateAuthorityFile(self):
"""Sets up portal_certificate_authority"""
if not self.portal.hasObject('portal_certificate_authority'):
self.portal.manage_addProduct['ERP5'].manage_addTool(
'ERP5 Certificate Authority Tool', None)
self.portal.portal_certificate_authority.certificate_authority_path = \
os.environ['TEST_CA_PATH']
transaction.commit()
# reset test CA to have it always count from 0
open(os.path.join(os.environ['TEST_CA_PATH'], 'serial'), 'w').write('01')
open(os.path.join(os.environ['TEST_CA_PATH'], 'crlnumber'), 'w').write(
......@@ -130,6 +111,13 @@ class testSlapOSMixin(ERP5TypeTestCase):
"""
return getattr(self.getPortal(), 'acl_users', None)
def setUpOnce(self):
# Reload promise and include yet another bt5 path.
self.loadPromise(searchable_business_template_list=["erp5_core", "erp5_base", "slapos_configurator"])
self.portal.portal_alarms.promise_template_tool_configuration.solve()
transaction.commit()
self.launchConfigurator()
def afterSetUp(self):
self.login()
self.createAlarmStep()
......@@ -162,16 +150,30 @@ class testSlapOSMixin(ERP5TypeTestCase):
self.portal.email_from_address = 'romain@nexedi.com'
self.portal.email_to_address = 'romain@nexedi.com'
def getBusinessConfiguration(self):
return self.portal.business_configuration_module[\
"slapos_master_configuration_workflow"]
def launchConfigurator(self):
self.login()
# Create new Configuration
business_configuration = self.getBusinessConfiguration()
response_dict = {}
while response_dict.get("command", "next") != "install":
response_dict = self.portal.portal_configurator._next(
business_configuration, {})
transaction.commit()
self.tic()
self.portal.portal_configurator.startInstallation(
business_configuration,REQUEST=self.portal.REQUEST)
def bootstrapSite(self):
self.setupPortalAlarms()
self.setupPortalCertificateAuthority()
self.setUpMemcached()
self.createCertificateAuthorityFile()
self.clearCache()
# Invoke Post-configurator script, this invokes all
# alarms related to configuration.
self.portal.BusinessConfiguration_invokeSlapOSMasterPromiseAlarmList()
transaction.commit()
self.tic()
......@@ -181,71 +183,12 @@ class testSlapOSMixin(ERP5TypeTestCase):
"""
result = [
'erp5_promise',
'erp5_upgrader',
'slapos_upgrader',
'erp5_full_text_myisam_catalog',
'erp5_core_proxy_field_legacy',
'erp5_base',
'erp5_administration',
'erp5_workflow',
'erp5_configurator',
'slapos_configurator',
'erp5_simulation',
'erp5_pdm',
'erp5_trade',
'erp5_tiosafe_core',
'erp5_item',
'erp5_forge',
'erp5_ingestion_mysql_innodb_catalog',
'erp5_ingestion',
'erp5_crm',
'erp5_system_event',
'erp5_secure_payment',
'erp5_payzen_secure_payment',
'erp5_ooo_import',
'erp5_odt_style',
'erp5_ods_style',
'erp5_jquery',
'erp5_jquery_ui',
'erp5_dhtml_style',
'erp5_knowledge_pad',
'erp5_web',
'erp5_rss_style',
'erp5_dms',
'erp5_content_translation',
'erp5_software_pdm',
'erp5_computer_immobilisation',
'erp5_open_trade',
'erp5_accounting',
'erp5_commerce',
'erp5_xhtml_jquery_style',
'erp5_credential',
'erp5_km',
'erp5_web_download_theme',
'erp5_web_shacache',
'erp5_data_set',
'erp5_web_shadir',
'erp5_accounting',
'erp5_invoicing',
'erp5_simplified_invoicing',
'erp5_credential_oauth2',
'erp5_accounting_l10n_fr',
'erp5_bearer_token',
'erp5_access_token',
'erp5_project',
'slapos_cache',
'slapos_cloud',
'slapos_slap_tool',
'slapos_category',
'slapos_rest_api_tool_portal_type',
'slapos_rest_api',
'slapos_hypermedia',
'slapos_pdm',
'slapos_crm',
'slapos_accounting',
'slapos_payzen',
'slapos_web',
'slapos_erp5',
]
return result
......
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