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