from django.contrib.auth.decorators import login_required from django.shortcuts import render from .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 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() if request.method == 'POST': form = UpdataForm(request.POST, request.FILES) files = request.FILES.getlist('file') if form.is_valid(): try: description = form.cleaned_data['description'] instCode = int(form.cleaned_data['instruments']) expId = form.cleaned_data['experiments'] perm = int(form.cleaned_data['type']) #saving file for f in files: fs = FileSystemStorage(location='/tmp') fs.save(f.name, f) madExp = madrigal.metadata.MadrigalExperiment() filepath = os.path.join('/tmp', f.name) expTitle = madExp.getExpNameByExpId(expId) dbAdminObj.createMadrigalExperiment(filepath,expTitle, perm, description, instCode) 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() messages.success( request, 'Experimento(s) creado(s) exitosamente') form = UpdataForm() except Exception as e: messages.error( request, str(e)) 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})