All, I am having trouble downloading relatively complex workflows. The problem happens when I have a task in the workflow with multiple outputs being renamed. Here is the XML of the stack trace I get: <?xml version="1.0" ?> <traceback> <sysinfo> <language version="2.6.6"> Python </language> </sysinfo> <stack> <frame> <module> weberror.evalexception.middleware </module> <filename> /Users/jerdmann/Python/galaxy-central/eggs/WebError-0.8a-py2.6.egg/weberror/evalexception/middleware.py </filename> <line> 364 </line> <function> respond </function> <operation> app_iter = self.application(environ, detect_start_response) </operation> <operation_context> try: __traceback_supplement__ = errormiddleware.Supplement, self, environ app_iter = self.application(environ, detect_start_response) try: return_iter = list(app_iter) </operation_context> </frame> <frame> <module> paste.debug.prints </module> <filename> /Users/jerdmann/Python/galaxy-central/eggs/Paste-1.6-py2.6.egg/paste/debug/prints.py </filename> <line> 98 </line> <function> __call__ </function> <operation> environ, self.app) </operation> <operation_context> try: status, headers, body = wsgilib.intercept_output( environ, self.app) if status is None: # Some error occurred </operation_context> </frame> <frame> <module> paste.wsgilib </module> <filename> /Users/jerdmann/Python/galaxy-central/eggs/Paste-1.6-py2.6.egg/paste/wsgilib.py </filename> <line> 539 </line> <function> intercept_output </function> <operation> app_iter = application(environ, replacement_start_response) </operation> <operation_context> data.append(headers) return output.write app_iter = application(environ, replacement_start_response) if data[0] is None: return (None, None, app_iter) </operation_context> </frame> <frame> <module> paste.recursive </module> <filename> /Users/jerdmann/Python/galaxy-central/eggs/Paste-1.6-py2.6.egg/paste/recursive.py </filename> <line> 80 </line> <function> __call__ </function> <operation> return self.application(environ, start_response) </operation> <operation_context> environ['paste.recursive.script_name'] = my_script_name try: return self.application(environ, start_response) except ForwardRequestException, e: middleware = CheckForRecursionMiddleware( </operation_context> </frame> <frame> <module> paste.httpexceptions </module> <filename> /Users/jerdmann/Python/galaxy-central/eggs/Paste-1.6-py2.6.egg/paste/httpexceptions.py </filename> <line> 632 </line> <function> __call__ </function> <operation> return self.application(environ, start_response) </operation> <operation_context> []).append(HTTPException) try: return self.application(environ, start_response) except HTTPException, exc: return exc(environ, start_response) </operation_context> </frame> <frame> <module> galaxy.web.framework.base </module> <filename> /Users/jerdmann/Python/galaxy-central/lib/galaxy/web/framework/base.py </filename> <line> 145 </line> <function> __call__ </function> <operation> body = method( trans, **kwargs ) </operation> <operation_context> kwargs.pop( '_', None ) try: body = method( trans, **kwargs ) except Exception, e: body = self.handle_controller_exception( e, trans, **kwargs ) </operation_context> </frame> <frame> <module> galaxy.web.framework </module> <filename> /Users/jerdmann/Python/galaxy-central/lib/galaxy/web/framework/__init__.py </filename> <line> 74 </line> <function> decorator </function> <operation> return simplejson.dumps( func( self, trans, *args, **kwargs ), indent=4, sort_keys=True ) </operation> <operation_context> def decorator( self, trans, *args, **kwargs ): trans.response.set_content_type( "text/javascript" ) return simplejson.dumps( func( self, trans, *args, **kwargs ), indent=4, sort_keys=True ) if not hasattr(func, '_orig'): decorator._orig = func </operation_context> </frame> <frame> <module> galaxy.web.framework </module> <filename> /Users/jerdmann/Python/galaxy-central/lib/galaxy/web/framework/__init__.py </filename> <line> 84 </line> <function> decorator </function> <operation> return func( self, trans, *args, **kwargs ) </operation> <operation_context> def decorator( self, trans, *args, **kwargs ): if trans.get_user(): return func( self, trans, *args, **kwargs ) else: return trans.show_error_message( </operation_context> </frame> <frame> <module> galaxy.web.controllers.workflow </module> <filename> /Users/jerdmann/Python/galaxy-central/lib/galaxy/web/controllers/workflow.py </filename> <line> 1049 </line> <function> export_to_file </function> <operation> stored_dict = self._workflow_to_dict( trans, stored ) </operation> <operation_context> # Stream workflow to file. stored_dict = self._workflow_to_dict( trans, stored ) valid_chars = '.,^_-()[]0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' sname = stored.name </operation_context> </frame> <frame> <module> galaxy.web.controllers.workflow </module> <filename> /Users/jerdmann/Python/galaxy-central/lib/galaxy/web/controllers/workflow.py </filename> <line> 1516 </line> <function> _workflow_to_dict </function> <operation> step['inputs'].append( { "name" : name, "description" : "runtime parameter for tool %s" % module.get_name() } ) </operation> <operation_context> input_type = type( val ) if input_type == RuntimeValue: step['inputs'].append( { "name" : name, "description" : "runtime parameter for tool %s" % module.get_name() } ) elif input_type == dict: # Input type is described by a dict, e.g. indexed parameters. </operation_context> </frame> </stack> <exception> <type> TypeError </type> <value> 'WorkflowStep' object is unsubscriptable </value> </exception> </traceback> -- Jesse Erdmann Bioinformatics Analyst Masonic Cancer Center University of Minnesota jerdmann@umn.edu 612-626-3123 jesse@jesseerdmann.com Twitter: http://twitter.com/jesseerdmann