@@ -1,31 +1,31 | |||
|
1 | 1 | version: '3' |
|
2 | 2 | |
|
3 | 3 | services: |
|
4 | 4 | web: |
|
5 | 5 | container_name: 'madrigal' |
|
6 | 6 | build: . |
|
7 | 7 | restart: always |
|
8 | 8 | image: madrigal |
|
9 | 9 | working_dir: /madrigal/source/madpy/djangoMad |
|
10 | 10 | command: gunicorn djangoMad.wsgi --bind 0.0.0.0:8000 |
|
11 |
# command: python manage.py runserver 0.0.0.0:8 |
|
|
11 | # command: python manage.py runserver 0.0.0.0:8888 | |
|
12 | 12 | env_file: .env |
|
13 | 13 | # ports: |
|
14 |
# - 8 |
|
|
14 | # - 8888:8888 | |
|
15 | 15 | volumes: |
|
16 | 16 | - '${EXP_DIR}:/madrigal/experiments' |
|
17 | - '/usr/local/madrigal/metadata:/madrigal/metadata' | |
|
18 |
- '/ |
|
|
17 | # - '/usr/local/madrigal/metadata:/madrigal/metadata' | |
|
18 | - '/home/jespinoza/workspace/madrigal/source/madpy/djangoMad:/madrigal/source/madpy/djangoMad' | |
|
19 | 19 | |
|
20 | 20 | nginx: |
|
21 | 21 | container_name: 'madrigal-nginx' |
|
22 | 22 | image: nginx:1.15-alpine |
|
23 | 23 | volumes: |
|
24 | 24 | - ./source/madpy/djangoMad/madweb/static:/static |
|
25 | 25 | - ./nginx:/etc/nginx/conf.d |
|
26 | 26 | ports: |
|
27 | 27 | - "${MAD_PORT}:8080" |
|
28 | 28 | depends_on: |
|
29 | 29 | - web |
|
30 | 30 | command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'" |
|
31 | 31 |
@@ -1,21 +1,22 | |||
|
1 | 1 | # configuration |
|
2 | 2 | |
|
3 | 3 | upstream djangomad { |
|
4 | 4 | server web:8000; |
|
5 | 5 | } |
|
6 | 6 | |
|
7 | 7 | server { |
|
8 | 8 | listen 8080; |
|
9 | client_max_body_size 50M; | |
|
9 | 10 | |
|
10 | 11 | location /madrigal { |
|
11 | 12 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
|
12 | 13 | proxy_set_header Host $host; |
|
13 | 14 | proxy_redirect off; |
|
14 | 15 | proxy_set_header X-Script-Name /madrigal; |
|
15 | 16 | proxy_pass http://djangomad; |
|
16 | 17 | } |
|
17 | 18 | |
|
18 | 19 | location /madrigal/static/ { |
|
19 | 20 | alias /static/; |
|
20 | 21 | } |
|
21 | 22 | } |
@@ -1,38 +1,38 | |||
|
1 | 1 | from django.contrib.auth import authenticate |
|
2 | 2 | from django.contrib.auth import login, logout |
|
3 | 3 | from django.contrib.auth.forms import AuthenticationForm |
|
4 | 4 | from django.shortcuts import render, redirect |
|
5 | 5 | |
|
6 | 6 | ''' Login to updata app for ROJ staff''' |
|
7 | 7 | |
|
8 | 8 | def login_view(request): |
|
9 | 9 | |
|
10 | 10 | form = AuthenticationForm() |
|
11 | 11 | if request.method == "POST": |
|
12 | 12 | form = AuthenticationForm(data=request.POST) |
|
13 | 13 | |
|
14 | 14 | if form.is_valid(): |
|
15 | 15 | |
|
16 | 16 | username = form.cleaned_data['username'] |
|
17 | 17 | password = form.cleaned_data['password'] |
|
18 | 18 | |
|
19 | 19 | user = authenticate(username=username, password=password) |
|
20 | 20 | |
|
21 | 21 | if user is not None: |
|
22 | 22 | |
|
23 | 23 | if user.is_active: |
|
24 | 24 | login(request, user) |
|
25 | 25 | |
|
26 |
return redirect(' |
|
|
26 | return redirect(request.GET.get('next')) | |
|
27 | 27 | else: |
|
28 | 28 | return render(request, "login/login.html" ) |
|
29 | 29 | else: |
|
30 | 30 | context = {'error_login': "error"} |
|
31 | 31 | return render(request, "login/login.html", context ) |
|
32 | 32 | |
|
33 | 33 | return render(request, "login/login.html", {'form': form}) |
|
34 | 34 | |
|
35 | 35 | def logout_view(request): |
|
36 | 36 | |
|
37 | 37 | logout(request) |
|
38 |
return redirect(' |
|
|
38 | return redirect('index') No newline at end of file |
@@ -1,108 +1,106 | |||
|
1 | 1 | from django import forms |
|
2 | 2 | import django.utils.html |
|
3 | 3 | import django.utils.safestring |
|
4 | 4 | import django.template.defaulttags |
|
5 | 5 | |
|
6 | 6 | # third party imports |
|
7 | 7 | import numpy |
|
8 | 8 | |
|
9 | 9 | # Madrigal imports |
|
10 | 10 | import madrigal.metadata |
|
11 | 11 | import madrigal.ui.web |
|
12 | 12 | |
|
13 | 13 | # madrigal imports |
|
14 | 14 | import madrigal._derive |
|
15 | 15 | import madrigal.metadata |
|
16 | 16 | import madrigal.ui.web |
|
17 | 17 | import madrigal.cedar |
|
18 | 18 | import madrigal.isprint |
|
19 | 19 | import madweb.forms |
|
20 | 20 | |
|
21 | 21 | import datetime, time |
|
22 | 22 | |
|
23 | def getSelection(keyword, args, kwargs): | |
|
24 | """getSelection returns '0' if keyword not a key in either args[0] or kwargs, | |
|
25 | otherwise the value | |
|
26 | ||
|
27 | args, kwargs - arguments as passed into SingleExpDefaultForm __init__ | |
|
28 | """ | |
|
29 | if len(args) == 0 and len(list(kwargs.keys())) == 0: | |
|
30 | return('0') # default case when no data passed in | |
|
31 | elif len(args) > 0: | |
|
32 | # args[0] is data dict argument to bind data | |
|
33 | if keyword in args[0]: | |
|
34 | return(args[0][keyword]) | |
|
35 | else: | |
|
36 | return('0') | |
|
37 | elif keyword in kwargs: | |
|
38 | return(kwargs[keyword]) | |
|
39 | elif 'data' in kwargs: | |
|
40 | if keyword in kwargs['data']: | |
|
41 | return(kwargs['data'][keyword]) | |
|
42 | else: | |
|
43 | return('0') | |
|
44 | else: | |
|
45 | return('0') | |
|
46 | 23 | |
|
47 | def getExperimentList(args, kwargs, madWeb, header='Select experiment: '): | |
|
24 | def getExperimentList(instrumentId=None): | |
|
48 | 25 | |
|
49 | instrumentsId= int(getSelection('instruments', args, kwargs)) | |
|
26 | madDB = madrigal.metadata.MadrigalDB() | |
|
27 | madWeb = madrigal.ui.web.MadrigalWeb(madDB) | |
|
28 | ||
|
29 | if instrumentId: | |
|
30 | kinstList = [int(instrumentId)] | |
|
31 | else: | |
|
32 | kinstList = [0] | |
|
50 | 33 | |
|
51 | kinstList = [int(instrumentsId)] | |
|
52 | 34 | startDate = datetime.datetime(1950,1,1) |
|
53 | 35 | startDT = datetime.datetime(startDate.year, startDate.month, startDate.day, 0, 0, 0) |
|
54 | 36 | now = datetime.datetime.now() |
|
55 | 37 | endDate = datetime.datetime(now.year, 12, 31, 23, 59, 59) |
|
56 | 38 | endDT = datetime.datetime(endDate.year, endDate.month, endDate.day, 23, 59, 59) |
|
57 | 39 | experiments = madWeb.getExperimentList(kinstList,startDT, endDT, True) |
|
58 |
expListin = [('0', |
|
|
40 | expListin = [('0', 'Select experiment: '),] | |
|
59 | 41 | for exp in experiments: |
|
60 | 42 | expListin.append((exp[0], exp[2])) |
|
61 | 43 | |
|
62 | 44 | # Using set |
|
63 | 45 | seen = set() |
|
64 | 46 | |
|
65 | 47 | # using list comprehension |
|
66 | 48 | expList = [(a, b) for a, b in expListin |
|
67 | 49 | if not (b in seen or seen.add(b))] |
|
68 | 50 | |
|
69 | 51 | return(expList) |
|
70 | 52 | |
|
53 | def getInstrumentList(): | |
|
54 | ||
|
55 | madDB = madrigal.metadata.MadrigalDB() | |
|
56 | madInstData = madrigal.metadata.MadrigalInstrumentData(madDB) | |
|
57 | instruments = madInstData.getInstruments(0, True) | |
|
58 | instList = [('0', "Select Instrument"), ] | |
|
59 | for kinst, instDesc, siteID in instruments: | |
|
60 | instList.append((str(kinst), instDesc)) | |
|
61 | ||
|
62 | return(instList) | |
|
63 | ||
|
71 | 64 | class UpdataForm(forms.Form): |
|
72 | def __init__(self, *args, **kwargs): | |
|
73 | super(UpdataForm, self).__init__(*args, **kwargs) | |
|
74 | madDB = madrigal.metadata.MadrigalDB() | |
|
75 | madInstData = madrigal.metadata.MadrigalInstrumentData(madDB) | |
|
76 | instruments = madInstData.getInstruments(0, True) | |
|
77 | instList = [('0', "Select Instrument"), ] | |
|
78 | for kinst, instDesc, siteID in instruments: | |
|
79 | instList.append((str(kinst), instDesc)) | |
|
80 | 65 | |
|
81 | instrumentSelection = getSelection('instruments', args, kwargs) | |
|
82 | self.fields['instruments'] = django.forms.ChoiceField(widget = django.forms.Select(attrs={"onChange":'populateExp(this)'}), | |
|
83 | choices=instList, | |
|
84 | initial=instrumentSelection, | |
|
85 | label='Instrument:') | |
|
86 | ||
|
87 | madWebObj = madrigal.ui.web.MadrigalWeb(madDB) | |
|
88 | experimentSelection = getSelection('experiments', args, kwargs) | |
|
89 | self.fields['experiments'] = django.forms.ChoiceField(choices=getExperimentList(args, kwargs, madWebObj), | |
|
90 | initial=experimentSelection, | |
|
91 | required=False, label='Experiment:') | |
|
92 | ||
|
93 | description = forms.CharField(widget=forms.Textarea(attrs={'cols': 40,'rows': 3, 'style': 'resize:none'}), label='Description') | |
|
94 | type = forms.ChoiceField(choices=[('0', 'Public'),('1', 'Private')], initial=0,widget=forms.RadioSelect(attrs={'class': 'custom-radio'})) | |
|
95 | file = forms.FileField(label='Select Files', widget=forms.ClearableFileInput(attrs={'multiple': True})) | |
|
66 | CHOICES=[('new','New Instrument/Experiment'), | |
|
67 | ('existing','Existing')] | |
|
68 | choose = forms.ChoiceField( | |
|
69 | choices=CHOICES, | |
|
70 | widget=forms.RadioSelect(attrs={'class': 'custom-radio', 'onClick': 'updateRadio(this);'}), | |
|
71 | initial='existing') | |
|
72 | inst = forms.IntegerField(min_value=1, label='Instrument ID:', disabled=True, required=False) | |
|
73 | exp = forms.CharField(max_length=40, label='Experiment Title:', disabled=True, required=False) | |
|
74 | instruments = forms.ChoiceField( | |
|
75 | widget = django.forms.Select(attrs={"onChange":'populateExp(this);'}), | |
|
76 | choices=getInstrumentList(), | |
|
77 | required=False, | |
|
78 | label='Instruments:') | |
|
79 | ||
|
80 | experiments = forms.ChoiceField( | |
|
81 | choices=[], | |
|
82 | required=False, | |
|
83 | label='Experiments:') | |
|
84 | permission = forms.ChoiceField( | |
|
85 | choices=[('0', 'Public'),('1', 'Private')], | |
|
86 | initial=0, | |
|
87 | widget=forms.RadioSelect(attrs={'class': 'custom-radio'})) | |
|
88 | description = forms.CharField( | |
|
89 | widget=forms.Textarea(attrs={'cols': 40,'rows': 3, 'style': 'resize:none'}), | |
|
90 | required=False, | |
|
91 | label='Description') | |
|
92 | optchar = forms.CharField(max_length=1, label='Optional Char:', required=False) | |
|
93 | file = forms.FileField( | |
|
94 | label='Select Files', | |
|
95 | widget=forms.ClearableFileInput(attrs={'multiple': True})) | |
|
96 | 96 | |
|
97 | 97 | class ExpForm(forms.Form): |
|
98 | 98 | """SingleExpInstForm is a Form class for the instrument select field in the Single Experiment interface. |
|
99 | 99 | Use this because its faster to create than the full SingleExpDefaultForm |
|
100 | 100 | """ |
|
101 | 101 | def __init__(self, *args, **kwargs): |
|
102 | 102 | super(ExpForm, self).__init__(*args, **kwargs) |
|
103 | madDB = madrigal.metadata.MadrigalDB() | |
|
104 | madWebObj = madrigal.ui.web.MadrigalWeb(madDB) | |
|
105 | experimentSelection = getSelection('experiments', args, kwargs) | |
|
106 | self.fields['experiments'] = django.forms.ChoiceField(choices=getExperimentList(args, kwargs, madWebObj), | |
|
107 | initial=experimentSelection, | |
|
108 | required=False, label='Experiment') | |
|
103 | self.fields['experiments'] = forms.ChoiceField( | |
|
104 | choices=getExperimentList(args[0]['instrument']), | |
|
105 | # initial=kwargs['exp'], | |
|
106 | required=False, label='Experiments') |
@@ -1,9 +1,7 | |||
|
1 | <div class="row"> | |
|
2 | {{ form.experiments.label }} | |
|
3 | </div> | |
|
1 | ||
|
4 | 2 | <!-- Instrument select is its own row in selections column --> |
|
5 | 3 | <div class="row"> |
|
6 | 4 | <div class="col-md-12"> |
|
7 | 5 | {{ form.experiments }} |
|
8 | 6 | </div> <!-- end span --> |
|
9 | 7 | </div> <!-- end row --> No newline at end of file |
@@ -1,102 +1,60 | |||
|
1 | 1 | {% extends "base.html" %} |
|
2 | 2 | {% block title %}Upload Data{% endblock %} |
|
3 | 3 | |
|
4 | 4 | {% block extra_head %} |
|
5 | 5 | <script type="text/javascript"> |
|
6 | 6 | function populateExp(select) { |
|
7 | 7 | |
|
8 | 8 | var kinst = select.options[select.selectedIndex].value; |
|
9 |
var url = "{% url 'updata:get_experiments' %}" + '?instrument |
|
|
9 | var url = "{% url 'updata:get_experiments' %}" + '?instrument=' + kinst; | |
|
10 | 10 | // first delete all forms that are now out of date |
|
11 | divIndex = $(".single_form").index($("#experiments")) | |
|
12 | $(".single_form").slice(divIndex).empty() | |
|
11 | //divIndex = $(".single_form").index($("#id_experiments")) | |
|
12 | //$(".single_form").slice(divIndex).empty() | |
|
13 | 13 | // second populate the categories html |
|
14 |
|
|
|
14 | //$(".single_form").slice(divIndex, divIndex + 1).load(url); | |
|
15 | $("#id_experiments").load(url); | |
|
15 | 16 | } |
|
16 | 17 | |
|
18 | function updateRadio(myRadio) { | |
|
19 | if (myRadio.value == 'new') { | |
|
20 | $( "#id_exp" ).prop( "disabled", false ); | |
|
21 | $( "#id_inst" ).prop( "disabled", false ); | |
|
22 | $( "#id_experiments" ).prop( "disabled", true ); | |
|
23 | $( "#id_instruments" ).prop( "disabled", true ); | |
|
24 | } else { | |
|
25 | $( "#id_exp" ).prop( "disabled", true ); | |
|
26 | $( "#id_inst" ).prop( "disabled", true ); | |
|
27 | $( "#id_experiments" ).prop( "disabled", false ); | |
|
28 | $( "#id_instruments" ).prop( "disabled", false ); | |
|
29 | } | |
|
30 | ||
|
31 | } | |
|
32 | ||
|
33 | ||
|
17 | 34 | </script> |
|
18 | 35 | |
|
19 | 36 | <style> |
|
20 | 37 | .custom-radio { |
|
21 | 38 | list-style: none; |
|
22 | 39 | margin: 0; |
|
23 | 40 | padding: 0; |
|
24 | 41 | } |
|
42 | ||
|
43 | .errorlist { | |
|
44 | color: red; | |
|
45 | } | |
|
25 | 46 | </style> |
|
26 | 47 | {% endblock %} |
|
27 | 48 | |
|
28 | 49 | {% block content %} |
|
29 | 50 | |
|
30 | 51 | <center><h4>Upload Data</h4></center> |
|
31 | 52 | <form method="post" enctype="multipart/form-data"> |
|
32 | 53 | |
|
33 | 54 | {% csrf_token %} |
|
34 | 55 | |
|
35 | {% block description %} | |
|
36 | <!-- subdivide selection column for instruments to be possibly filled in by ajax - single_form 0 --> | |
|
37 | <div class="col-md-12 single_form" id="description"> | |
|
38 | <div class="row"> | |
|
39 | {{ form.description.label }} | |
|
40 | </div> | |
|
41 | <!-- Instrument select is its own row in selections column --> | |
|
42 | <div class="row"> | |
|
43 | <div class="col-md-12"> | |
|
44 | {{ form.description }} | |
|
45 | </div> <!-- end span --> | |
|
46 | </div> <!-- end row --> | |
|
47 | </div> <!-- end subdivide --> | |
|
48 | ||
|
49 | {% endblock %} | |
|
50 | ||
|
51 | {% block file %} | |
|
52 | <div class="col-md-12 single_form" style="margin-top: 15px;" id="description"> | |
|
53 | <div class="row"> | |
|
54 | {{ form.file.label }} | |
|
55 | </div> | |
|
56 | <!-- Instrument select is its own row in selections column --> | |
|
57 | <div class="row"> | |
|
58 | <div class="col-md-12"> | |
|
59 | {{ form.file }} | |
|
60 | </div> <!-- end span --> | |
|
61 | </div> <!-- end row --> | |
|
62 | </div> <!-- end subdivide --> | |
|
63 | ||
|
64 | {% endblock %} | |
|
65 | ||
|
66 | {% block type %} | |
|
67 | <div class="col-md-12 single_form" style="margin-top: 15px;" id="description"> | |
|
68 | <!-- Instrument select is its own row in selections column --> | |
|
69 | <div class="row"> | |
|
70 | <div class="col-md-12"> | |
|
71 | {{ form.type }} | |
|
72 | </div> <!-- end span --> | |
|
73 | </div> <!-- end row --> | |
|
74 | </div> <!-- end subdivide --> | |
|
75 | ||
|
76 | {% endblock %} | |
|
77 | ||
|
78 | {% block instruments %} | |
|
79 | <!-- subdivide selection column for instruments to be possibly filled in by ajax - single_form 0 --> | |
|
80 | <div class="col-md-12 single_form" style="margin-top: 15px;" id="instruments"> | |
|
81 | ||
|
82 | {% if form.instruments %} | |
|
83 | {% include "madweb/instruments.html" %} | |
|
84 | {% endif %} | |
|
85 | ||
|
86 | </div> <!-- end subdivide --> | |
|
87 | {% endblock %} | |
|
88 | ||
|
89 | {% block experiments %} | |
|
90 | <!-- subdivide selection column for experiments to be possibly filled in by ajax - single_form 0 --> | |
|
91 | <div class="col-md-12 single_form" style="margin-top: 15px;" id="experiments"> | |
|
92 | ||
|
93 | {% if form.experiments %} | |
|
94 | {% include "updata/experiments.html" %} | |
|
95 | {% endif %} | |
|
96 | ||
|
97 | </div> <!-- end subdivide --> | |
|
98 | {% endblock %} | |
|
56 | {{ form.as_p }} | |
|
99 | 57 | <button style="margin-top: 15px;" type="submit">Load</button> |
|
100 | 58 | |
|
101 | 59 | </form> |
|
102 | 60 | {% endblock %} No newline at end of file |
@@ -1,83 +1,115 | |||
|
1 | 1 | |
|
2 | 2 | from django.contrib.auth.decorators import login_required |
|
3 | 3 | from django.shortcuts import render |
|
4 | from .forms import UpdataForm, ExpForm | |
|
4 | from apps.updata.forms import UpdataForm, ExpForm | |
|
5 | 5 | from django.core.files.storage import FileSystemStorage |
|
6 | 6 | from django.contrib import messages |
|
7 | 7 | |
|
8 | 8 | import os |
|
9 | 9 | |
|
10 | 10 | # madrigal imports |
|
11 | 11 | import madrigal.metadata |
|
12 | 12 | import madrigal.ui.web |
|
13 | 13 | import madrigal.admin |
|
14 | 14 | |
|
15 | 15 | @login_required(login_url='/madrigal/accounts/login/') |
|
16 | 16 | def index(request): |
|
17 | 17 | ''' |
|
18 | 18 | Uploading experiments data view. Allows user to upload experiment files |
|
19 | 19 | |
|
20 | 20 | ''' |
|
21 | 21 | dbAdminObj = madrigal.admin.MadrigalDBAdmin() |
|
22 | 22 | madDB = madrigal.metadata.MadrigalDB() |
|
23 | 23 | madWebObj = madrigal.ui.web.MadrigalWeb(madDB) |
|
24 | 24 | siteName, siteList = madWebObj.getSiteInfo() |
|
25 | ||
|
25 | err = False | |
|
26 | 26 | if request.method == 'POST': |
|
27 | 27 | form = UpdataForm(request.POST, request.FILES) |
|
28 | 28 | files = request.FILES.getlist('file') |
|
29 | files.sort() | |
|
30 | filenames = [] | |
|
31 | ||
|
32 | choose = request.POST.get('choose') | |
|
33 | if choose == 'new': | |
|
34 | instCode = int(request.POST.get('inst')) | |
|
35 | expTitle = request.POST.get('exp') | |
|
36 | else: | |
|
37 | instCode = int(request.POST.get('instruments')) | |
|
38 | expId = request.POST.get('experiments') | |
|
39 | madExp = madrigal.metadata.MadrigalExperiment() | |
|
40 | expTitle = madExp.getExpNameByExpId(expId) | |
|
29 | 41 | |
|
30 | if form.is_valid(): | |
|
31 | try: | |
|
32 | description = form.cleaned_data['description'] | |
|
33 | instCode = int(form.cleaned_data['instruments']) | |
|
34 | expId = form.cleaned_data['experiments'] | |
|
35 | perm = int(form.cleaned_data['type']) | |
|
36 | ||
|
37 | #saving file | |
|
38 | for f in files: | |
|
39 | fs = FileSystemStorage(location='/tmp') | |
|
40 | fs.save(f.name, f) | |
|
41 | madExp = madrigal.metadata.MadrigalExperiment() | |
|
42 | filepath = os.path.join('/tmp', f.name) | |
|
43 | expTitle = madExp.getExpNameByExpId(expId) | |
|
44 |
|
|
|
45 | dbAdminObj.createMadrigalExperiment(filepath,expTitle, perm, description, instCode) | |
|
46 |
|
|
|
42 | description = request.POST.get('description') | |
|
43 | perm = int(request.POST.get('permission')) | |
|
44 | optchar = request.POST.get('optchar').strip() | |
|
45 | first = True | |
|
46 | for f in files: | |
|
47 | fs = FileSystemStorage(location='/tmp') | |
|
48 | fs.save(f.name, f) | |
|
49 | filename = os.path.join('/tmp', f.name) | |
|
50 | ext = filename.split('.')[-1] | |
|
51 | if ext not in ('hdf5', 'h5'): | |
|
52 | convert = True | |
|
53 | else: | |
|
54 | convert = False | |
|
55 | ||
|
56 | if first: | |
|
57 | first = False | |
|
58 | try: | |
|
59 | expDir = dbAdminObj.createMadrigalExperiment(filename, expTitle, perm, description, | |
|
60 | instCode, optChar=optchar, updateToMad3=convert) | |
|
61 | except Exception as e: | |
|
62 | err = True | |
|
63 | messages.error(request, | |
|
64 | 'An error occur creating the experiment {}: {}'.format(expTitle, e) | |
|
65 | ) | |
|
66 | break | |
|
67 | else: | |
|
68 | try: | |
|
69 | dbAdminObj.addMadrigalFile(expDir, filename, perm, description, updateToMad3=convert) | |
|
70 | except Exception as e: | |
|
71 | err = True | |
|
72 | messages.error(request, | |
|
73 | 'An error occur adding file {}: {}'.format(filename.split('/')[-1], e) | |
|
74 | ) | |
|
75 | ||
|
76 | filenames.append(filename.split('/')[-1]) | |
|
77 | os.remove(filename) | |
|
78 | ||
|
79 | if not err: | |
|
80 | messages.success(request, | |
|
81 | 'Experiment {} created succesfully with files: {}'.format(expTitle, filenames) | |
|
82 | ) | |
|
83 | ||
|
84 | madInstParams = madrigal.metadata.MadrigalInstrumentParameters() | |
|
85 | madInstKindats = madrigal.metadata.MadrigalInstrumentKindats() | |
|
86 | ||
|
87 | print('*** Updating local metadata ***') | |
|
88 | dbAdminObj.__updateLocalMetadata__() | |
|
89 | print('*** Rebuilding instParmTab.txt ***') | |
|
90 | madInstParams.rebuildInstParmTable() | |
|
91 | print('*** Rebuilding instKindatTab.txt ***') | |
|
92 | madInstKindats.rebuildInstKindatTable() | |
|
93 | ||
|
94 | form = UpdataForm() | |
|
47 | 95 | |
|
48 | madInstParams = madrigal.metadata.MadrigalInstrumentParameters() | |
|
49 | madInstKindats = madrigal.metadata.MadrigalInstrumentKindats() | |
|
50 | ||
|
51 | print('*** Updating local metadata ***') | |
|
52 | dbAdminObj.__updateLocalMetadata__() | |
|
53 | print('*** Rebuilding instParmTab.txt ***') | |
|
54 | madInstParams.rebuildInstParmTable() | |
|
55 | print('*** Rebuilding instKindatTab.txt ***') | |
|
56 | madInstKindats.rebuildInstKindatTable() | |
|
57 | messages.success( | |
|
58 | request, 'Experimento(s) creado(s) exitosamente') | |
|
59 | form = UpdataForm() | |
|
60 | ||
|
61 | except Exception as e: | |
|
62 | messages.error( | |
|
63 | request, str(e)) | |
|
64 | 96 | else: |
|
65 | 97 | form = UpdataForm() |
|
66 | 98 | |
|
67 | 99 | return render(request, 'updata/index.html', { |
|
68 | 100 | 'form': form, |
|
69 | 101 | 'site_name': siteName, |
|
70 | 102 | 'site_list': siteList, |
|
71 | 103 | }) |
|
72 | 104 | |
|
73 | 105 | |
|
74 | 106 | def get_experiments(request): |
|
75 | 107 | """get_experiments is a Ajax call that returns the experiments select html to support the |
|
76 | 108 | updata UI. Called when a user modifies the intruments select field. |
|
77 | 109 | |
|
78 | 110 | Inputs: |
|
79 | 111 | request |
|
80 | 112 | """ |
|
81 | 113 | form = ExpForm(request.GET) |
|
82 | 114 | |
|
83 | 115 | return render(request, 'updata/experiments.html', {'form': form}) |
General Comments 0
You need to be logged in to leave comments.
Login now