Princeton-LSI-ResearchComputing / tracebase

Mouse Metabolite Tracing Data Repository for the Rabinowitz Lab
MIT License
4 stars 1 forks source link

Advanced Search exception #985

Closed hepcat72 closed 3 months ago

hepcat72 commented 4 months ago

BUG DESCRIPTION

Problem

None provided

Steps to reproduce

  1. Go to the advanced search on tracebase-dev
  2. Select "FCirc" output format
  3. Select "Study" is "alb ko fcirc"
  4. Click search

Current behavior

At this line in the template:

{% if rec.serum_validity.valid %}

This exception is raised:

Traceback (most recent call last):
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 880, in _resolve_lookup
    current = current[bit]

During handling of the above exception ('FCirc' object is not subscriptable), another exception occurred:
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/core/handlers/base.py", line 220, in _get_response
    response = response.render()
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/response.py", line 114, in render
    self.content = self.rendered_content
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/response.py", line 92, in rendered_content
    return template.render(context, self._request)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 175, in render
    return self._render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/loader_tags.py", line 157, in render
    return compiled_parent._render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/loader_tags.py", line 63, in render
    result = block.nodelist.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/loader_tags.py", line 208, in render
    return template.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 177, in render
    return self._render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/loader_tags.py", line 54, in render
    result = self.nodelist.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/defaulttags.py", line 321, in render
    return nodelist.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/defaulttags.py", line 321, in render
    return nodelist.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/defaulttags.py", line 321, in render
    return nodelist.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/loader_tags.py", line 208, in render
    return template.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 177, in render
    return self._render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/loader_tags.py", line 54, in render
    result = self.nodelist.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/defaulttags.py", line 238, in render
    nodelist.append(node.render_annotated(context))
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/defaulttags.py", line 314, in render
    match = condition.eval(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/defaulttags.py", line 877, in eval
    return self.value.resolve(context, ignore_failures=True)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 715, in resolve
    obj = self.var.resolve(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 847, in resolve
    value = self._resolve_lookup(context)
  File "/usr/local/tracebase/lib/python3.9/site-packages/django/template/base.py", line 890, in _resolve_lookup
    current = getattr(current, bit)
  File "/var/www/tracebase/DataRepo/models/hier_cached_model.py", line 28, in get_result
    result = f(self, *args, **kwargs)
  File "/var/www/tracebase/DataRepo/models/fcirc.py", line 196, in serum_validity
    != self.serum_sample.animal.last_serum_sample.id

Exception Type: AttributeError at /DataRepo/search_advanced/
Exception Value: 'NoneType' object has no attribute 'id'

Expected behavior

No exception. Empty results (probably).

Suggested Change

This appears to be a problem in the FCirc.serum_validity property/method. Animal.last_serum_sample is returning None and serum_validity isn't checking for None.

There should be a check of self.serum_sample.animal.last_serum_sample as None before referencing self.serum_sample.animal.last_serum_sample.id.

Comment

None


ISSUE OWNER SECTION

Assumptions

  1. List of assumptions made WRT the code
  2. E.g. We will assume input is correct (explaining why there is no validation)

Limitations

  1. A list of things this work will specifically not do
  2. E.g. This feature will only handle the most frequent use case X

Affected Components

Requirements

DESIGN

GUI Change description

None provided

Code Change Description

None provided

Tests

hepcat72 commented 4 months ago

Hmmmm.... Interestingly, by sandbox (on main) doesn't have this issue. I'm beginning to think that maybe there's a stale db cache issue... because the problem doesn't seem possible. It's comparing the "current" serum sample with the animal's "last serum sample", and that "last serum sample" is none... but it can't be, because the loop is on serum samples from that animal. I'm going to try rebuilding the cache on tracebase-dev.

hepcat72 commented 4 months ago

*clearing the cache

hepcat72 commented 4 months ago

OK. That didn't fix it (and I don't think doing a db cache clear would necessitate an apache restart). I just launched a rebuild maintained fields, based on the admin docs process, which seems appropriate, because we manually mucked with records recently:

\5. [NOT USUALLY NECESSARY] If not rebuilding the entire database or the load does not add data to existing studies, clear cached values (as tracebase user, in tracebase dir - see step 2)

python manage.py shell
> from DataRepo.models.hier_cached_model import delete_all_caches
> delete_all_caches()

\6. [NOT USUALLY NECESSARY] If the database was manually manipulated (e.g. at an SQL prompt), rebuild maintained fields. (Note, this can take a long time.) (as tracebase user, in tracebase dir - see step 2)

python manage.py rebuild_maintained_fields