lirmm / waves-core

WAVES is a reusable web application dedicated to bioinformatic tool integration

Home Page:https://waves-core.readthedocs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Accessing Job Details using the Admin "Jobs" page gives "TypeError vars() argument must have __dict__ attribute" error

bockp opened this issue · comments

After updating our local installation to the new version, we had a few bugs.
Most of them resolved themselves as problems with our server, the wrong user launching crontab add, and other such small but annoying adjustments, and we fixed those after some work.

There are, however, two bugs that I cannot figure out, and that don't seem to come from anything on our end, as far as I've been able to tell.

This issue details one of them.


This bug only affects jobs launched after the update to the new version.
We migrated the old database over to the new version, and the jobs already present in it from before have their details page accessible.

Expected :

When clicking the identifier of a job on the Home >WAVES CORE > Jobs page, we expect to see the job details page, that shows the details of the job in question along with links to it's results, etc.

Bug:

If I attempt to access this page, I receive a TypeError saying vars() argument must have __dict__ attribute

Example:

image

clicking the identifier of a job launched after the upgrade:

18754290

Traceback:

Environment:


Request Method: GET
Request URL: http://xx.xx.xx.xxx/admin/wcore/job/173/change/

Django Version: 1.11.17
Python Version: 2.7.5
Installed Applications:
[u'polymorphic',
 u'django.contrib.admin',
 u'django.contrib.auth',
 u'django.contrib.contenttypes',
 u'django.contrib.sessions',
 u'django.contrib.messages',
 u'django.contrib.staticfiles',
 u'waves.wcore',
 u'waves.authentication',
 u'crispy_forms',
 u'rest_framework',
 u'corsheaders',
 u'adminsortable2',
 u'django_crontab']
Installed Middleware:
[u'django.middleware.security.SecurityMiddleware',
 u'django.contrib.sessions.middleware.SessionMiddleware',
 u'corsheaders.middleware.CorsMiddleware',
 u'django.middleware.common.CommonMiddleware',
 u'django.middleware.csrf.CsrfViewMiddleware',
 u'django.contrib.auth.middleware.AuthenticationMiddleware',
 u'django.contrib.messages.middleware.MessageMiddleware',
 u'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template /usr/lib/python2.7/site-packages/django/contrib/admin/templates/admin/includes/fieldset.html, error at line 17
   vars() argument must have __dict__ attribute   7 :         <div class="form-row{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% if not line.has_visible_field %} hidden{% endif %}{% for field in line %}{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}">
   8 :             {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %}
   9 :             {% for field in line %}
   10 :                 <div{% if not line.fields|length_is:'1' %} class="field-box{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %} hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>
   11 :                     {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
   12 :                     {% if field.is_checkbox %}
   13 :                         {{ field.field }}{{ field.label_tag }}
   14 :                     {% else %}
   15 :                         {{ field.label_tag }}
   16 :                         {% if field.is_readonly %}
   17 :                             <div class="readonly"> {{ field.contents }} </div>
   18 :                         {% else %}
   19 :                             {{ field.field }}
   20 :                         {% endif %}
   21 :                     {% endif %}
   22 :                     {% if field.field.help_text %}
   23 :                         <div class="help">{{ field.field.help_text|safe }}</div>
   24 :                     {% endif %}
   25 :                 </div>
   26 :             {% endfor %}
   27 :         </div>


Traceback:

File "/usr/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  217.                 response = self.process_exception_by_middleware(e, request)

File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  215.                 response = response.render()

File "/usr/lib/python2.7/site-packages/django/template/response.py" in render
  107.             self.content = self.rendered_content

File "/usr/lib/python2.7/site-packages/django/template/response.py" in rendered_content
  84.         content = template.render(context, self._request)

File "/usr/lib/python2.7/site-packages/django/template/backends/django.py" in render
  66.             return self.template.render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render
  207.                     return self._render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  177.             return compiled_parent._render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  177.             return compiled_parent._render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  72.                 result = block.nodelist.render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  72.                 result = block.nodelist.render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  216.                     nodelist.append(node.render_annotated(context))

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/lib/python2.7/site-packages/django/template/loader_tags.py" in render
  216.                 return template.render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render
  209.                 return self._render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in _render
  199.         return self.nodelist.render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  216.                     nodelist.append(node.render_annotated(context))

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  216.                     nodelist.append(node.render_annotated(context))

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  322.                 return nodelist.render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  322.                 return nodelist.render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render
  990.                 bit = node.render_annotated(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render_annotated
  957.             return self.render(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in render
  1040.             output = self.filter_expression.resolve(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in resolve
  708.                 obj = self.var.resolve(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in resolve
  849.             value = self._resolve_lookup(context)

File "/usr/lib/python2.7/site-packages/django/template/base.py" in _resolve_lookup
  911.                             current = current()

File "/usr/lib/python2.7/site-packages/django/contrib/admin/helpers.py" in contents
  209.             f, attr, value = lookup_field(field, obj, model_admin)

File "/usr/lib/python2.7/site-packages/django/contrib/admin/utils.py" in lookup_field
  295.             value = attr(obj)

File "/srv/waves-core-1.6.5.1/waves/wcore/admin/jobs.py" in get_run_details
  143.             ['\n{}: {}'.format(det[0], det[1]) for det in vars(obj.run_details).items()]) + "</pre>")

Exception Type: TypeError at /admin/wcore/job/173/change/
Exception Value: vars() argument must have __dict__ attribute


A second examination of this problem today reveals it has disappeared entirely, all job detail pages now being accessible.

The only changes to the server:

  • Complete restart of web server after modifying the code of /waves/wcore/views/files.py ( as per Issue #29 second comment).

Not entirely sure if the restart or the code change fixed it, although I'm pretty sure we already attempted to restart the entire server once before without it affecting the bug.

Feel free to submit another issue if the problem reappears.