diff --git a/tom_observations/templates/tom_observations/facility_status.html b/tom_observations/templates/tom_observations/facility_status.html index 52e61db6d..b4c67cce1 100644 --- a/tom_observations/templates/tom_observations/facility_status.html +++ b/tom_observations/templates/tom_observations/facility_status.html @@ -5,6 +5,21 @@

Facility Status

{% facility_map %}
- {% facility_status %} +
+ +
+
+
+ {% include 'tom_observations/partials/facility_status_table.html' with loading=True facilities=None %} +
{% endblock %} diff --git a/tom_observations/templates/tom_observations/partials/facility_status.html b/tom_observations/templates/tom_observations/partials/facility_status.html deleted file mode 100644 index 621741421..000000000 --- a/tom_observations/templates/tom_observations/partials/facility_status.html +++ /dev/null @@ -1,33 +0,0 @@ -{% load tom_common_extras %} -
- - - - - - - - - - - - {% for facility in facilities %} - {% for site in facility.sites %} - {% for telescope in site.telescopes %} - - - - - - - - {% endfor %} - {% endfor %} - {% empty %} - - - - {% endfor %} - -
FacilitySiteTelescopeStatusWeather URL
{{ facility.code }}{{ site.code }}{{ telescope.code }}{{ telescope.status }}link
Facility status unknown.
-
\ No newline at end of file diff --git a/tom_observations/templates/tom_observations/partials/facility_status_table.html b/tom_observations/templates/tom_observations/partials/facility_status_table.html new file mode 100644 index 000000000..11c305f93 --- /dev/null +++ b/tom_observations/templates/tom_observations/partials/facility_status_table.html @@ -0,0 +1,38 @@ +{% load tom_common_extras %} + + + + + + + + + + + + {% if loading %} + + + + {% else %} + {% for facility in facilities %} + {% for site in facility.sites %} + {% for telescope in site.telescopes %} + + + + + + + + {% endfor %} + {% endfor %} + {% empty %} + + + + {% endfor %} + {% endif %} + +
FacilitySiteTelescopeStatusWeather URL
Fetching facility status...
{{ facility.code }}{{ site.code }}{{ telescope.code }}{{ telescope.status }}link
Facility status unknown.
+{% include 'tom_common/partials/messages.html' %} diff --git a/tom_observations/templatetags/observation_extras.py b/tom_observations/templatetags/observation_extras.py index 4179ca041..ec09b24f4 100644 --- a/tom_observations/templatetags/observation_extras.py +++ b/tom_observations/templatetags/observation_extras.py @@ -267,34 +267,6 @@ def observation_distribution(observations): return {'figure': figure} -@register.inclusion_tag('tom_observations/partials/facility_status.html', takes_context=True) -def facility_status(context): - """ - Collect the facility status from the registered facilities and pass them - to the facility_status.html partial template. - See lco.py Facility implementation for example. - :return: - """ - - facility_statuses = [] - for facility_class in get_service_classes().values(): - facility = facility_class() - facility.set_user(context['request'].user) - weather_urls = facility.get_facility_weather_urls() - status = facility.get_facility_status() - - # add the weather_url to the site dictionary - for site in status.get('sites', []): - url = next((site_url['weather_url'] for site_url in weather_urls.get('sites', []) - if site_url['code'] == site['code']), None) - if url is not None: - site['weather_url'] = url - - facility_statuses.append(status) - - return {'facilities': facility_statuses} - - @register.inclusion_tag('tom_observations/partials/facility_map.html', takes_context=True) def facility_map(context): facility_locations = [] diff --git a/tom_observations/tests/tests.py b/tom_observations/tests/tests.py index e671e9c64..8bde9c3fa 100644 --- a/tom_observations/tests/tests.py +++ b/tom_observations/tests/tests.py @@ -319,7 +319,8 @@ def setUp(self): pass def test_facility_status(self): - response = self.client.get(reverse('tom_observations:facility-status')) + response = self.client.get( + reverse('tom_observations:render-facility-status-list')) self.assertEqual(response.status_code, 200) self.assertContains(response, 'coj.domb.1m0a', status_code=HTTPStatus.OK) diff --git a/tom_observations/urls.py b/tom_observations/urls.py index 2169c37b6..76b236592 100644 --- a/tom_observations/urls.py +++ b/tom_observations/urls.py @@ -5,7 +5,9 @@ ObservationGroupListView, ObservationListView, ObservationRecordCancelView, ObservationRecordDetailView, ObservationTemplateCreateView, ObservationTemplateDeleteView, ObservationTemplateListView, - ObservationTemplateUpdateView, ObservationCallbackView, ObservationRedirectView) + ObservationTemplateUpdateView, + ObservationCallbackView, ObservationRedirectView, + render_facility_status_list) from tom_observations.api_views import ObservationRecordViewSet from tom_common.api_router import SharedAPIRootRouter @@ -18,6 +20,8 @@ path('add/', AddExistingObservationView.as_view(), name='add-existing'), path('list/', ObservationListView.as_view(), name='list'), path('status/', FacilityStatusView.as_view(), name='facility-status'), + path('status/list/', render_facility_status_list, + name='render-facility-status-list'), path('template/list/', ObservationTemplateListView.as_view(), name='template-list'), path('template//create/', ObservationTemplateCreateView.as_view(), name='template-create'), path('template//update/', ObservationTemplateUpdateView.as_view(), name='template-update'), diff --git a/tom_observations/views.py b/tom_observations/views.py index 91804acbd..3d643f1c0 100644 --- a/tom_observations/views.py +++ b/tom_observations/views.py @@ -14,7 +14,7 @@ from django_filters import CharFilter, ChoiceFilter, DateTimeFromToRangeFilter, ModelMultipleChoiceFilter from django_filters import OrderingFilter, MultipleChoiceFilter, rest_framework from django_filters.views import FilterView -from django.shortcuts import get_object_or_404, redirect +from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse, reverse_lazy from django.utils.safestring import mark_safe from django.views.generic import View, TemplateView @@ -842,3 +842,33 @@ class ObservationTemplateDeleteView(LoginRequiredMixin, DeleteView): class FacilityStatusView(TemplateView): template_name = 'tom_observations/facility_status.html' + + +def render_facility_status_list(request, *args, **kwargs): + """ + View function for rendering the facility status partial. + """ + facility_statuses = [] + for facility_class in get_service_classes().values(): + facility = facility_class() + facility.set_user(request.user) + weather_urls = facility.get_facility_weather_urls() + status = facility.get_facility_status() + + # add the weather_url to the site dictionary + for site in status.get('sites', []): + url = next(( + site_url['weather_url'] for site_url in weather_urls.get('sites', []) + if site_url['code'] == site['code']), None) + if url is not None: + site['weather_url'] = url + + facility_statuses.append(status) + + hx_trigger = request.GET.get('hx_trigger') + if hx_trigger != 'load': + messages.info(request, "Facility statuses updated.") + + return render( + request, 'tom_observations/partials/facility_status_table.html', + context={'facilities': facility_statuses, 'loading': False})