From 68f2c8895527e7352fb90a9064f5f6f845d3c7e4 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 6 Apr 2016 17:50:21 +0200 Subject: [PATCH] fix non determinism when importing wscall workflow actions (#10477) --- tests/test_workflow_import.py | 3 ++- wcs/wf/wscall.py | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/test_workflow_import.py b/tests/test_workflow_import.py index af79690..704d03c 100644 --- a/tests/test_workflow_import.py +++ b/tests/test_workflow_import.py @@ -2,6 +2,7 @@ import sys import shutil import StringIO import xml.etree.ElementTree as ET +from collections import OrderedDict from quixote import cleanup from wcs import publisher @@ -306,7 +307,7 @@ def test_wscall_action(): wscall.varname = 'varname' wscall.post = False wscall.request_signature_key = 'key' - wscall.post_data = {'one': '1', 'two': '=2', 'good:name': 'ok'} + wscall.post_data = OrderedDict((('one', '1'), ('two', '=2'), ('good:name', 'ok'))) st1.items.append(wscall) wscall.parent = st1 diff --git a/wcs/wf/wscall.py b/wcs/wf/wscall.py index 0389085..5d2ef6d 100644 --- a/wcs/wf/wscall.py +++ b/wcs/wf/wscall.py @@ -20,6 +20,7 @@ import sys import traceback import xml.etree.ElementTree as ET +from collections import OrderedDict from quixote.html import TemplateIO, htmltext from qommon.errors import ConnectionError from qommon.form import * @@ -122,7 +123,7 @@ class WebserviceCallStatusItem(WorkflowStatusItem): if 'post_data' in parameters: form.add(WidgetDict, '%spost_data' % prefix, title=_('Post data'), - value=self.post_data or {}) + value=dict(self.post_data or {})) if 'varname' in parameters: form.add(VarnameWidget, '%svarname' % prefix, title=_('Variable Name'), value=self.varname) @@ -179,7 +180,7 @@ class WebserviceCallStatusItem(WorkflowStatusItem): # if self.post_data exists, post_data is a dict built from it if self.post_data: - post_data = {} + post_data = OrderedDict() for (key, value) in self.post_data.items(): try: post_data[key] = self.compute(value, raises=True) @@ -311,7 +312,7 @@ class WebserviceCallStatusItem(WorkflowStatusItem): def post_data_init_with_xml(self, elem, charset, include_id=False): if elem is None: return - self.post_data = {} + self.post_data = OrderedDict() for item in elem.findall('item'): key = item.find('name').text.encode(charset) value = item.find('value').text.encode(charset) -- 2.1.4