##// END OF EJS Templates
Fix bug in upload
jespinoza -
r13:11fc9889df1a
parent child
Show More
@@ -1,160 +1,160
1
1
2 from django.contrib.auth.decorators import login_required
2 from django.contrib.auth.decorators import login_required
3 from django.shortcuts import render
3 from django.shortcuts import render
4 from apps.updata.forms import UpdataForm, ExpForm
4 from apps.updata.forms import UpdataForm, ExpForm
5 from django.core.files.storage import FileSystemStorage
5 from django.core.files.storage import FileSystemStorage
6 from django.contrib import messages
6 from django.contrib import messages
7
7
8 import os
8 import os
9 import glob
9 import glob
10 import datetime
10 import datetime
11
11
12 # madrigal imports
12 # madrigal imports
13 import madrigal.metadata
13 import madrigal.metadata
14 import madrigal.ui.web
14 import madrigal.ui.web
15 import madrigal.admin
15 import madrigal.admin
16
16
17 @login_required(login_url='/madrigal/accounts/login/')
17 @login_required(login_url='/madrigal/accounts/login/')
18 def index(request):
18 def index(request):
19 '''
19 '''
20 Uploading experiments data view. Allows user to upload experiment files
20 Uploading experiments data view. Allows user to upload experiment files
21
21
22 '''
22 '''
23 dbAdminObj = madrigal.admin.MadrigalDBAdmin()
23 dbAdminObj = madrigal.admin.MadrigalDBAdmin()
24 madDB = madrigal.metadata.MadrigalDB()
24 madDB = madrigal.metadata.MadrigalDB()
25 madWebObj = madrigal.ui.web.MadrigalWeb(madDB)
25 madWebObj = madrigal.ui.web.MadrigalWeb(madDB)
26 siteName, siteList = madWebObj.getSiteInfo()
26 siteName, siteList = madWebObj.getSiteInfo()
27 err = False
27 err = False
28 if request.method == 'POST':
28 if request.method == 'POST':
29 for root, folders, tmp_files in os.walk('/tmp/'):
29 for root, folders, tmp_files in os.walk('/tmp/'):
30 for f in tmp_files:
30 for f in tmp_files:
31 os.remove(os.path.join(root, f))
31 os.remove(os.path.join(root, f))
32
32
33 form = UpdataForm(request.POST, request.FILES)
33 form = UpdataForm(request.POST, request.FILES)
34 files = list(request.FILES.getlist('file'))
34 files = list(request.FILES.getlist('file'))
35 files.sort()
35 files.sort()
36 filenames = []
36 filenames = []
37
37
38 choose = request.POST.get('choose')
38 choose = request.POST.get('choose')
39 if choose == 'new':
39 if choose == 'new':
40 instCode = int(request.POST.get('inst'))
40 instCode = int(request.POST.get('inst'))
41 expTitle = request.POST.get('exp')
41 expTitle = request.POST.get('exp')
42 else:
42 else:
43 instCode = int(request.POST.get('instruments'))
43 instCode = int(request.POST.get('instruments'))
44 expId = request.POST.get('experiments')
44 expId = request.POST.get('experiments')
45 madExp = madrigal.metadata.MadrigalExperiment()
45 madExp = madrigal.metadata.MadrigalExperiment()
46 expTitle = madExp.getExpNameByExpId(expId)
46 expTitle = madExp.getExpNameByExpId(expId)
47
47
48 description = request.POST.get('description')
48 description = request.POST.get('description')
49 perm = int(request.POST.get('permission'))
49 perm = int(request.POST.get('permission'))
50 optchar = request.POST.get('optchar').strip()
50 optchar = request.POST.get('optchar').strip()
51 first = True
51 first = True
52
52
53 if len(files) == 1:
53 if len(files) == 1:
54 fs = FileSystemStorage(location='/tmp')
54 fs = FileSystemStorage(location='/tmp')
55 fs.save(files[0].name, files[0])
55 fs.save(files[0].name, files[0])
56 filename = os.path.join('/tmp', files[0].name)
56 filename = os.path.join('/tmp', files[0].name)
57 fileInfo = madrigal.data.MadrigalFile(filename, madDB)
57 fileInfo = madrigal.data.MadrigalFile(filename, madDB)
58 sTime = fileInfo.getEarliestTime()
58 sTime = fileInfo.getEarliestTime()
59 startTime = datetime.datetime(sTime[0],sTime[1],sTime[2],sTime[3],sTime[4],sTime[5])
59 startTime = datetime.datetime(sTime[0],sTime[1],sTime[2],sTime[3],sTime[4],sTime[5])
60 exp_list = madWebObj.getExpsOnDate(instCode, startTime.year, startTime.month, startTime.day)
60 exp_list = madWebObj.getExpsOnDate(instCode, startTime.year, startTime.month, startTime.day)
61 if exp_list and os.path.exists(os.path.join(exp_list[0][2], files[0].name)):
61 if exp_list and os.path.exists(os.path.join(exp_list[0][2], files[0].name)):
62 expDir = exp_list[0][2]
62 expDir = exp_list[0][2]
63 try:
63 try:
64 dbAdminObj.overwriteMadrigalFile(expDir, filename, notify=True)
64 dbAdminObj.overwriteMadrigalFile(expDir, filename, notify=True)
65 messages.warning(request,
65 messages.warning(request,
66 'Filename {} has been overwritten'.format(files[0].name)
66 'Filename {} has been overwritten'.format(files[0].name)
67 )
67 )
68 except Exception as e:
68 except Exception as e:
69 err = True
69 err = True
70 messages.error(request,
70 messages.error(request,
71 'An error occur adding file {}: {}'.format(filename.split('/')[-1], e)
71 'An error occur adding file {}: {}'.format(filename.split('/')[-1], e)
72 )
72 )
73 else:
73 else:
74 fs = FileSystemStorage(location='/tmp')
74 fs = FileSystemStorage(location='/tmp')
75 fs.save(f.name, f)
75 fs.save(files[0].name, files[0])
76 filename = os.path.join('/tmp', f.name)
76 filename = os.path.join('/tmp', files[0].name)
77 ext = filename.split('.')[-1]
77 ext = filename.split('.')[-1]
78 if ext not in ('hdf5', 'h5'):
78 if ext not in ('hdf5', 'h5'):
79 convert = True
79 convert = True
80 else:
80 else:
81 convert = False
81 convert = False
82 try:
82 try:
83 expDir = dbAdminObj.createMadrigalExperiment(filename, expTitle, perm, description,
83 expDir = dbAdminObj.createMadrigalExperiment(filename, expTitle, perm, description,
84 instCode, optChar=optchar, updateToMad3=convert)
84 instCode, optChar=optchar, updateToMad3=convert)
85 except Exception as e:
85 except Exception as e:
86 err = True
86 err = True
87 messages.error(request,
87 messages.error(request,
88 'An error occur creating the experiment {}: {}'.format(expTitle, e)
88 'An error occur creating the experiment {}: {}'.format(expTitle, e)
89 )
89 )
90 filenames.append(filename.split('/')[-1])
90 filenames.append(filename.split('/')[-1])
91 else:
91 else:
92 for f in files:
92 for f in files:
93 fs = FileSystemStorage(location='/tmp')
93 fs = FileSystemStorage(location='/tmp')
94 fs.save(f.name, f)
94 fs.save(f.name, f)
95 filename = os.path.join('/tmp', f.name)
95 filename = os.path.join('/tmp', f.name)
96 ext = filename.split('.')[-1]
96 ext = filename.split('.')[-1]
97 if ext not in ('hdf5', 'h5'):
97 if ext not in ('hdf5', 'h5'):
98 convert = True
98 convert = True
99 else:
99 else:
100 convert = False
100 convert = False
101
101
102 if first:
102 if first:
103 first = False
103 first = False
104 try:
104 try:
105 expDir = dbAdminObj.createMadrigalExperiment(filename, expTitle, perm, description,
105 expDir = dbAdminObj.createMadrigalExperiment(filename, expTitle, perm, description,
106 instCode, optChar=optchar, updateToMad3=convert)
106 instCode, optChar=optchar, updateToMad3=convert)
107 except Exception as e:
107 except Exception as e:
108 err = True
108 err = True
109 messages.error(request,
109 messages.error(request,
110 'An error occur creating the experiment {}: {}'.format(expTitle, e)
110 'An error occur creating the experiment {}: {}'.format(expTitle, e)
111 )
111 )
112 break
112 break
113 else:
113 else:
114 try:
114 try:
115 dbAdminObj.addMadrigalFile(expDir, filename, perm, description, updateToMad3=convert)
115 dbAdminObj.addMadrigalFile(expDir, filename, perm, description, updateToMad3=convert)
116 except Exception as e:
116 except Exception as e:
117 err = True
117 err = True
118 messages.error(request,
118 messages.error(request,
119 'An error occur adding file {}: {}'.format(filename.split('/')[-1], e)
119 'An error occur adding file {}: {}'.format(filename.split('/')[-1], e)
120 )
120 )
121 filenames.append(filename.split('/')[-1])
121 filenames.append(filename.split('/')[-1])
122 os.remove(filename)
122 os.remove(filename)
123
123
124 if not err:
124 if not err:
125 messages.success(request,
125 messages.success(request,
126 'Experiment {} created succesfully with files: {}'.format(expTitle, filenames)
126 'Experiment {} created succesfully with files: {}'.format(expTitle, filenames)
127 )
127 )
128
128
129 madInstParams = madrigal.metadata.MadrigalInstrumentParameters()
129 madInstParams = madrigal.metadata.MadrigalInstrumentParameters()
130 madInstKindats = madrigal.metadata.MadrigalInstrumentKindats()
130 madInstKindats = madrigal.metadata.MadrigalInstrumentKindats()
131
131
132 print('*** Updating local metadata ***')
132 print('*** Updating local metadata ***')
133 dbAdminObj.__updateLocalMetadata__()
133 dbAdminObj.__updateLocalMetadata__()
134 print('*** Rebuilding instParmTab.txt ***')
134 print('*** Rebuilding instParmTab.txt ***')
135 madInstParams.rebuildInstParmTable()
135 madInstParams.rebuildInstParmTable()
136 print('*** Rebuilding instKindatTab.txt ***')
136 print('*** Rebuilding instKindatTab.txt ***')
137 madInstKindats.rebuildInstKindatTable()
137 madInstKindats.rebuildInstKindatTable()
138
138
139 form = UpdataForm()
139 form = UpdataForm()
140
140
141 else:
141 else:
142 form = UpdataForm()
142 form = UpdataForm()
143
143
144 return render(request, 'updata/index.html', {
144 return render(request, 'updata/index.html', {
145 'form': form,
145 'form': form,
146 'site_name': siteName,
146 'site_name': siteName,
147 'site_list': siteList,
147 'site_list': siteList,
148 })
148 })
149
149
150
150
151 def get_experiments(request):
151 def get_experiments(request):
152 """get_experiments is a Ajax call that returns the experiments select html to support the
152 """get_experiments is a Ajax call that returns the experiments select html to support the
153 updata UI. Called when a user modifies the intruments select field.
153 updata UI. Called when a user modifies the intruments select field.
154
154
155 Inputs:
155 Inputs:
156 request
156 request
157 """
157 """
158 form = ExpForm(request.GET)
158 form = ExpForm(request.GET)
159
159
160 return render(request, 'updata/experiments.html', {'form': form})
160 return render(request, 'updata/experiments.html', {'form': form})
General Comments 0
You need to be logged in to leave comments. Login now