##// END OF EJS Templates
Fix upload files
Fix upload files

File last commit:

r10:ac38b2ff3424
r10:ac38b2ff3424
Show More
views.py
115 lines | 4.0 KiB | text/x-python | PythonLexer
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})