Page MenuHomePhabricator

contact tool returning 500 error response for searches
Closed, ResolvedPublic

Description

It looks like something has changed in the data that the contact tool collects which is causing a fatal error in its jinja2 templates:

ERROR:flask.app:Exception on / [POST]
Traceback (most recent call last):
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/data/project/contact/www/python/src/app.py", line 92, in submit
    ldap_to_phab=ldap_to_phab
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/flask/templating.py", line 135, in render_template
    context, ctx.app)
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/flask/templating.py", line 117, in _render
    rv = template.render(context)
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/jinja2/environment.py", line 1008, in render
    return self.environment.handle_exception(exc_info, True)
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/jinja2/environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/jinja2/_compat.py", line 37, in reraise
    raise value.with_traceback(tb)
  File "/data/project/contact/www/python/src/templates/result.html", line 77, in top-level template code
    <small>({% for tag in pv['tags'] %}#{{tag}}{%if not loop.last%}, {%endif%}{%endfor%})</small>
  File "/data/project/contact/www/python/src/templates/base.html", line 40, in top-level template code
    {% block content %}
  File "/data/project/contact/www/python/src/templates/result.html", line 87, in block "content"
    {{ ldap_long(k,v) }}
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/jinja2/runtime.py", line 579, in _invoke
    rv = self._func(*arguments)
  File "/data/project/contact/www/python/src/templates/result.html", line 19, in template
    {% for group in v['groups'].values() | sort %}
  File "/data/project/contact/www/python/venv/lib/python3.4/site-packages/jinja2/filters.py", line 278, in do_sort
    return sorted(value, key=key_func, reverse=reverse)
TypeError: unorderable types: dict() < dict()

Event Timeline

Could also be fallout from https://phabricator.wikimedia.org/T216354#4999683, although I did test the deployment, and everything seemed OK afterwards. Did anything change with respect to what is stored in ldap?

The code suggests this has always been a dict:

{% for group in v['groups'].values() | sort %}
<li>{{ group['cn'] | querylink }}</li>
{% endfor %}</ul></dd>{% endif %}

(otherwise group['cn'] would not make sense), so this only worked because in Python 2 dicts can be ordered. The tool _does_ work without issues for tools, so I think I just did not test with a user instead of a tool.

valhallasw claimed this task.

Fixed with a tiny bit of jinja magic:

{% for group in v['groups'].values() | sort(attribute='cn') %}