Projet

Général

Profil

Bug #8172

"fichier invalide" lors de l'import d'un workflow (avec wscall contenant des "post data")

Ajouté par Thomas Noël il y a plus de 8 ans. Mis à jour il y a plus de 8 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
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

Révision c14d3d8f (diff)
Ajouté par Thomas Noël il y a plus de 8 ans

wscall: fix post_data xml export/import (#8172)

Historique

#1

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)

#2

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'
#3

Mis à jour par Thomas Noël il y a plus de 8 ans

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
#4

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).

#5

Mis à jour par Thomas Noël il y a plus de 8 ans

Arf (j'en ai profité pour compléter les tests)

#6

Mis à jour par Frédéric Péters il y a plus de 8 ans

ok.

#7

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)

#8

Mis à jour par Thomas Noël il y a plus de 8 ans

  • Priorité changé de Haut à Normal
#9

Mis à jour par Thomas Noël il y a plus de 8 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF