Commit 899234ad authored by Vincent Pelletier's avatar Vincent Pelletier

Alarm_acceptSubmittedCredentialList: Activate "accept" transition.

This removes the need for limitting the number of documents to
process in a single transaction, thanks to searchAndActivate.
Also, handle catalog desynchronisation gracefuly in the event
of accept/accept race condition.
parent 0c5ca725
master DateTime.equalTo_fix TMP-2to3 UpdateValidationStateFromConsistency UserPropertySheet_backward_compatibility addToDate_implicit_localtime add_boolean_type allow_login_change allow_login_change_wip arnau arnau-RD-Components-CacheTool arnau-RD-Components-ERP5Form-ERP5Report arnau-RD-Components-ERP5Form-SelectionTool-MemcachedTool arnau-RD-Components-ERP5OOo arnau-RD-Components-PreferenceTool-Preference arnau-RD-Components-Products-import-compat arnau-RD-Components-astroid_cache_per_component_reset arnau-RD-Components-erp5_crm arnau-RD-Components-erp5_trade-TODO-Interactor arnau-RD-ERP5ify-portal_workflow-1-seb-merged-with-recent-master arnau-RD-ERP5ify-portal_workflow-2-do-not-rename-erp5_workflow-portal_types arnau-RD-ERP5ify-portal_workflow-BAK arnau-RD-ERP5ify-portal_workflow-WIP arnau-RD-ERP5ify-portal_workflow-WITHOUT-MIGRATION arnau-RD-ERP5ify-portal_workflow-WORKFLOWS-NOT-MIGRATED arnau-RD-py3-master-TM arnau-RD-py3-master-TM-BAK arnau-RD-py3-master-WIP arnau-RD-py3-master-WIP-BAK arnau-RD-py3-master-WIP-bt5-and-tests arnau-RD-zope4py3 arnau-TM-Components-Migrate-PortalTransforms arnau-TM-Components-ModuleSecurityInfo arnau-TM-FEC-output arnau-TM-WIP arnau-TM-isBuildable-with-multiple-BusinessLinks arnau-TM-newContent-temp_object arnau-TM-runUnitTest-clear-previous-execution-catalog arnau-TM-wkhtmltopdf arnau-WIP arnau-kns arnau-kns-without-property-mapping arnau-my2to3 arnau-real-time-inventory-accounting arnau-zope4py2 aurel-zope4py2 auto_extend_select_list autoflake backup_erp5_workflow bk_erp5ish_actions_tool bk_sqlcatalog bt5_config cache-control-304-response callable-jupyter-storage catalog_filter catalog_fulltext catalog_fulltext_old cedric cedriclen-eos cherry-pick-4a8e045d clean_up_upgrader cleanup_acquisition_base_category cribjs-bootloader datetimefield delivery_item_barcode douglas_forum dream_distributor drop-ZServer dsn-phase3 e2e-erp5 enhance_scalability_testing eos-dev erp5-component erp5-component-bak erp5-forum erp5-imt erp5-messenger erp5-preference erp5-release erp5-slapos-upgrade erp5-vifib erp5-vifib-cleanup erp5-vifib-no-Products.DCWorkflowGraph erp5-vifib-py3 erp5_catalog erp5_catalog_final erp5_corporate_identity erp5_drone_simulator erp5_free_subscription erp5_hal_json_style_fix_restricted_access_with_traverse erp5_payslip_migration erp5_workflow erp5testnode_max_timeout feat/coding_style_test feat/dedup_roles_in_pickles feat/dms_implicit_predecessor_successor_fields feat/erp5_ide feat/erp5pt feat/fsum feat/improve_rounding_tool feat/inventory_api_group_by_time_interval_list feat/lxml-html-snapshot feat/mariadb-10.11 feat/mariadb-10.11bis feat/mariadb-10.11ter feat/mariadb-10.5 feat/mariadb-10.6 feat/mariadb-11.4bis feat/mariadb-11.4bis-old feat/mariadb-11.4ter feat/notification-message-ignore-missing feat/olapy feat/python_language_support feat/reindexlastobjects_log feat/round_half_up feat/selenium-unexpected-success feat/slapos_agent_distributor feat/subject_set_query feature/renderjs-ui-no-header fix/GHSA-g5vw-3h65-2q3v fix/TALES_hide_error fix/ZMI_editor_preference fix/accounting-fec-no-line fix/advance_ecommerce_coding_crimes fix/erp5_site_global_id fix/login_validate_check_consistency fix/mariadb-1927 fix/measure-optional-variation fix/monaco-altClick fix/officejs_support_request_rss_secu fix/payment_build_round fix/state_var fix/support-request-app-empty fix/testnode_proctitle fix/workflow_info fix/workflow_method_security fix_web_illustration for_testrunner_1 for_testrunner_2 for_testrunner_3 gadget-json-value graphic_gadget_js hotfix/rjs-formfields-padding improve_default_caching_policy_manager initsite inventory isDeletable jerome_graph_editor_renderjs jerome_user_preference_time_zone jm/form-action-guard js-ui kns limit_accelerated_http_cache_manager listbox_url lle-bout/metadata-modules macros_fix master_w mic_wind monitoring-graph mr1362 my2to3 no_longer_simulated_state notebook_roque oauth-login-minor-improvement officejs override_cache_control_header_by_caching_policy_manager poc/json-forms-study portal_callables portal_solver_process_security_configuration publish_recursiveReindexObject refactor/base_edit reindex_calendar_after_change_calendar_exception restore-from-trashbin revert-192c2000 revert-38554dbe rfc/activate_default rjs_listbox_sort_icon roque_quick scalability-master scalability-roque scalability-roque-2 scalability-run-command scalability_crash_mariadb shop-box shop-box-rebase streaming_fix streaming_fix-0 support_legacy_sftp_server support_relative_url_in_hyperlink_field support_request taskdistribution-xmlrpc-binary test-renderjs-float-field-step test_cmfactivity_isolation_level test_dynamic_methods testnode_software_link timezones tomo_testnode_slap_request translatable_path_master tristan tristan-merge trustable-x-forwarded-for ttrm unify_predicate_edit view-aggregated-amounts vivekpab_renderjs_interfaces wenjie wenjie_branch without_legacy_workflow workaround_mroonga_14 wsgi wsgi-gevent wsgi_backport_setbody_lock wsgi_medusa_stream_fix zope2 zope2zope4py2 zope4py3 zope4py3-BEFORE-CLEANUP zope4py3-master-rebase 0.4.59.1 0.4.59 test-ui test-rjsacc test-rjs renderjs-test nexedi-erp5-vifib-20201105 erp5.util-0.4.77 erp5.util-0.4.76 erp5.util-0.4.75 erp5.util-0.4.74 erp5.util-0.4.73 erp5.util-0.4.72 erp5.util-0.4.71 erp5.util-0.4.69 erp5.util-0.4.68 erp5.util-0.4.67 erp5.util-0.4.66 erp5.util-0.4.65 erp5.util-0.4.64 erp5.util-0.4.63 erp5.util-0.4.62 erp5.util-0.4.61 erp5.util-0.4.60 erp5.util-0.4.59.1 erp5.util-0.4.59 erp5.util-0.4.58 erp5.util-0.4.57 erp5.util-0.4.56 erp5.util-0.4.55 erp5.util-0.4.54 erp5.util-0.4.53 erp5.util-0.4.52 erp5.util-0.4.49 erp5.util-0.4.46 erp5.util-0.4.44 erp5.util-0.4.43 erp5.util-0.4.41 erp5.util-0.4.40 erp5-vifib-20240326 erp5-vifib-20230331 erp5-vifib-20230201 erp5-vifib-20220526 erp5-vifib-20220302 erp5-vifib-20210707 erp5-vifib-20201229 erp5-vifib-20200129
No related merge requests found
......@@ -50,57 +50,34 @@
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>limit = context.getProperty(\'limit\', 100)\n
<value> <string>portal = context.getPortalObject()\n
portal_preferences = portal.portal_preferences\n
searchAndActivate_ = portal.portal_catalog.searchAndActivate\n
def searchAndActivate(**kw):\n
searchAndActivate_(\'Credential_accept\', **kw)\n
\n
portal = context.getPortalObject()\n
portal_type_list = []\n
if portal_preferences.getPreferredCredentialRequestAutomaticApproval():\n
portal_type_list.append(\'Credential Request\')\n
if portal_preferences.getPreferredCredentialRecoveryAutomaticApproval():\n
portal_type_list.append(\'Credential Recovery\')\n
if portal_type_list:\n
searchAndActivate(\n
portal_type=portal_type_list,\n
validation_state=\'submitted\',\n
)\n
\n
if portal.portal_preferences.getPreferredCredentialRequestAutomaticApproval():\n
module = context.getDefaultModule(\'Credential Request\')\n
result = module.searchFolder(portal_type=\'Credential Request\',\n
validation_state=\'submitted\',\n
limit=limit)\n
for document in result:\n
if document.getValidationState() == \'submitted\':\n
document.accept()\n
\n
if portal.portal_preferences.getPreferredPersonCredentialUpdateAutomaticApproval() and \\\n
portal.portal_preferences.getPreferredOrganisationCredentialUpdateAutomaticApproval():\n
module = context.getDefaultModule(\'Credential Update\')\n
result = module.searchFolder(portal_type=\'Credential Update\',\n
validation_state=\'submitted\',\n
limit=limit)\n
for document in result:\n
if document.getValidationState() == \'submitted\':\n
document.accept()\n
elif portal.portal_preferences.getPreferredPersonCredentialUpdateAutomaticApproval() and \\\n
not portal.portal_preferences.getPreferredOrganisationCredentialUpdateAutomaticApproval():\n
module = context.getDefaultModule(\'Credential Update\')\n
result = module.searchFolder(portal_type=\'Credential Update\',\n
validation_state=\'submitted\',\n
limit=limit)\n
for document in result:\n
if document.getDestinationDecisionValue().getPortalType() == \'Person\':\n
if document.getValidationState() == \'submitted\':\n
document.accept()\n
elif not portal.portal_preferences.getPreferredPersonCredentialUpdateAutomaticApproval() and \\\n
portal.portal_preferences.getPreferredOrganisationCredentialUpdateAutomaticApproval():\n
module = context.getDefaultModule(\'Credential Update\')\n
result = module.searchFolder(portal_type=\'Credential Update\',\n
validation_state=\'submitted\',\n
limit=limit)\n
for document in result:\n
if document.getDestinationDecisionValue().getPortalType() == \'Organisation\':\n
if document.getValidationState() == \'submitted\':\n
document.accept()\n
\n
if portal.portal_preferences.getPreferredCredentialRecoveryAutomaticApproval():\n
module = context.getDefaultModule(\'Credential Recovery\')\n
result = module.searchFolder(portal_type=\'Credential Recovery\',\n
validation_state=\'submitted\',\n
limit=limit)\n
for document in result:\n
if document.getValidationState() == \'submitted\':\n
document.accept()\n
credential_update_destination_decision_portal_type_list = []\n
if portal_preferences.getPreferredPersonCredentialUpdateAutomaticApproval():\n
credential_update_destination_decision_portal_type_list.append(\'Person\')\n
if portal_preferences.getPreferredOrganisationCredentialUpdateAutomaticApproval():\n
credential_update_destination_decision_portal_type_list.append(\'Organisation\')\n
if credential_update_destination_decision_portal_type_list:\n
searchAndActivate(\n
portal_type=\'Credential Update\',\n
destination_decision_portal_type=credential_update_destination_decision_portal_type_list,\n
validation_state=\'submitted\',\n
)\n
</string> </value>
</item>
<item>
......
<?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
Intent is to ignore accept/accept race conditions but complain about\n
any other race condition (ex: accept/reject).\n
"""\n
if context.getValidationState() != \'accepted\':\n
context.accept()\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Credential_accept</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
436
437
\ No newline at end of file
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