views.py
115 lines
| 4.0 KiB
| text/x-python
|
PythonLexer
r2 | ||||
from django.contrib.auth.decorators import login_required | ||||
from django.shortcuts import render | ||||
r8 | from apps.updata.forms import UpdataForm, ExpForm | |||
r2 | 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 | ||||
r6 | @login_required(login_url='/madrigal/accounts/login/') | |||
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() | ||||
r8 | err = False | |||
r2 | if request.method == 'POST': | |||
form = UpdataForm(request.POST, request.FILES) | ||||
files = request.FILES.getlist('file') | ||||
r10 | #files.sort() | |||
r8 | 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) | ||||
r2 | ||||
r8 | 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() | ||||
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}) | ||||