##// END OF EJS Templates

File last commit:

r11:4a6fe1f2abe6
r12:32027bfc803c merge
Show More
views.py
160 lines | 6.2 KiB | text/x-python | PythonLexer
Add modules for interactive plots and upload data
r2
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
Review updata app
r8 from apps.updata.forms import UpdataForm, ExpForm
Add modules for interactive plots and upload data
r2 from django.core.files.storage import FileSystemStorage
from django.contrib import messages
import os
Fix bug in upload data
r11 import glob
import datetime
Add modules for interactive plots and upload data
r2
# madrigal imports
import madrigal.metadata
import madrigal.ui.web
import madrigal.admin
Fix bugs and plots
r6 @login_required(login_url='/madrigal/accounts/login/')
Add modules for interactive plots and upload data
r2 def index(request):
'''
Uploading experiments data view. Allows user to upload experiment files
'''
dbAdminObj = madrigal.admin.MadrigalDBAdmin()
madDB = madrigal.metadata.MadrigalDB()
madWebObj = madrigal.ui.web.MadrigalWeb(madDB)
siteName, siteList = madWebObj.getSiteInfo()
Review updata app
r8 err = False
Add modules for interactive plots and upload data
r2 if request.method == 'POST':
Fix bug in upload data
r11 for root, folders, tmp_files in os.walk('/tmp/'):
for f in tmp_files:
os.remove(os.path.join(root, f))
Add modules for interactive plots and upload data
r2 form = UpdataForm(request.POST, request.FILES)
Fix bug in upload data
r11 files = list(request.FILES.getlist('file'))
Review updata app
r8 files.sort()
filenames = []
choose = request.POST.get('choose')
if choose == 'new':
instCode = int(request.POST.get('inst'))
expTitle = request.POST.get('exp')
else:
instCode = int(request.POST.get('instruments'))
expId = request.POST.get('experiments')
madExp = madrigal.metadata.MadrigalExperiment()
expTitle = madExp.getExpNameByExpId(expId)
Add modules for interactive plots and upload data
r2
Review updata app
r8 description = request.POST.get('description')
perm = int(request.POST.get('permission'))
optchar = request.POST.get('optchar').strip()
first = True
Fix bug in upload data
r11
if len(files) == 1:
Review updata app
r8 fs = FileSystemStorage(location='/tmp')
Fix bug in upload data
r11 fs.save(files[0].name, files[0])
filename = os.path.join('/tmp', files[0].name)
fileInfo = madrigal.data.MadrigalFile(filename, madDB)
sTime = fileInfo.getEarliestTime()
startTime = datetime.datetime(sTime[0],sTime[1],sTime[2],sTime[3],sTime[4],sTime[5])
exp_list = madWebObj.getExpsOnDate(instCode, startTime.year, startTime.month, startTime.day)
if exp_list and os.path.exists(os.path.join(exp_list[0][2], files[0].name)):
expDir = exp_list[0][2]
Review updata app
r8 try:
Fix bug in upload data
r11 dbAdminObj.overwriteMadrigalFile(expDir, filename, notify=True)
messages.warning(request,
'Filename {} has been overwritten'.format(files[0].name)
)
Review updata app
r8 except Exception as e:
err = True
messages.error(request,
Fix bug in upload data
r11 'An error occur adding file {}: {}'.format(filename.split('/')[-1], e)
Review updata app
r8 )
else:
Fix bug in upload data
r11 fs = FileSystemStorage(location='/tmp')
fs.save(f.name, f)
filename = os.path.join('/tmp', f.name)
ext = filename.split('.')[-1]
if ext not in ('hdf5', 'h5'):
convert = True
else:
convert = False
Review updata app
r8 try:
Fix bug in upload data
r11 expDir = dbAdminObj.createMadrigalExperiment(filename, expTitle, perm, description,
instCode, optChar=optchar, updateToMad3=convert)
Review updata app
r8 except Exception as e:
err = True
messages.error(request,
Fix bug in upload data
r11 'An error occur creating the experiment {}: {}'.format(expTitle, e)
Review updata app
r8 )
filenames.append(filename.split('/')[-1])
Fix bug in upload data
r11 else:
for f in files:
fs = FileSystemStorage(location='/tmp')
fs.save(f.name, f)
filename = os.path.join('/tmp', f.name)
ext = filename.split('.')[-1]
if ext not in ('hdf5', 'h5'):
convert = True
else:
convert = False
if first:
first = False
try:
expDir = dbAdminObj.createMadrigalExperiment(filename, expTitle, perm, description,
instCode, optChar=optchar, updateToMad3=convert)
except Exception as e:
err = True
messages.error(request,
'An error occur creating the experiment {}: {}'.format(expTitle, e)
)
break
else:
try:
dbAdminObj.addMadrigalFile(expDir, filename, perm, description, updateToMad3=convert)
except Exception as e:
err = True
messages.error(request,
'An error occur adding file {}: {}'.format(filename.split('/')[-1], e)
)
filenames.append(filename.split('/')[-1])
os.remove(filename)
Review updata app
r8
if not err:
messages.success(request,
'Experiment {} created succesfully with files: {}'.format(expTitle, filenames)
)
madInstParams = madrigal.metadata.MadrigalInstrumentParameters()
madInstKindats = madrigal.metadata.MadrigalInstrumentKindats()
print('*** Updating local metadata ***')
dbAdminObj.__updateLocalMetadata__()
print('*** Rebuilding instParmTab.txt ***')
madInstParams.rebuildInstParmTable()
print('*** Rebuilding instKindatTab.txt ***')
madInstKindats.rebuildInstKindatTable()
form = UpdataForm()
Add modules for interactive plots and upload data
r2
else:
form = UpdataForm()
return render(request, 'updata/index.html', {
'form': form,
'site_name': siteName,
'site_list': siteList,
})
def get_experiments(request):
"""get_experiments is a Ajax call that returns the experiments select html to support the
updata UI. Called when a user modifies the intruments select field.
Inputs:
request
"""
form = ExpForm(request.GET)
return render(request, 'updata/experiments.html', {'form': form})