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 getExperimentList(instrumentId=None): madDB = madrigal.metadata.MadrigalDB() madWeb = madrigal.ui.web.MadrigalWeb(madDB) if instrumentId: kinstList = [int(instrumentId)] else: kinstList = [0] 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', 'Select experiment: '),] 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) def getInstrumentList(): 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)) return(instList) class UpdataForm(forms.Form): CHOICES=[('new','New Instrument/Experiment'), ('existing','Existing')] choose = forms.ChoiceField( choices=CHOICES, widget=forms.RadioSelect(attrs={'class': 'custom-radio', 'onClick': 'updateRadio(this);'}), initial='existing') inst = forms.IntegerField(min_value=1, label='Instrument ID:', disabled=True, required=False) exp = forms.CharField(max_length=40, label='Experiment Title:', disabled=True, required=False) instruments = forms.ChoiceField( widget = django.forms.Select(attrs={"onChange":'populateExp(this);'}), choices=getInstrumentList(), required=False, label='Instruments:') experiments = forms.ChoiceField( choices=[], required=False, label='Experiments:') permission = forms.ChoiceField( choices=[('0', 'Public'),('1', 'Private')], initial=0, widget=forms.RadioSelect(attrs={'class': 'custom-radio'})) description = forms.CharField( widget=forms.Textarea(attrs={'cols': 40,'rows': 3, 'style': 'resize:none'}), required=False, label='Description') optchar = forms.CharField(max_length=1, label='Optional Char:', required=False) 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) self.fields['experiments'] = forms.ChoiceField( choices=getExperimentList(args[0]['instrument']), # initial=kwargs['exp'], required=False, label='Experiments')