from django.core.management.base import BaseCommand, CommandError from datetime import datetime as dt from datetime import date from django.utils import dateparse from logbook.models import LogBookPlan, LogBookDay from plan.models import INPUT_DATA_DIR from plan.models import LaunchDate from srglib.utils import make_source_name from monthplan.models import Head, Observation, Seance, Correction, Scan, Survey, FlightPlan from astropy.io import fits import datetime from django.utils import timezone from astropy.io import fits import pandas as pd from pandas import ExcelWriter from pandas import ExcelFile #import xlrd from astropy.table import Table import math from django.db.models import Q def find_closest(now, closest_greater_qs, closest_less_qs): try: try: closest_greater = closest_greater_qs[0] except IndexError: closest = closest_less_qs[0] try: closest_less = closest_less_qs[0] except IndexError: closest = closest_greater_qs[0] except IndexError: raise self.model.DoesNotExist("There is no closest object" " because there are no objects.") if closest_greater.dtime - now > now - closest_less.dtime: closest = closest_less else: closest = closest_greater return closest.ra, closest.dec class Command(BaseCommand): help = 'Initiates data base' # def add_arguments(self, parser): # parser.add_argument('poll_id', nargs='+', type=int) def handle(self, *args, **options): name = make_source_name('SRG A',0.87,45.0) print(name) return now = timezone.localtime(timezone.now()) print(now) ra='n/a' dec='n/a' request_path='load' try: surveys = Survey.objects.filter(Q(start__lte=now) & Q(stop__gte=now)) # take first element only: for survey in surveys: print(survey.ra_p) target = survey.target obsid = survey.experiment url = survey.get_absolute_url() ra="%.4f" % survey.ra_p dec="%.4f" % survey.dec_p mode='Survey' if request_path == "load": path=list(survey.surveypath_set.all().values('ra', 'dec'))[::500] closest_greater_qs = survey.surveypath_set.filter(dtime__gt=now).order_by('dtime') closest_less_qs = survey.surveypath_set.filter(dtime__lt=now).order_by('-dtime') closest_ra, closest_dec = find_closest(now, closest_greater_qs, closest_less_qs) ra="%.4f" % closest_ra dec="%.4f" % closest_dec print("*** closest found ***") break except NameError as error: print('pass',error) pass print(ra, dec)