|
|
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')
|
|
|
|