|
|
|
|
|
from django.contrib.auth.decorators import login_required
|
|
|
from django.shortcuts import render
|
|
|
from apps.updata.forms import UpdataForm, ExpForm
|
|
|
from django.core.files.storage import FileSystemStorage
|
|
|
from django.contrib import messages
|
|
|
|
|
|
import os
|
|
|
|
|
|
# madrigal imports
|
|
|
import madrigal.metadata
|
|
|
import madrigal.ui.web
|
|
|
import madrigal.admin
|
|
|
|
|
|
@login_required(login_url='/madrigal/accounts/login/')
|
|
|
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()
|
|
|
err = False
|
|
|
if request.method == 'POST':
|
|
|
form = UpdataForm(request.POST, request.FILES)
|
|
|
files = request.FILES.getlist('file')
|
|
|
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)
|
|
|
|
|
|
description = request.POST.get('description')
|
|
|
perm = int(request.POST.get('permission'))
|
|
|
optchar = request.POST.get('optchar').strip()
|
|
|
first = True
|
|
|
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)
|
|
|
|
|
|
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()
|
|
|
|
|
|
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})
|
|
|
|