from django.core.management.base import BaseCommand, CommandError 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 monthplan.models import Head, Observation, Seance, Correction, Scan, Survey, FlightPlan, DataDump from astropy.io import fits from datetime 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 astropy.units as u from astropy.time.formats import erfa from astropy.time import Time, TimeDelta, TimezoneInfo, TimeFromEpoch from django.db.models import Q import math MJDREF = 51543.875 TZ_UTC = TimezoneInfo(utc_offset=0*u.hour) TZ_MSK = TimezoneInfo(utc_offset=3*u.hour) TIMESTR_FORMAT = '%Y-%m-%d %H:%M:%S' def str2date(timestr, tzone): time_raw = datetime.strptime(timestr, TIMESTR_FORMAT) time_zoned = time_raw.replace(tzinfo=tzone) return time_zoned def date2mission(dtime): mjdref = Time(MJDREF, format='mjd') dtime = Time(dtime , format='datetime') return (dtime - mjdref).sec def mission2date(timesec, tzone): mjdref = Time(MJDREF, format='mjd') delta = TimeDelta(timesec, format='sec') dtime = mjdref + delta + 3*u.hour return dtime.to_datetime() def print_obsplan_dt_sec(dtstr): dt = str2date(dtstr, tzone=TZ_MSK) ts = date2mission(dt) print(dt, '-->', ts) def print_pz_dt_sec(dtstr): dt = str2date(dtstr, tzone=TZ_UTC) ts = date2mission(dt) print(dt, '-->', ts) def load_data(file): print('Load data (dummy)') csvfile=INPUT_DATA_DIR+'/'+file df = pd.read_csv(csvfile,names=['name', 'path', 'filename', 'tstart','tstop']) print(df) for i in df.index: dd = DataDump() dd.start=mission2date(int(df['tstart'][i]), TZ_MSK) dd.stop=mission2date(int(df['tstop'][i]), TZ_MSK) dd.tstart=int(df['tstart'][i]) dd.tstop=int(df['tstop'][i]) dd.name=df['name'][i] dd.filename=df['filename'][i] dd.path=df['path'][i] dd.save() observations = Observation.objects.filter(Q(start__gte=dd.start) & Q(start__lte=dd.stop)) scans = Scan.objects.filter(Q(start__gte=dd.start) & Q(start__lte=dd.stop)) for observation in observations: dd.observations.add(observation) for scan in scans: dd.scans.add(scan) observations = Observation.objects.filter(Q(stop__gte=dd.start) & Q(stop__lte=dd.stop)) scans = Scan.objects.filter(Q(stop__gte=dd.start) & Q(stop__lte=dd.stop)) for observation in observations: dd.observations.add(observation) for scan in scans: dd.scans.add(scan) dd.save() print(mission2date(int(df['tstart'][i]), TZ_MSK)) print(df['name'][i]) pass def validate_flightplan(): list = FlightPlan.objects.all() for pz in list: if (pz.experiment == '00000000000' and pz.valid == True): pz.valid = False pz.save() continue first = FlightPlan.objects.filter(experiment__exact=pz.experiment).order_by("-load_stamp")[0] first.valid = True first.save() pass 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): dds = DataDump.objects.all() dds.delete() load_data('read_seance.csv') print_pz_dt_sec('2019-08-21 22:00:00') print_pz_dt_sec('2019-08-21 23:00:00') #validate_flightplan()