From 1ec087c0ea6ebd3e43e7a536020f9b181386a396 Mon Sep 17 00:00:00 2001 From: Jon Date: Thu, 5 Mar 2026 19:48:47 -0100 Subject: [PATCH 1/2] Fix rubin schedule pull date format for their api --- heroic_api/tasks.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/heroic_api/tasks.py b/heroic_api/tasks.py index 6ddf8bc..7c18f37 100644 --- a/heroic_api/tasks.py +++ b/heroic_api/tasks.py @@ -22,15 +22,17 @@ def poll_rubin_schedule(): telescope = Telescope.objects.get(id=RUBIN_TELESCOPE_ID) except Telescope.DoesNotExist: logger.error(f"Cannot poll Rubin schedule: Rubin telescope {RUBIN_TELESCOPE_ID} is not defined") + return try: instrument = Instrument.objects.get(id=RUBIN_INSTRUMENT_ID) except Instrument.DoesNotExist: logger.error(f"Cannot poll Rubin schedule: Rubin instrument {RUBIN_INSTRUMENT_ID} is not defined") + return # Get the schedule from 15 minutes in the past until 25 hours later start = datetime.now() - timedelta(minutes=15) - logger.info(f'Getting the Rubin schedule starting at {start.isoformat()}') - params = {'time': '25', 'start': start.isoformat()} + logger.info(f'Getting the Rubin schedule starting at {start.strftime('%Y-%m-%d %H:%M:%S')}') + params = {'time': '25', 'start': start.strftime('%Y-%m-%d %H:%M:%S')} response = requests.get(settings.RUBIN_SCHEDULE_URL, params=params) response.raise_for_status() From 6650a4072105f05b5e0b800c022623f9f3af3121 Mon Sep 17 00:00:00 2001 From: Jon Date: Fri, 13 Mar 2026 22:56:45 -0100 Subject: [PATCH 2/2] Added ordering filters on the pointing filter set --- heroic_api/filters.py | 25 ++++++++++++++++--------- heroic_base/settings.py | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/heroic_api/filters.py b/heroic_api/filters.py index e2f6c4f..a357986 100644 --- a/heroic_api/filters.py +++ b/heroic_api/filters.py @@ -21,8 +21,8 @@ class TelescopeFilter(django_filters.FilterSet): - site = django_filters.CharFilter(field_name='site__id') - observatory = django_filters.CharFilter(field_name='site__observatory__id') + site = django_filters.ModelMultipleChoiceFilter(queryset=Site.objects.all(), field_name='site__id', to_field_name='id') + observatory = django_filters.ModelMultipleChoiceFilter(queryset=Observatory.objects.all(), field_name='site__observatory__id', to_field_name='id') class Meta: model = Telescope @@ -30,9 +30,9 @@ class Meta: class InstrumentFilter(django_filters.FilterSet): - site = django_filters.CharFilter(field_name='telescope__site__id') - observatory = django_filters.CharFilter(field_name='telescope__site__observatory__id') - telescope = django_filters.CharFilter(field_name='telescope__id') + site = django_filters.ModelMultipleChoiceFilter(queryset=Site.objects.all(), field_name='telescope__site__id', to_field_name='id') + observatory = django_filters.ModelMultipleChoiceFilter(queryset=Observatory.objects.all(), field_name='telescope__site__observatory__id', to_field_name='id') + telescope = django_filters.ModelMultipleChoiceFilter(queryset=Telescope.objects.all(), field_name='telescope__id', to_field_name='id') class Meta: model = Instrument @@ -126,10 +126,10 @@ class Meta: class TelescopePointingFilter(django_filters.FilterSet): - site = django_filters.CharFilter(field_name='telescope__site__id') - observatory = django_filters.CharFilter(field_name='telescope__site__observatory__id') - telescope = django_filters.CharFilter(field_name='telescope__id') - instrument = django_filters.CharFilter(field_name='instrument__id') + site = django_filters.ModelMultipleChoiceFilter(queryset=Site.objects.all(), field_name='telescope__site__id', to_field_name='id') + observatory = django_filters.ModelMultipleChoiceFilter(queryset=Observatory.objects.all(), field_name='telescope__site__observatory__id', to_field_name='id') + telescope = django_filters.ModelMultipleChoiceFilter(queryset=Telescope.objects.all(), field_name='telescope__id', to_field_name='id') + instrument = django_filters.ModelMultipleChoiceFilter(queryset=Instrument.objects.all(), field_name='instrument__id', to_field_name='id') planned = django_filters.BooleanFilter(field_name='planned') target = django_filters.CharFilter(field_name='target', lookup_expr='icontainer', label='Target name contains') target_exact = django_filters.CharFilter(field_name='target', lookup_expr='exact', label='Target name exact') @@ -154,6 +154,13 @@ class TelescopePointingFilter(django_filters.FilterSet): label='Date Before', widget=forms.TextInput(attrs={'class': 'input', 'type': 'date'}) ) + ordering = django_filters.OrderingFilter( + fields=( + ('date', 'date'), + ('telescope', 'telescope'), + ('instrument', 'instrument') + ) + ) def filter_cone_search(self, queryset, name, value): ''' Cone search is expected in the form "ra,dec,radius" all in decimal degress. diff --git a/heroic_base/settings.py b/heroic_base/settings.py index 5f6c102..74857a7 100644 --- a/heroic_base/settings.py +++ b/heroic_base/settings.py @@ -158,7 +158,7 @@ ), 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination", - "PAGE_SIZE": 100, + "PAGE_SIZE": 1000, } SPECTACULAR_SETTINGS = {