Environment:
Request Method: GET
Request URL: http://tlister-thinkmate.lco.gtn:6729/targets/30/?update_status=True
Django Version: 4.2.29
Python Version: 3.11.13
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'django_extensions',
'guardian',
'tom_common',
'django_comments',
'bootstrap4',
'crispy_bootstrap4',
'crispy_forms',
'rest_framework',
'rest_framework.authtoken',
'django_filters',
'django_gravatar',
'django_htmx',
'tom_targets',
'tom_alerts',
'tom_catalogs',
'tom_observations',
'tom_dataproducts',
'solsys_code',
'solsys_code.solsys_code_observatory.apps.SolsysCodeObservatoryConfig',
'tom_alertstreams',
'tom_fink',
'tom_registration',
'tom_eso']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_htmx.middleware.HtmxMiddleware',
'tom_common.middleware.Raise403Middleware',
'tom_common.middleware.ExternalServiceMiddleware',
'tom_common.middleware.AuthStrategyMiddleware',
'tom_common.middleware.AuthStrategyMiddleware',
'tom_registration.middleware.RedirectAuthenticatedUsersFromRegisterMiddleware']
Traceback (most recent call last):
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/core/handlers/base.py", line 199, in _get_response
response = self.process_exception_by_middleware(e, request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/core/handlers/base.py", line 362, in process_exception_by_middleware
response = middleware_method(request, exception)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/tom_common/middleware.py", line 29, in process_exception
raise exception
^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/views/generic/base.py", line 105, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/views/generic/base.py", line 144, in dispatch
return handler(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/tom_targets/views.py", line 493, in get
call_command('updatestatus', target_id=target_id, stdout=out)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/core/management/__init__.py", line 194, in call_command
return command.execute(*args, **defaults)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/core/management/base.py", line 458, in execute
output = self.handle(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/tom_observations/management/commands/updatestatus.py", line 46, in handle
failed_records[facility_name] = instance.update_all_observation_statuses(target=target)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/tom_observations/facility.py", line 528, in update_all_observation_statuses
records = records.exclude(status__in=self.get_terminal_observing_states())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/db/models/query.py", line 1446, in exclude
return self._filter_or_exclude(True, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/db/models/query.py", line 1456, in _filter_or_exclude
clone._filter_or_exclude_inplace(negate, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/db/models/query.py", line 1464, in _filter_or_exclude_inplace
self._query.add_q(~Q(*args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/db/models/sql/query.py", line 1548, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/db/models/sql/query.py", line 1579, in _add_q
child_clause, needed_inner = self.build_filter(
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/db/models/sql/query.py", line 1494, in build_filter
condition = self.build_lookup(lookups, col, value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/db/models/sql/query.py", line 1321, in build_lookup
lookup = lookup_class(lhs, rhs)
^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/db/models/lookups.py", line 27, in __init__
self.rhs = self.get_prep_lookup()
^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/db/models/lookups.py", line 426, in get_prep_lookup
return super().get_prep_lookup()
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tlister/venv/fomo311_venv/lib64/python3.11/site-packages/django/db/models/lookups.py", line 270, in get_prep_lookup
for rhs_value in self.rhs:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Exception Type: TypeError at /targets/30/
Exception Value: 'NoneType' object is not iterable
def get_terminal_observing_states(self):
return []
fixed it for me.
Clicking the 'Update Observations Status' e.g. on this FOMO Target with
tom_eso.eso.ESOFacilityin theTOM_FACILITY_CLASSESofsettings.pybreaks with the following stack trace:This is breaking within the chain of calls from
tom_observations/management/commands/updatestatus.pywhich loops over all facilities and callsfailed_records[facility_name] = instance.update_all_observation_statuses(target=target).This works for the
LCOFacility,GEMFacilityandSOARFacilitybut breaks withtom_eso.eso.ESOFacility.This is because of the
records = records.exclude(status__in=self.get_terminal_observing_states())line astom_eso.eso.ESOFacility.get_terminal_observing_states()only contains apasswhich isn't the list-like iterable thatstatus__inneeds.Changing
tom_eso.eso.ESOFacility.get_terminal_observing_states()(lines 626--627) to:fixed it for me.