Bug #8172
"fichier invalide" lors de l'import d'un workflow (avec wscall contenant des "post data")
Début:
04 septembre 2015
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Description
le workflow suivant ne s'importe pas
note : il contient une étape appel webservice avec des données supplémentaires "post data"
Fichiers
Révisions associées
Historique
Mis à jour par Thomas Noël il y a plus de 8 ans
- Statut changé de Nouveau à En cours
il y a une premier erreur, un nom de variable illegal (contenant un ":") qui rend le xml invalide.
corrigé, mais j'ai maintenant un crash (enquête en cours)
Mis à jour par Thomas Noël il y a plus de 8 ans
Exception: type = '<type 'exceptions.AssertionError'>', value = '' Stack trace (most recent call first): File "/home/thomas/dev/au-quotidien/wcs/wcs/workflows.py", line 907, in init_with_xml 905 else: 906 # ??? > 907 raise AssertionError 908 setattr(self, attribute, v) 909 else: locals: el = <Element 'post_data' at 0x7f16547ad1d0> attribute = 'post_data' self = <wcs.wf.wscall.WebserviceCallStatusItem object at 0x7f16547e35d0> charset = 'utf-8' elem = <Element 'item' at 0x7f16547ad0d0> include_id = False File "/home/thomas/dev/au-quotidien/wcs/wcs/workflows.py", line 753, in init_with_xml 751 item_o = self.items[-1] 752 item_o.parent = self > 753 item_o.init_with_xml(item, charset, include_id=include_id) 754 755 class WorkflowStatusItem(object): locals: item_type = 'webservice_call' item_o = <wcs.wf.wscall.WebserviceCallStatusItem object at 0x7f16547e35d0> self = <wcs.workflows.WorkflowStatus object at 0x7f16547e3410> charset = 'utf-8' elem = <Element 'status' at 0x7f16547ad110> item = <Element 'item' at 0x7f16547ad0d0> include_id = False visibility_role = <Element 'role' at 0x7f16547aded0> File "/home/thomas/dev/au-quotidien/wcs/wcs/workflows.py", line 379, in import_from_xml_tree 377 status_o = WorkflowStatus() 378 status_o.parent = workflow > 379 status_o.init_with_xml(status, charset, include_id=include_id) 380 workflow.possible_status.append(status_o) 381 locals: status_o = <wcs.workflows.WorkflowStatus object at 0x7f16547e3410> status = <Element 'status' at 0x7f16547ad110> node = <Element 'last_modification' at 0x7f16547adb10> workflow = <Workflow 'Export Maarch via INES' id:None> charset = 'utf-8' tree = <Element 'workflow' at 0x7f1654821b10> role_node = <Element 'role' at 0x7f1654821b90> include_id = False cls = <class 'wcs.workflows.Workflow'> File "/home/thomas/dev/au-quotidien/wcs/wcs/workflows.py", line 342, in import_from_xml 340 except: 341 raise ValueError() > 342 return cls.import_from_xml_tree(tree, include_id=include_id) 343 import_from_xml = classmethod(import_from_xml) 344 locals: fd = <open file '<fdopen>', mode 'w+b' at 0x7f1654ffbf60> tree = <xml.etree.ElementTree.ElementTree object at 0x7f16548019d0> include_id = False cls = <class 'wcs.workflows.Workflow'> File "/home/thomas/dev/au-quotidien/wcs/wcs/admin/workflows.py", line 1160, in import_submit 1158 reason = _(e) 1159 except ValueError: > 1160 error = True 1161 1162 if error: locals: fp = <open file '<fdopen>', mode 'w+b' at 0x7f1654ffbf60> reason = None self = <wcs.admin.workflows.WorkflowsDirectory object at 0x7f165535b450> form = <wcs.qommon.form.Form object at 0x7f165476aa50> error = False File "/home/thomas/dev/au-quotidien/wcs/wcs/admin/workflows.py", line 1123, in p_import 1121 return self.import_submit(form) 1122 except ValueError: > 1123 pass 1124 1125 get_response().breadcrumb.append( ('workflows/', _('Workflows')) ) locals: self = <wcs.admin.workflows.WorkflowsDirectory object at 0x7f165535b450> form = <wcs.qommon.form.Form object at 0x7f165476aa50> File "/usr/lib/pymodules/python2.7/quixote/directory.py", line 67, in _q_traverse 65 raise TraversalError 66 elif hasattr(obj, '__call__'): > 67 return obj() 68 else: 69 return obj locals: component = 'import' self = <wcs.admin.workflows.WorkflowsDirectory object at 0x7f165535b450> obj = <bound method WorkflowsDirectory.p_import of <wcs.admin.workflows.WorkflowsDirectory object at 0x7f165535b450>> name = 'p_import' path = [] File "/usr/lib/pymodules/python2.7/quixote/directory.py", line 63, in _q_traverse 61 if path: 62 if hasattr(obj, '_q_traverse'): > 63 return obj._q_traverse(path) 64 else: 65 raise TraversalError locals: component = 'workflows' self = <modules.backoffice.BackofficeRootDirectory object at 0x7f1654aab9d0> obj = <wcs.admin.workflows.WorkflowsDirectory object at 0x7f165535b450> name = None path = ['import'] File "/usr/lib/pymodules/python2.7/quixote/directory.py", line 91, in _q_traverse 89 def _q_traverse(self, path): 90 self._q_access() > 91 return super(AccessControlled, self)._q_traverse(path) 92 93 locals: path = ['workflows', 'import'] self = <modules.backoffice.BackofficeRootDirectory object at 0x7f1654aab9d0> File "/home/thomas/dev/au-quotidien/wcs/wcs/backoffice/root.py", line 85, in _q_traverse 83 pass 84 get_response().add_javascript(['jquery.js', 'gadjo.sidepage.js']) > 85 return super(RootDirectory, self)._q_traverse(path) 86 87 @classmethod locals: path = ['workflows', 'import'] self = <modules.backoffice.BackofficeRootDirectory object at 0x7f1654aab9d0> File "/usr/lib/pymodules/python2.7/quixote/directory.py", line 63, in _q_traverse 61 if path: 62 if hasattr(obj, '_q_traverse'): > 63 return obj._q_traverse(path) 64 else: 65 raise TraversalError locals: component = 'backoffice' self = <modules.root.AlternateRootDirectory object at 0x7f1654a4bf10> obj = <modules.backoffice.BackofficeRootDirectory object at 0x7f1654aab9d0> name = 'backoffice' path = ['workflows', 'import'] File "/home/thomas/dev/au-quotidien/auquotidien/extra/modules/root.py", line 842, in _q_traverse 840 return redirect('%s%s/%s' % (base_url, f.category.url_name, uri_rest)) 841 > 842 raise e 843 844 locals: path = ['backoffice', 'workflows', 'import'] self = <modules.root.AlternateRootDirectory object at 0x7f1654a4bf10> response = <qommon.http_response.HTTPResponse instance at 0x7f16547d97a0> File "/usr/lib/pymodules/python2.7/quixote/publish.py", line 253, in try_publish 251 permanent=True) 252 components = path[1:].split('/') > 253 output = self.root_directory._q_traverse(components) 254 # The callable ran OK, commit any changes to the session 255 self.finish_successful_request() locals: path = '/backoffice/workflows/import' self = <publisher.WcsPublisher instance at 0x7f165507ba70> request = <qommon.http_request.HTTPRequest instance at 0x7f1654aa4998> components = ['backoffice', 'workflows', 'import'] File "/home/thomas/dev/au-quotidien/wcs/wcs/qommon/publisher.py", line 616, in try_publish 614 for extra_source in self.extra_sources: 615 self.substitutions.feed(extra_source(self, request)) > 616 return Publisher.try_publish(self, request) 617 618 def get_site_language(self): locals: extra_source = <class 'modules.abelium_domino_vars.DominoVariables'> pystatsd = <module 'qommon.vendor.pystatsd' from '/home/thomas/dev/au-quotidien/wcs/wcs/qommon/vendor/pystatsd.pyc'> request = <qommon.http_request.HTTPRequest instance at 0x7f1654aa4998> script_name = '' prefix = 'm' override_template_keys = {'m': 'mobile'} canonical_hostname = 'localhost' self = <publisher.WcsPublisher instance at 0x7f165507ba70> File "/home/thomas/dev/au-quotidien/wcs/wcs/publisher.py", line 215, in try_publish 213 if request.get_header('X_WCS_IFRAME_MODE', '') in ('true', 'yes'): 214 request.response.iframe_mode = True > 215 return QommonPublisher.try_publish(self, request) 216 217 def initialize_sql(self): locals: self = <publisher.WcsPublisher instance at 0x7f165507ba70> request = <qommon.http_request.HTTPRequest instance at 0x7f1654aa4998> File "/usr/lib/pymodules/python2.7/quixote/publish.py", line 281, in process_request 279 except: 280 # Some other exception, generate error messages to the logs, etc. > 281 output = self.finish_failed_request() 282 output = self.filter_output(request, output) 283 self.logger.log_request(request, start_time) locals: start_time = 1441359085.759717 request = <qommon.http_request.HTTPRequest instance at 0x7f1654aa4998> self = <publisher.WcsPublisher instance at 0x7f165507ba70> File "/home/thomas/dev/au-quotidien/wcs/wcs/qommon/publisher.py", line 920, in process 918 def process(self, stdin, env): 919 request = HTTPRequest(stdin, env) > 920 self.response = self.process_request(request) 921 return self.response 922 locals: self = <publisher.WcsPublisher instance at 0x7f165507ba70> stdin = <socket._fileobject object at 0x7f1654a9ab50> request = <qommon.http_request.HTTPRequest instance at 0x7f1654aa4998> env = {'HTTP_REFERER': 'http://localhost:3001/backoffice/workflows/', 'SERVER_SOFTWARE': 'Quixote/2.7b2', 'SCRIPT_NAME': '', 'REQUEST_METHOD': 'POST', 'PATH_INFO': '/backoffice/workflows/import', 'SERVER_PROTOCOL': 'HTTP/1.0', 'CONTENT_LENGTH': '7339', 'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0 Iceweasel/40.0', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE': 'wcs-3b24c9="b736c8c1cf39887c"', 'SERVER_NAME': 'zepo.entrouvert.lan', 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_USER': '1', 'SERVER_PORT': '3001', 'HTTP_CONTENT_LENGTH': '7339', 'HTTP_DNT': '1', 'HTTP_HOST': 'localhost:3001', 'HTTP_CONTENT_TYPE': 'multipart/form-data; boundary=---------------------------8546411703323275252132944908', 'HTTP_ACCEPT': ' text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT_LANGUAGE': 'fr-FR,fr;q=0.8,en-US;q=0.5,en;q=0.3', 'CONTENT_TYPE': 'multipart/form-data; boundary=---------------------------8546411703323275252132944908', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate'} File "/usr/lib/pymodules/python2.7/quixote/server/simple_server.py", line 52, in process 50 51 def process(self, env, include_body=True): > 52 response = get_publisher().process(self.rfile, env) 53 try: 54 self.send_response(response.get_status_code(), locals: self = <qommon.scgi_server.QommonHTTPRequestHandler instance at 0x7f1654a3f0e0> env = {'HTTP_REFERER': 'http://localhost:3001/backoffice/workflows/', 'SERVER_SOFTWARE': 'Quixote/2.7b2', 'SCRIPT_NAME': '', 'REQUEST_METHOD': 'POST', 'PATH_INFO': '/backoffice/workflows/import', 'SERVER_PROTOCOL': 'HTTP/1.0', 'CONTENT_LENGTH': '7339', 'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0 Iceweasel/40.0', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE': 'wcs-3b24c9="b736c8c1cf39887c"', 'SERVER_NAME': 'zepo.entrouvert.lan', 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_USER': '1', 'SERVER_PORT': '3001', 'HTTP_CONTENT_LENGTH': '7339', 'HTTP_DNT': '1', 'HTTP_HOST': 'localhost:3001', 'HTTP_CONTENT_TYPE': 'multipart/form-data; boundary=---------------------------8546411703323275252132944908', 'HTTP_ACCEPT': ' text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT_LANGUAGE': 'fr-FR,fr;q=0.8,en-US;q=0.5,en;q=0.3', 'CONTENT_TYPE': 'multipart/form-data; boundary=---------------------------8546411703323275252132944908', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate'} include_body = True File "/home/thomas/dev/au-quotidien/wcs/wcs/qommon/scgi_server.py", line 79, in process 77 class QommonHTTPRequestHandler(simple_server.HTTPRequestHandler): 78 def process(self, env, include_body=True): > 79 simple_server.HTTPRequestHandler.process(self, env, include_body=include_body) 80 self.publisher.response.process_after_jobs() 81 locals: self = <qommon.scgi_server.QommonHTTPRequestHandler instance at 0x7f1654a3f0e0> env = {'HTTP_REFERER': 'http://localhost:3001/backoffice/workflows/', 'SERVER_SOFTWARE': 'Quixote/2.7b2', 'SCRIPT_NAME': '', 'REQUEST_METHOD': 'POST', 'PATH_INFO': '/backoffice/workflows/import', 'SERVER_PROTOCOL': 'HTTP/1.0', 'CONTENT_LENGTH': '7339', 'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0 Iceweasel/40.0', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE': 'wcs-3b24c9="b736c8c1cf39887c"', 'SERVER_NAME': 'zepo.entrouvert.lan', 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_USER': '1', 'SERVER_PORT': '3001', 'HTTP_CONTENT_LENGTH': '7339', 'HTTP_DNT': '1', 'HTTP_HOST': 'localhost:3001', 'HTTP_CONTENT_TYPE': 'multipart/form-data; boundary=---------------------------8546411703323275252132944908', 'HTTP_ACCEPT': ' text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT_LANGUAGE': 'fr-FR,fr;q=0.8,en-US;q=0.5,en;q=0.3', 'CONTENT_TYPE': 'multipart/form-data; boundary=---------------------------8546411703323275252132944908', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate'} include_body = True File "/usr/lib/pymodules/python2.7/quixote/server/simple_server.py", line 62, in do_POST 60 61 def do_POST(self): > 62 return self.process(self.get_cgi_env('POST')) 63 64 def do_GET(self): locals: self = <qommon.scgi_server.QommonHTTPRequestHandler instance at 0x7f1654a3f0e0> File "/usr/lib/python2.7/BaseHTTPServer.py", line 328, in handle_one_request 326 return 327 method = getattr(self, mname) > 328 method() 329 self.wfile.flush() #actually send the response if not already done. 330 except socket.timeout, e: locals: mname = 'do_POST' self = <qommon.scgi_server.QommonHTTPRequestHandler instance at 0x7f1654a3f0e0> method = <bound method QommonHTTPRequestHandler.do_POST of <qommon.scgi_server.QommonHTTPRequestHandler instance at 0x7f1654a3f0e0>> File "/usr/lib/python2.7/BaseHTTPServer.py", line 340, in handle 338 self.close_connection = 1 339 > 340 self.handle_one_request() 341 while not self.close_connection: 342 self.handle_one_request() locals: self = <qommon.scgi_server.QommonHTTPRequestHandler instance at 0x7f1654a3f0e0> File "/usr/lib/python2.7/SocketServer.py", line 655, in __init__ 653 self.setup() 654 try: > 655 self.handle() 656 finally: 657 self.finish() locals: self = <qommon.scgi_server.QommonHTTPRequestHandler instance at 0x7f1654a3f0e0> request = <socket._socketobject object at 0x7f1654fffec0> client_address = ('127.0.0.1', 34688) server = <BaseHTTPServer.HTTPServer instance at 0x7f1654a7e368> File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request 332 def finish_request(self, request, client_address): 333 """Finish one request by instantiating RequestHandlerClass.""" > 334 self.RequestHandlerClass(request, client_address, self) 335 336 def shutdown_request(self, request): locals: self = <BaseHTTPServer.HTTPServer instance at 0x7f1654a7e368> request = <socket._socketobject object at 0x7f1654fffec0> client_address = ('127.0.0.1', 34688) File "/usr/lib/python2.7/SocketServer.py", line 321, in process_request 319 320 """ > 321 self.finish_request(request, client_address) 322 self.shutdown_request(request) 323 locals: self = <BaseHTTPServer.HTTPServer instance at 0x7f1654a7e368> request = <socket._socketobject object at 0x7f1654fffec0> client_address = ('127.0.0.1', 34688) File "/usr/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock 293 if self.verify_request(request, client_address): 294 try: > 295 self.process_request(request, client_address) 296 except: 297 self.handle_error(request, client_address) locals: self = <BaseHTTPServer.HTTPServer instance at 0x7f1654a7e368> request = <socket._socketobject object at 0x7f1654fffec0> client_address = ('127.0.0.1', 34688) File "/usr/lib/python2.7/SocketServer.py", line 238, in serve_forever 236 poll_interval) 237 if self in r: > 238 self._handle_request_noblock() 239 finally: 240 self.__shutdown_request = False locals: poll_interval = 0.5 self = <BaseHTTPServer.HTTPServer instance at 0x7f1654a7e368> r = [<BaseHTTPServer.HTTPServer instance at 0x7f1654a7e368>] e = [] w = [] File "/home/thomas/dev/au-quotidien/wcs/wcs/qommon/scgi_server.py", line 103, in http_run 101 QommonHTTPRequestHandler.publisher = create_publisher() 102 try: > 103 httpd.serve_forever() 104 finally: 105 httpd.server_close() locals: httpd = <BaseHTTPServer.HTTPServer instance at 0x7f1654a7e368> handler_connection_limit = -1 create_publisher = <bound method classobj.create_publisher of <class publisher.WcsPublisher at 0x7f16555d4a78>> spawn_cron = True port = 3001 host = '' https = False handle_error = <function handle_error at 0x7f165507eed8> File "/home/thomas/dev/au-quotidien/wcs/wcs/ctl/start.py", line 138, in execute 136 137 try: > 138 run_function(publisher.WcsPublisher.create_publisher, **run_kwargs) 139 except socket.error, e: 140 self.del_pid() locals: publisher = <module 'publisher' from '/home/thomas/dev/au-quotidien/wcs/wcs/publisher.pyc'> base_app_dir = '/var/lib/wcs' args = [] tenant_path = '/var/lib/wcs/localhost' self = <wcs.ctl.start.CmdStart object at 0x7f1655a23d90> hostname = 'localhost' pub = <publisher.WcsPublisher instance at 0x7f16555ce9e0> sub_options = <Values at 0x7f16557da128: {'http': True, 'silent': False, 'app_dir': None, 'extra': ['/home/thomas/dev/au-quotidien/auquotidien/extra/'], 'max_children': None, 'handler_connection_limit': None, 'script_name': None, 'daemonize': False, 'data_dir': '/home/thomas/dev/au-quotidien/wcs/data/', 'port': 3001, 'pidfile': None}> run_function = <function http_run at 0x7f16557cf8c0> base_options = <Values at 0x7f1655a188c0: {'configfile': None}> run_kwargs = {'port': 3001, 'spawn_cron': True} File "/home/thomas/dev/au-quotidien/wcs/wcs/qommon/ctl.py", line 69, in run 67 for i, extra in enumerate(sub_options.extra): 68 self.config.set("extra", "cmd_line_extra_%d" % i, extra) > 69 return self.execute(base_options, sub_options, args) 70 71 def parse_args(self, args): locals: extra = '/home/thomas/dev/au-quotidien/auquotidien/extra/' i = 0 self = <wcs.ctl.start.CmdStart object at 0x7f1655a23d90> args = [] sub_options = <Values at 0x7f16557da128: {'http': True, 'silent': False, 'app_dir': None, 'extra': ['/home/thomas/dev/au-quotidien/auquotidien/extra/'], 'max_children': None, 'handler_connection_limit': None, 'script_name': None, 'daemonize': False, 'data_dir': '/home/thomas/dev/au-quotidien/wcs/data/', 'port': 3001, 'pidfile': None}> base_options = <Values at 0x7f1655a188c0: {'configfile': None}> File "/home/thomas/dev/au-quotidien/wcs/wcs/qommon/ctl.py", line 159, in run 157 command_class = self.get_commands()[command] 158 cmd = command_class() > 159 return cmd.run(args, options) 160 locals: cmd = <wcs.ctl.start.CmdStart object at 0x7f1655a23d90> args = ['--http', '--extra=/home/thomas/dev/au-quotidien/auquotidien/extra/', '--data-dir=/home/thomas/dev/au-quotidien/wcs/data/'] self = <wcs.qommon.ctl.Ctl object at 0x7f1655a64290> command_class = <class 'wcs.ctl.start.CmdStart'> command = 'start' cmd_prefix = 'wcs.ctl' options = <Values at 0x7f1655a188c0: {'configfile': None}> File "./wcsctl.py", line 8, in <module> 6 7 ctl = wcs.qommon.ctl.Ctl(cmd_prefixes=['wcs.ctl']) > 8 ctl.run(sys.argv[1:]) 9 locals: wcs = <module 'wcs' from '/home/thomas/dev/au-quotidien/wcs/wcs/__init__.pyc'> __builtins__ = <module '__builtin__' (built-in)> __file__ = './wcsctl.py' __package__ = None sys = <module 'sys' (built-in)> ctl = <wcs.qommon.ctl.Ctl object at 0x7f1655a64290> __name__ = '__main__' __doc__ = None Form: _form_id 'd2c26c209f7d0da5' file <Upload at 7f16547d9950: workflow-export-maarch-via-ines.wcs> submit 'Importer le workflow' url '' Cookies: wcs-3b24c9 'b736c8c1cf39887c' Environment: CONTENT_LENGTH '7339' CONTENT_TYPE 'multipart/form-data; boundary=---------------------------8546411703323275252132944908' GATEWAY_INTERFACE 'CGI/1.1' HTTP_ACCEPT ' text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n' HTTP_ACCEPT_ENCODING 'gzip, deflate' HTTP_ACCEPT_LANGUAGE 'fr-FR,fr;q=0.8,en-US;q=0.5,en;q=0.3' HTTP_CONNECTION 'keep-alive' HTTP_CONTENT_LENGTH '7339' HTTP_CONTENT_TYPE 'multipart/form-data; boundary=---------------------------8546411703323275252132944908' HTTP_COOKIE 'wcs-3b24c9="b736c8c1cf39887c"' HTTP_DNT '1' HTTP_HOST 'localhost:3001' HTTP_REFERER 'http://localhost:3001/backoffice/workflows/' HTTP_USER_AGENT 'Mozilla/5.0 (X11; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0 Iceweasel/40.0' PATH_INFO '/backoffice/workflows/import' REMOTE_ADDR '127.0.0.1' REMOTE_USER '1' REQUEST_METHOD 'POST' SCRIPT_NAME '' SERVER_NAME 'zepo.entrouvert.lan' SERVER_PORT '3001' SERVER_PROTOCOL 'HTTP/1.0' SERVER_SOFTWARE 'Quixote/2.7b2'
Mis à jour par Thomas Noël il y a plus de 8 ans
- Fichier 0001-wscall-fix-post_data-xml-export-import-8172.patch 0001-wscall-fix-post_data-xml-export-import-8172.patch ajouté
- Patch proposed changé de Non à Oui
patch qui corrige l'export/import de post_data
- le post_data était exporté de façon trop bête (
<post_data><key>value</key></post_data>
) qui peut planter le xml si key n'est pas une balise xml valide (et ça peut, vu que c'est une clé de dico json, on a plus de liberté) - l'import n'existait pas, plouf
Mis à jour par Frédéric Péters il y a plus de 8 ans
Il manque à mon avis un roundtrip unicode (.encode(charset) dans le init, unicode(foo, charset) dans le export).
Mis à jour par Thomas Noël il y a plus de 8 ans
- Fichier 0001-wscall-fix-post_data-xml-export-import-8172.patch 0001-wscall-fix-post_data-xml-export-import-8172.patch ajouté
Arf (j'en ai profité pour compléter les tests)
Mis à jour par Thomas Noël il y a plus de 8 ans
- Statut changé de En cours à Résolu (à déployer)
commit c14d3d8f4898ae267c93503668f2741aae765af8 Author: Thomas NOEL <tnoel@entrouvert.com> Date: Fri Sep 4 11:58:17 2015 +0200 wscall: fix post_data xml export/import (#8172)
wscall: fix post_data xml export/import (#8172)