forms.py
131 lines
| 5.1 KiB
| text/x-python
|
PythonLexer
r0 | """Forms for cedar application | |||
$Id: forms.py 7033 2019-10-03 20:15:55Z brideout $ | ||||
""" | ||||
# standard python imports | ||||
import os.path | ||||
import datetime | ||||
# django imports | ||||
import django.forms | ||||
import django.utils.html | ||||
import django.utils.safestring | ||||
# Madrigal imports | ||||
import madrigal.metadata | ||||
import madrigal.ui.userData | ||||
class AdminLogForm(django.forms.Form): | ||||
"""AdminLogForm is a Form class for the get log admin interface | ||||
""" | ||||
def __init__(self, *args, **kwargs): | ||||
super(AdminLogForm, self).__init__(*args, **kwargs) | ||||
selectedSite = None | ||||
kinstChoices = [('0', 'Select a site first'),] | ||||
if len(args) > 0: | ||||
try: | ||||
if 'site' in args[0]: | ||||
selectedSite = int(args[0]['site']) | ||||
except: | ||||
pass | ||||
madDB = madrigal.metadata.MadrigalDB() | ||||
madSiteObj = madrigal.metadata.MadrigalSite(madDB) | ||||
madInstObj = madrigal.metadata.MadrigalInstrument(madDB) | ||||
self.madUserObj = madrigal.ui.userData.MadrigalUserData(madDB) | ||||
madExpObj = madrigal.metadata.MadrigalExperiment(madDB, os.path.join(madDB.getMadroot(), 'metadata/expTabAll.txt')) | ||||
siteDict = {} # temp dict with key = siteId, value = list of kinst where there is data at that site | ||||
for i in range(madExpObj.getExpCount()): | ||||
siteId = madExpObj.getExpSiteIdByPosition(i) | ||||
kinst = madExpObj.getKinstByPosition(i) | ||||
try: | ||||
if kinst in siteDict[siteId]: | ||||
continue | ||||
except KeyError: | ||||
pass | ||||
expUrl = madExpObj.getExpUrlByPosition(i) | ||||
if madDB.isTestExperiment(expUrl): | ||||
continue | ||||
if siteId in siteDict: | ||||
siteDict[siteId].append(kinst) | ||||
else: | ||||
siteDict[siteId] = [kinst] | ||||
# make siteList, which is sorted list of (siteid, kinst, instName) and siteChoices | ||||
# which is (siteID, siteName) | ||||
self.siteList = [] | ||||
self.siteChoices = [("0", "Select your site")] | ||||
sites = list(siteDict.keys()) | ||||
sites.sort() | ||||
for site in sites: | ||||
if site not in (10,): #skip CEDAR site | ||||
self.siteChoices.append((site, madSiteObj.getSiteName(site))) | ||||
kinstList = siteDict[site] | ||||
kinstList.sort() | ||||
for kinst in kinstList: | ||||
self.siteList.append((site, kinst, madInstObj.getInstrumentName(kinst))) | ||||
if not selectedSite is None: | ||||
if selectedSite == site: | ||||
kinstChoices.append((kinst, madInstObj.getInstrumentName(kinst))) | ||||
# now add to self.siteList and self.siteChoices from hostSite.txt file | ||||
filename = os.path.join(madDB.getMadroot(), 'metadata/hostSite.txt') | ||||
f = open(filename) | ||||
lines = f.readlines() | ||||
for line in lines: | ||||
items = line.strip().split(',') | ||||
if len(items) < 3: | ||||
continue | ||||
siteId = int(items[0]) | ||||
# check this is unique siteId | ||||
if siteId in siteDict: | ||||
raise IOError('File hostSite.txt has siteId %i from siteTab.txt' % (siteId)) | ||||
kinstList = [] | ||||
for item in items[2:]: | ||||
kinst = int(item) | ||||
kinstList.append(kinst) | ||||
self.siteList.append((siteId, kinst, madInstObj.getInstrumentName(kinst))) | ||||
if not selectedSite is None: | ||||
if selectedSite == siteId: | ||||
kinstChoices.append((kinst, madInstObj.getInstrumentName(kinst))) | ||||
self.siteChoices.append((str(siteId), items[1])) | ||||
self.fields['site'] = django.forms.ChoiceField(widget = django.forms.Select(attrs={"onChange":'selectSite(this.form)'}), | ||||
choices=self.siteChoices, | ||||
initial='0') | ||||
self.fields['password'] = django.forms.CharField(widget = django.forms.PasswordInput()) | ||||
self.fields['kinst'] = django.forms.CharField(widget=django.forms.SelectMultiple(choices=kinstChoices)) | ||||
# time selection | ||||
self.fields['startDate'] = django.forms.DateField(input_formats=['%Y-%m-%d'], | ||||
initial=datetime.datetime(2011,1,1,0,0,0)) | ||||
now = datetime.datetime.now() | ||||
self.fields['endDate'] = django.forms.DateField(input_formats=['%Y-%m-%d'], | ||||
initial=datetime.datetime(now.year,12,31,0,0,0)) | ||||
def clean(self): | ||||
"""clean verifies password | ||||
""" | ||||
siteId = int(self.cleaned_data['site']) | ||||
siteName = None | ||||
for id, name in self.siteChoices: | ||||
if int(id) == siteId: | ||||
siteName = name | ||||
break | ||||
if siteName is None: | ||||
raise django.forms.ValidationError('Illegal site choosen') | ||||
if not self.madUserObj.verifyUser(siteName, self.cleaned_data['password']): | ||||
raise django.forms.ValidationError('Incorrect password') | ||||