Skip to content

Commit

Permalink
Fix loading of tools under Python 3
Browse files Browse the repository at this point in the history
Tools containing a text parameter fail with a traceback like:
```
[pid: 2433|app: 0|req: 15/28] 127.0.0.1 () {42 vars in 905 bytes} [Sun Jun  3 02:24:59 2018] GET /api/tools/addValue/build?version=1.0.0&__identifer=nv6x1qdhzxo&tool_version=1.0.0 => generated 71 bytes in 58 msecs (HTTP/1.1 500) 3 headers in 143 bytes (1 switches on core 1)
galaxy.web.framework.decorators ERROR 2018-06-03 02:25:01,999 [p:2433,w:1,m:0] [uWSGIWorker1Core0] Uncaught exception in exposed API method:
Traceback (most recent call last):
  File "lib/galaxy/web/framework/decorators.py", line 281, in decorator
    rval = func(self, trans, *args, **kwargs)
  File "lib/galaxy/webapps/galaxy/api/tools.py", line 113, in build
    return tool.to_json(trans, kwd.get('inputs', kwd))
  File "lib/galaxy/tools/__init__.py", line 1913, in to_json
    'state_inputs'  : params_to_strings(self.inputs, state_inputs, self.app),
  File "lib/galaxy/tools/parameters/__init__.py", line 207, in params_to_strings
    rval[key] = value if nested else str(dumps(value))
  File "/usr/lib/python3.5/json/__init__.py", line 230, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib/python3.5/json/encoder.py", line 198, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python3.5/json/encoder.py", line 256, in iterencode
    return _iterencode(o, 0)
  File "/usr/lib/python3.5/json/encoder.py", line 179, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: b'c1,c2' is not JSON serializable
```
  • Loading branch information
nsoranzo committed Jun 3, 2018
1 parent 662682c commit e81931c
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions lib/galaxy/tools/parameters/basic.py
Expand Up @@ -261,7 +261,7 @@ class TextToolParameter(ToolParameter):
>>> print(p.name)
_name
>>> sorted(p.to_dict(trans).items())
[('area', False), ('argument', None), ('datalist', []), ('help', ''), ('hidden', False), ('is_dynamic', False), ('label', ''), ('model_class', 'TextToolParameter'), ('name', '_name'), ('optional', False), ('refresh_on_change', False), ('type', 'text'), ('value', 'default')]
[('area', False), ('argument', None), ('datalist', []), ('help', ''), ('hidden', False), ('is_dynamic', False), ('label', ''), ('model_class', 'TextToolParameter'), ('name', '_name'), ('optional', False), ('refresh_on_change', False), ('type', 'text'), ('value', u'default')]
"""

def __init__(self, tool, input_source):
Expand All @@ -278,7 +278,7 @@ def to_json(self, value, app, use_security):
if value is None:
rval = ''
else:
rval = util.smart_str(value)
rval = unicodify(value)
return rval

def validate(self, value, trans=None):
Expand Down Expand Up @@ -306,7 +306,7 @@ class IntegerToolParameter(TextToolParameter):
>>> print(p.name)
_name
>>> sorted(p.to_dict(trans).items())
[('area', False), ('argument', None), ('datalist', []), ('help', ''), ('hidden', False), ('is_dynamic', False), ('label', ''), ('max', None), ('min', None), ('model_class', 'IntegerToolParameter'), ('name', '_name'), ('optional', False), ('refresh_on_change', False), ('type', 'integer'), ('value', '10')]
[('area', False), ('argument', None), ('datalist', []), ('help', ''), ('hidden', False), ('is_dynamic', False), ('label', ''), ('max', None), ('min', None), ('model_class', 'IntegerToolParameter'), ('name', '_name'), ('optional', False), ('refresh_on_change', False), ('type', 'integer'), ('value', u'10')]
>>> type(p.from_json("10", trans))
<type 'int'>
>>> type(p.from_json("_string", trans))
Expand Down Expand Up @@ -382,7 +382,7 @@ class FloatToolParameter(TextToolParameter):
>>> print(p.name)
_name
>>> sorted(p.to_dict(trans).items())
[('area', False), ('argument', None), ('datalist', []), ('help', ''), ('hidden', False), ('is_dynamic', False), ('label', ''), ('max', None), ('min', None), ('model_class', 'FloatToolParameter'), ('name', '_name'), ('optional', False), ('refresh_on_change', False), ('type', 'float'), ('value', '3.141592')]
[('area', False), ('argument', None), ('datalist', []), ('help', ''), ('hidden', False), ('is_dynamic', False), ('label', ''), ('max', None), ('min', None), ('model_class', 'FloatToolParameter'), ('name', '_name'), ('optional', False), ('refresh_on_change', False), ('type', 'float'), ('value', u'3.141592')]
>>> type(p.from_json("36.1", trans))
<type 'float'>
>>> type(p.from_json("_string", trans))
Expand Down

0 comments on commit e81931c

Please sign in to comment.