Commit 94f0d133 authored by Rafael Monnerat's avatar Rafael Monnerat

Re-implement assert dumped configuration

See merge request nexedi/slapos.core!430
parents c27cce14 9712c9ea
portal = context.getPortalObject()
import difflib
current_confguration = portal.ERP5Site_saveDumpedConfiguration(save=0)
try:
save_file = portal.document_module[filename]
except KeyError:
raise ValueError("You must save the dumped configuration first with ERP5Site_saveDumpedConfiguration")
def resolveDiff(title, expected_file, found):
expected = str(expected_file.data)
return """########################################################################
# %s
########################################################################
%s
########################################################################
""" % (title, '\n'.join(difflib.unified_diff(expected.split("\n"), found.split("\n"))))
if show_all or configuration == "alarm":
expected_file = portal.expected_alarm_tool_dumped_configuration
found = portal.ERP5Site_dumpAlarmToolConfiguration()
print resolveDiff("Alarm Configuration Diff", expected_file, found)
if show_all or configuration == "builder":
expected_file = portal.expected_builder_dumped_configuration
found = portal.ERP5Site_dumpBuilderList()
print resolveDiff("Builder Configuration Diff", expected_file, found)
if show_all or configuration == "bt":
expected_file = portal.expected_business_template_dumped_configuration
found = portal.ERP5Site_dumpInstalledBusinessTemplateList(
ignore_business_template_list=["rapid_space_web_site",
'erp5_ui_test_core',
'slapos_vifib',
'slapos_jio_zh_ui_test',
'slapos_jio_ui_test',
'rapid_space_ui_test'])
print resolveDiff("Business Template Configuration Diff", expected_file, found)
if show_all or configuration == "order_builder":
expected_file = portal.expected_order_builder_dumped_configuration
found = portal.ERP5Site_dumpOrderBuilderList()
print resolveDiff("Order Builder Configuration Diff", expected_file, found)
if show_all or configuration == "property_sheet":
expected_file = portal.expected_property_sheet_dumped_configuration
found = portal.ERP5Site_dumpPropertySheetList(
ignore_property_sheet_list=["Foo"]
)
print resolveDiff("Property Sheet Configuration Diff", expected_file, found)
if show_all or configuration == "skins":
expected_file = portal.expected_portal_skins_dumped_configuration
found = portal.ERP5Site_dumpPortalSkinsContent(
ignore_folder_list=[
"rapid_space",
"slapos_vifib",
"rapid_space_ui_test",
"slapos_ui_test",
"slapos_zh_ui_test",
"erp5_web_renderjs_ui_test_core"
],
ignore_skin_list=[
"expected_alarm_tool_dumped_configuration",
"expected_builder_dumped_configuration",
"expected_business_template_dumped_configuration",
"expected_order_builder_dumped_configuration",
"expected_portal_skins_dumped_configuration",
"expected_portal_type_dumped_configuration",
"expected_property_sheet_dumped_configuration",
"expected_role_dumped_configuration",
"expected_rule_dumped_configuration",
"expected_skin_property_dumped_configuration",
"expected_type_actions_dumped_configuration",
"expected_web_page_module_configuration",
"expected_workflow_dumped_configuration",
]
)
print resolveDiff("Skins Configuration Diff", expected_file, found)
if show_all or configuration == "web_content":
expected_file = portal.expected_web_page_module_configuration
found = portal.ERP5Site_dumpWebPageModuleContent(
ignore_string_on_reference_list=["rapid_"])
print resolveDiff("Web Content Configuration Diff", expected_file, found)
if show_all or configuration == "actions":
expected_file = portal.expected_type_actions_dumped_configuration
found = portal.ERP5Site_dumpPortalTypeActionList()
print resolveDiff("Portal Type Actions Configuration Diff", expected_file, found)
if show_all or configuration == "portal_type":
expected_file = portal.expected_portal_type_dumped_configuration
found = portal.ERP5Site_dumpPortalTypeList()
print resolveDiff("Portal Type Configuration Diff", expected_file, found)
if show_all or configuration == "role":
expected_file = portal.expected_role_dumped_configuration
found = portal.ERP5Site_dumpPortalTypeRoleList()
print resolveDiff("Role Configuration Diff", expected_file, found)
if show_all or configuration == "rule":
expected_file = portal.expected_rule_dumped_configuration
found = portal.ERP5Site_dumpRuleTesterList()
print resolveDiff("Rule Configuration Diff", expected_file, found)
if show_all or configuration == "skin_property":
expected_file = portal.expected_skin_property_dumped_configuration
found = portal.ERP5Site_dumpSkinProperty(
ignore_skin_folder_list=[
"rapid_space",
"slapos_vifib",
"rapid_space_ui_test",
"slapos_ui_test",
"slapos_zh_ui_test",
"erp5_web_renderjs_ui_test_core"
]
)
print resolveDiff("Skin Property Configuration Diff", expected_file, found)
if show_all or configuration == "workflow":
expected_file = portal.expected_workflow_dumped_configuration
found = portal.ERP5Site_dumpWorkflowChain()
print resolveDiff("Workflow Configuration Diff", expected_file, found)
saved_configuration = save_file.getData()
return printed
return '\n'.join(difflib.unified_diff(saved_configuration.split("\n"), current_confguration.split("\n")))
......@@ -50,7 +50,7 @@
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>configuration=None, show_all=True</string> </value>
<value> <string>filename=\'erp5_dumped_configuration\'</string> </value>
</item>
<item>
<key> <string>id</string> </key>
......
portal = context.getPortalObject()
msg = ""
def render(title, body):
return """########################################################################
# %s
########################################################################
%s
########################################################################
""" % (title, body)
msg += render("Alarm Configuration Diff",
portal.ERP5Site_dumpAlarmToolConfiguration())
msg += render("Builder Configuration Diff",
portal.ERP5Site_dumpBuilderList())
msg += render("Business Template Configuration Diff",
portal.ERP5Site_dumpInstalledBusinessTemplateList())
msg += render("Order Builder Configuration Diff",
portal.ERP5Site_dumpOrderBuilderList())
msg += render("Property Sheet Configuration Diff",
portal.ERP5Site_dumpPropertySheetList())
msg += render("Skins Configuration Diff",
portal.ERP5Site_dumpPortalSkinsContent())
msg += render("Web Content Configuration Diff",
portal.ERP5Site_dumpWebPageModuleContent())
msg += render("Portal Type Actions Configuration Diff",
portal.ERP5Site_dumpPortalTypeActionList())
msg += render("Portal Type Configuration Diff",
portal.ERP5Site_dumpPortalTypeList())
msg += render("Role Configuration Diff",
portal.ERP5Site_dumpPortalTypeRoleList())
msg += render("Rule Configuration Diff",
portal.ERP5Site_dumpRuleTesterList())
msg += render("Skin Property Configuration Diff",
portal.ERP5Site_dumpSkinProperty())
msg += render("Workflow Configuration Diff",
portal.ERP5Site_dumpWorkflowChain())
if save:
module = portal.document_module
try:
save_file = portal.document_module['erp5_dumped_configuration']
except KeyError:
backup = 0
save_file = module.document_module.newContent(
id='erp5_dumped_configuration',
portal_type='File')
if backup:
# We should only backup on really special cases
backup_file = module.document_module.newContent(
reference='F-backuped-configuration',
portal_type='File')
backup_file.setData(save_file.getData())
save_file.setData(msg)
return msg
<?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>save=1, backup=0</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ERP5Site_saveDumpedConfiguration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_alarm_tool_dumped_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></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="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_builder_dumped_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expected_builder_dumped_configuration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
erp5_access_token
erp5_accounting
erp5_accounting_l10n_fr
erp5_accounting_l10n_ifrs
erp5_administration
erp5_authentication_policy
erp5_base
erp5_bearer_token
erp5_certificate_authority
erp5_code_mirror
erp5_commerce
erp5_computer_immobilisation
erp5_configurator
erp5_content_translation
erp5_core
erp5_core_proxy_field_legacy
erp5_credential
erp5_credential_oauth2
erp5_crm
erp5_data_set
erp5_deferred_style
erp5_dhtml_style
erp5_dms
erp5_font
erp5_forge
erp5_full_text_mroonga_catalog
erp5_hal_json_style
erp5_immobilisation
erp5_ingestion
erp5_ingestion_mysql_innodb_catalog
erp5_interaction_drop
erp5_invoicing
erp5_item
erp5_jquery
erp5_jquery_plugin_colorpicker
erp5_jquery_plugin_elastic
erp5_jquery_plugin_jqchart
erp5_jquery_plugin_mbmenu
erp5_jquery_plugin_sheet
erp5_jquery_sheet_editor
erp5_jquery_ui
erp5_km
erp5_knowledge_pad
erp5_l10n_fr
erp5_l10n_ja
erp5_l10n_zh
erp5_monaco_editor
erp5_movement_table_catalog
erp5_mysql_innodb_catalog
erp5_oauth
erp5_oauth_facebook_login
erp5_oauth_google_login
erp5_ods_style
erp5_odt_style
erp5_ooo_import
erp5_open_trade
erp5_payzen_secure_payment
erp5_pdm
erp5_project
erp5_property_sheets
erp5_rss_style
erp5_run_my_doc
erp5_secure_payment
erp5_security_uid_innodb_catalog
erp5_simplified_invoicing
erp5_simulation
erp5_slapos_tutorial
erp5_slapos_tutorial_data
erp5_slideshow_style
erp5_software_pdm
erp5_svg_editor
erp5_syncml
erp5_system_event
erp5_tiosafe_core
erp5_trade
erp5_upgrader
erp5_web
erp5_web_download_theme
erp5_web_renderjs_ui
erp5_web_service
erp5_web_shacache
erp5_web_shadir
erp5_wechat_secure_payment
erp5_xhtml_style
slapos_accounting
slapos_category
slapos_cloud
slapos_configurator
slapos_crm
slapos_ecoallocation
slapos_erp5
slapos_jio
slapos_l10n_zh
slapos_mysql_innodb_catalog
slapos_payzen
slapos_pdm
slapos_rss_style
slapos_slap_tool
slapos_subscription_request
slapos_upgrader
slapos_web
slapos_web_deploy
slapos_wechat
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_business_template_dumped_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expected_business_template_dumped_configuration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
slapos_payment_transaction_builder
Title: Payment Builder
Simulation Select Method: OrderBuilder_generateUnrelatedInvoiceList
Delivery Select Method: None
After Generation Script: PaymentTransaction_postOrderBuild
Delivery Module Before Building Script: None
slapos_payment_transaction_builder
Id: category_movement_group_on_delivery
Title: category_movement_group_on_delivery
Type: Category Movement Group
Collect Order Group: delivery
Tested Properties: ['causality', 'destination_payment', 'destination_section', 'price_currency', 'resource', 'source_payment', 'source_section', 'specialise', 'payment_mode']
Update Always: 0
slapos_payment_transaction_builder
Id: category_movement_group_on_line
Title: category_movement_group_on_line
Type: Category Movement Group
Collect Order Group: line
Tested Properties: ['destination', 'source']
Update Always: 0
slapos_payment_transaction_builder
Id: property_movement_group_on_line
Title: property_movement_group_on_line
Type: Property Movement Group
Collect Order Group: line
Tested Properties: ['start_date', 'stop_date']
Update Always: 0
slapos_aggregated_delivery_builder
Title: SlapOS Aggregated Delivery Builder
Simulation Select Method: OrderBuilder_generateSlapOSAggregatedMovementList
Delivery Select Method: OrderBuilder_selectSlapOSAggregatedDeliveryList
After Generation Script: SalePackingList_postSlapOSAggregatedDeliveryBuilder
Delivery Module Before Building Script: None
slapos_aggregated_delivery_builder
Id: category_movement_group_on_delivery
Title: category_movement_group_on_delivery
Type: Category Movement Group
Collect Order Group: delivery
Tested Properties: ['destination', 'destination_decision', 'destination_section', 'price_currency', 'source', 'source_section', 'specialise', 'causality']
Update Always: 0
slapos_aggregated_delivery_builder
Id: category_movement_group_on_line
Title: category_movement_group_on_line
Type: Category Movement Group
Collect Order Group: line
Tested Properties: ['resource']
Update Always: 0
slapos_aggregated_delivery_builder
Id: property_movement_group_on_line
Title: property_movement_group_on_line
Type: Property Movement Group
Collect Order Group: line
Tested Properties: ['price']
Update Always: 0
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_order_builder_dumped_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expected_order_builder_dumped_configuration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_portal_skins_dumped_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expected_portal_skins_dumped_configuration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_portal_type_dumped_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expected_portal_type_dumped_configuration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_property_sheet_dumped_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expected_property_sheet_dumped_configuration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_role_dumped_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expected_role_dumped_configuration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_rule_dumped_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expected_rule_dumped_configuration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_skin_property_dumped_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expected_skin_property_dumped_configuration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_type_actions_dumped_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expected_type_actions_dumped_configuration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_web_page_module_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expected_web_page_module_configuration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="File" module="OFS.Image"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>__name__</string> </key>
<value> <string>expected_workflow_dumped_configuration</string> </value>
</item>
<item>
<key> <string>content_type</string> </key>
<value> <string>text/plain</string> </value>
</item>
<item>
<key> <string>precondition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>expected_workflow_dumped_configuration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
......@@ -47,4 +47,22 @@ class TestSlapOSDump(SlapOSTestCaseMixin):
issue_count += 1
else:
ZopeTestCase._print('Stored dump %s in %s\n' % (dump, location))
self.assertEqual(0, issue_count)
\ No newline at end of file
self.assertEqual(0, issue_count)
def test_save_and_assert(self):
self.beforeDumpExpectedConfiguration()
self.assertRaises(ValueError, self.portal.ERP5Site_assertDumpedConfiguration)
msg = self.portal.ERP5Site_saveDumpedConfiguration()
self.assertEqual('', self.portal.ERP5Site_assertDumpedConfiguration())
ZopeTestCase._print('\n')
filename = 'erp5_dumped_configuration'
try:
location = self.write('%s' % filename, msg)
except Exception:
ZopeTestCase._print(
'Problem with %s\n' % filename)
else:
ZopeTestCase._print(
'Stored dump ERP5Site_saveDumpedConfiguration in %s\n' % (location,))
\ No newline at end of file
......@@ -6,12 +6,6 @@
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>testSlapOSERP5SiteDump</string> </value>
......@@ -55,28 +49,13 @@
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
......@@ -89,7 +68,7 @@
<item>
<key> <string>component_validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
......@@ -98,7 +77,7 @@
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
......
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