You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make sure these boxes are checked before submitting your issue - thank you!
I have checked the superset logs for python stacktraces and included it here as text if any
I have reproduced the issue with at least the latest released version of superset
[yes and no] I have checked the issue tracker for the same issue and I haven't found one similar
I found similar issues (#2282,#1935,#543), but they don't seem to match entirely, as in this case only the username seems to be the troublemaker.
Superset version
0.17.3
Expected results
Rendering slicemodelview/list or dashboardmodelview/list succeeds, regardless of any unicode characters present in a users first or last name (as displayed in Creator column).
Actual results
Loading these pages results in 500 - Internal Server Error with the following stacktrace:
/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/forms.py:245: FlaskWTFDeprecationWarning: "flask_wtf.Form" has been renamed to "FlaskForm" and will be removed in 1.0.
form = self(obj=obj)
[2017-04-05 09:51:53,173] ERROR in app: Exception on /dashboardmodelview/list/ [GET]
Traceback (most recent call last):
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/security/decorators.py", line 26, in wraps
return f(self, *args, **kwargs)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/views.py", line 453, in list
widgets=widgets)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/baseviews.py", line 158, in render_template
return render_template(template, **dict(list(kwargs.items()) + list(self.extra_args.items())))
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/templating.py", line 134, in render_template
context, ctx.app)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/templating.py", line 116, in _render
rv = template.render(context)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/jinja2/environment.py", line 1008, in render
return self.environment.handle_exception(exc_info, True)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/model/list.html", line 2, in top-level template code
{% import 'appbuilder/general/lib.html' as lib %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/base.html", line 1, in top-level template code
{% extends base_template %}
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/superset/templates/superset/base.html", line 1, in top-level template code
{% extends "appbuilder/baselayout.html" %}
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/superset/templates/appbuilder/baselayout.html", line 2, in top-level template code
{% import 'appbuilder/baselib.html' as baselib %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/init.html", line 46, in top-level template code
{% block body %}
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/superset/templates/appbuilder/baselayout.html", line 21, in block "body"
{% block content %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/model/list.html", line 13, in block "content"
{% block list_list scoped %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/model/list.html", line 15, in block "list_list"
{{ widgets.get('list')()|safe }}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/widgets.py", line 34, in __call__
return template.render(args)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/jinja2/environment.py", line 1008, in render
return self.environment.handle_exception(exc_info, True)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/widgets/list.html", line 2, in top-level template code
{% extends 'appbuilder/general/widgets/base_list.html' %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/widgets/base_list.html", line 23, in top-level template code
{% block begin_loop_values %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/widgets/list.html", line 45, in block "begin_loop_values"
{% for item in value_columns %}
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/jinja2/runtime.py", line 452, in __next__
ctx._after = ctx._safe_next()
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/jinja2/runtime.py", line 430, in _safe_next
return next(self._iterator)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/models/base.py", line 87, in get_values
retdict[col] = self._get_attr_value(item, col)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/models/base.py", line 44, in _get_attr_value
return getattr(item, col)()
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/superset/models/helpers.py", line 74, in creator
return self._user_link(self.created_by)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/superset/models/helpers.py", line 70, in _user_link
return Markup('<a href="{}">{}</a>'.format(url, escape(user) or ''))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 7: ordinal not in range(128)
Exception on /dashboardmodelview/list/ [GET]
Traceback (most recent call last):
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/security/decorators.py", line 26, in wraps
return f(self, *args, **kwargs)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/views.py", line 453, in list
widgets=widgets)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/baseviews.py", line 158, in render_template
return render_template(template, **dict(list(kwargs.items()) + list(self.extra_args.items())))
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/templating.py", line 134, in render_template
context, ctx.app)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/flask/templating.py", line 116, in _render
rv = template.render(context)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/jinja2/environment.py", line 1008, in render
return self.environment.handle_exception(exc_info, True)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/model/list.html", line 2, in top-level template code
{% import 'appbuilder/general/lib.html' as lib %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/base.html", line 1, in top-level template code
{% extends base_template %}
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/superset/templates/superset/base.html", line 1, in top-level template code
{% extends "appbuilder/baselayout.html" %}
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/superset/templates/appbuilder/baselayout.html", line 2, in top-level template code
{% import 'appbuilder/baselib.html' as baselib %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/init.html", line 46, in top-level template code
{% block body %}
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/superset/templates/appbuilder/baselayout.html", line 21, in block "body"
{% block content %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/model/list.html", line 13, in block "content"
{% block list_list scoped %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/model/list.html", line 15, in block "list_list"
{{ widgets.get('list')()|safe }}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/widgets.py", line 34, in __call__
return template.render(args)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/jinja2/environment.py", line 1008, in render
return self.environment.handle_exception(exc_info, True)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/widgets/list.html", line 2, in top-level template code
{% extends 'appbuilder/general/widgets/base_list.html' %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/widgets/base_list.html", line 23, in top-level template code
{% block begin_loop_values %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/widgets/list.html", line 45, in block "begin_loop_values"
{% for item in value_columns %}
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/templates/appbuilder/general/widgets/list.html", line 45, in block "begin_loop_values"
{% for item in value_columns %}
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/jinja2/runtime.py", line 452, in __next__
ctx._after = ctx._safe_next()
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/jinja2/runtime.py", line 430, in _safe_next
return next(self._iterator)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/models/base.py", line 87, in get_values
retdict[col] = self._get_attr_value(item, col)
File "/opt/apps/superset/venv_2.7/lib64/python2.7/site-packages/flask_appbuilder/models/base.py", line 44, in _get_attr_value
return getattr(item, col)()
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/superset/models/helpers.py", line 74, in creator
return self._user_link(self.created_by)
File "/opt/apps/superset/venv_2.7/lib/python2.7/site-packages/superset/models/helpers.py", line 70, in _user_link
return Markup('<a href="{}">{}</a>'.format(url, escape(user) or ''))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 7: ordinal not in range(128)
Notes:
Replacing the only 'ü' in a user's surname by 'ue' results in flawlessly loading pages again.
This issue is not present in a python 3 venv.
Setting export PYTHONIOENCODING=UTF-8 does not help
This dirty hack actually helps, but is strongly discouraged:
# Adding to superset_config.py:
import sys # import sys package, if not already imported
reload(sys)
sys.setdefaultencoding('utf-8')
Steps to reproduce
E.g., add a 'ü' to a user's surname, ensure there is a dashboard owned by this user and then load the list of dashboards.
The text was updated successfully, but these errors were encountered:
The proper fix is to use unicode strings and not bytestrings in python2 which accidentally work if you live in an ascii world. One workaround is to stick this on top of all python files from __future__ import unicode_literals and make python2 behave like python3 that tend to work.
Said that it would be trivial to open a PR just sticking an u before the string literal that explodes for you.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. For admin, please label this issue .pinned to prevent stale bot from closing the issue.
Make sure these boxes are checked before submitting your issue - thank you!
I found similar issues (#2282,#1935,#543), but they don't seem to match entirely, as in this case only the username seems to be the troublemaker.
Superset version
0.17.3
Expected results
Rendering slicemodelview/list or dashboardmodelview/list succeeds, regardless of any unicode characters present in a users first or last name (as displayed in Creator column).
Actual results
Loading these pages results in 500 - Internal Server Error with the following stacktrace:
Notes:
export PYTHONIOENCODING=UTF-8
does not helpSteps to reproduce
E.g., add a 'ü' to a user's surname, ensure there is a dashboard owned by this user and then load the list of dashboards.
The text was updated successfully, but these errors were encountered: