from django import forms import django.utils.html import django.utils.safestring import django.template.defaulttags # third party imports import numpy # Madrigal imports import madrigal.metadata import madrigal.ui.web # madrigal imports import madrigal._derive import madrigal.metadata import madrigal.ui.web import madrigal.cedar import madrigal.isprint import madweb.forms import datetime, time def getSelection(keyword, args, kwargs): """getSelection returns '0' if keyword not a key in either args[0] or kwargs, otherwise the value args, kwargs - arguments as passed into SingleExpDefaultForm __init__ """ if len(args) == 0 and len(list(kwargs.keys())) == 0: return('0') # default case when no data passed in elif len(args) > 0: # args[0] is data dict argument to bind data if keyword in args[0]: return(args[0][keyword]) else: return('0') elif keyword in kwargs: return(kwargs[keyword]) elif 'data' in kwargs: if keyword in kwargs['data']: return(kwargs['data'][keyword]) else: return('0') else: return('0') def getExperimentList(args, kwargs, madWeb, header='Select experiment: '): instrumentsId= int(getSelection('instruments', args, kwargs)) kinstList = [int(instrumentsId)] startDate = datetime.datetime(1950,1,1) startDT = datetime.datetime(startDate.year, startDate.month, startDate.day, 0, 0, 0) now = datetime.datetime.now() endDate = datetime.datetime(now.year, 12, 31, 23, 59, 59) endDT = datetime.datetime(endDate.year, endDate.month, endDate.day, 23, 59, 59) experiments = madWeb.getExperimentList(kinstList,startDT, endDT, True) expListin = [('0', header),] for exp in experiments: expListin.append((exp[0], exp[2])) # Using set seen = set() # using list comprehension expList = [(a, b) for a, b in expListin if not (b in seen or seen.add(b))] return(expList) class UpdataForm(forms.Form): def __init__(self, *args, **kwargs): super(UpdataForm, self).__init__(*args, **kwargs) madDB = madrigal.metadata.MadrigalDB() madInstData = madrigal.metadata.MadrigalInstrumentData(madDB) instruments = madInstData.getInstruments(0, True) instList = [('0', "Select Instrument"), ] for kinst, instDesc, siteID in instruments: instList.append((str(kinst), instDesc)) instrumentSelection = getSelection('instruments', args, kwargs) self.fields['instruments'] = django.forms.ChoiceField(widget = django.forms.Select(attrs={"onChange":'populateExp(this)'}), choices=instList, initial=instrumentSelection, label='Instrument:') madWebObj = madrigal.ui.web.MadrigalWeb(madDB) experimentSelection = getSelection('experiments', args, kwargs) self.fields['experiments'] = django.forms.ChoiceField(choices=getExperimentList(args, kwargs, madWebObj), initial=experimentSelection, required=False, label='Experiment:') description = forms.CharField(widget=forms.Textarea(attrs={'cols': 40,'rows': 3, 'style': 'resize:none'}), label='Description') type = forms.ChoiceField(choices=[('0', 'Public'),('1', 'Private')], initial=0,widget=forms.RadioSelect(attrs={'class': 'custom-radio'})) file = forms.FileField(label='Select Files', widget=forms.ClearableFileInput(attrs={'multiple': True})) class ExpForm(forms.Form): """SingleExpInstForm is a Form class for the instrument select field in the Single Experiment interface. Use this because its faster to create than the full SingleExpDefaultForm """ def __init__(self, *args, **kwargs): super(ExpForm, self).__init__(*args, **kwargs) madDB = madrigal.metadata.MadrigalDB() madWebObj = madrigal.ui.web.MadrigalWeb(madDB) experimentSelection = getSelection('experiments', args, kwargs) self.fields['experiments'] = django.forms.ChoiceField(choices=getExperimentList(args, kwargs, madWebObj), initial=experimentSelection, required=False, label='Experiment')