##// END OF EJS Templates
Task #95: Se agrego funcion "export" archivo .json para cgs. Se modifico modelo de cgs, de float a integer...
Fiorella Quino -
r43:7e99c5f033ee
parent child
Show More
@@ -1,42 +1,42
1 from django.db import models
1 from django.db import models
2 from apps.main.models import Configuration
2 from apps.main.models import Configuration
3 #from json_field import JSONField
3 #from json_field import JSONField
4 from django.core.validators import MinValueValidator, MaxValueValidator
4 from django.core.validators import MinValueValidator, MaxValueValidator
5
5
6
6
7 from apps.main.models import Device, Experiment
7 from apps.main.models import Device, Experiment
8
8
9 from files import read_json_file
9 from files import read_json_file
10 # Create your models here.
10 # Create your models here. validators=[MinValueValidator(62.5e6), MaxValueValidator(450e6)]
11
11
12 class CGSConfiguration(Configuration):
12 class CGSConfiguration(Configuration):
13
13
14 freq0 = models.FloatField(verbose_name='Frequency 0',validators=[MinValueValidator(62.5e6), MaxValueValidator(450e6)], blank=True, null=True)
14 freq0 = models.IntegerField(verbose_name='Frequency 0',validators=[MinValueValidator(0), MaxValueValidator(450e6)], blank=True, null=True)
15 freq1 = models.FloatField(verbose_name='Frequency 1',validators=[MinValueValidator(62.5e6), MaxValueValidator(450e6)], blank=True, null=True)
15 freq1 = models.IntegerField(verbose_name='Frequency 1',validators=[MinValueValidator(0), MaxValueValidator(450e6)], blank=True, null=True)
16 freq2 = models.FloatField(verbose_name='Frequency 2',validators=[MinValueValidator(62.5e6), MaxValueValidator(450e6)], blank=True, null=True)
16 freq2 = models.IntegerField(verbose_name='Frequency 2',validators=[MinValueValidator(0), MaxValueValidator(450e6)], blank=True, null=True)
17 freq3 = models.FloatField(verbose_name='Frequency 3',validators=[MinValueValidator(62.5e6), MaxValueValidator(450e6)], blank=True, null=True)
17 freq3 = models.IntegerField(verbose_name='Frequency 3',validators=[MinValueValidator(0), MaxValueValidator(450e6)], blank=True, null=True)
18 #jfreqs = JSONField(default={"frequencies":[{"f0":freq0,"f1":freq1,"f2":freq2,"f3":freq3}]}, blank=True)
18 #jfreqs = JSONField(default={"frequencies":[{"f0":freq0,"f1":freq1,"f2":freq2,"f3":freq3}]}, blank=True)
19
19
20
20
21 def verify_frequencies(self):
21 def verify_frequencies(self):
22
22
23 return True
23 return True
24
24
25
25
26 def update_from_file(self, fp):
26 def update_from_file(self, fp):
27
27
28 kwargs = read_json_file(fp)
28 kwargs = read_json_file(fp)
29
29
30 if not kwargs:
30 if not kwargs:
31 return False
31 return False
32
32
33 self.freq0 = kwargs['freq0']
33 self.freq0 = kwargs['freq0']
34 self.freq1 = kwargs['freq1']
34 self.freq1 = kwargs['freq1']
35 self.freq2 = kwargs['freq2']
35 self.freq2 = kwargs['freq2']
36 self.freq3 = kwargs['freq3']
36 self.freq3 = kwargs['freq3']
37
37
38 return True
38 return True
39
39
40
40
41 class Meta:
41 class Meta:
42 db_table = 'cgs_configurations'
42 db_table = 'cgs_configurations'
@@ -1,310 +1,322
1 from django.shortcuts import redirect, render, get_object_or_404
1 from django.shortcuts import redirect, render, get_object_or_404
2 from django.contrib import messages
2 from django.contrib import messages
3 from django.http import HttpResponse
3
4
4 from apps.main.models import Experiment, Configuration
5 from apps.main.models import Experiment, Configuration
5 from .models import CGSConfiguration
6 from .models import CGSConfiguration
6
7
7 from .forms import CGSConfigurationForm, UploadFileForm
8 from .forms import CGSConfigurationForm, UploadFileForm
8 from apps.main.views import sidebar
9 from apps.main.views import sidebar
9
10
10 import requests
11 import requests
11 import json
12 import json
12 #from __builtin__ import None
13 #from __builtin__ import None
13 # Create your views here.
14 # Create your views here.
14
15
15 def cgs_conf(request, id_conf):
16 def cgs_conf(request, id_conf):
16
17
17 conf = get_object_or_404(CGSConfiguration, pk=id_conf)
18 conf = get_object_or_404(CGSConfiguration, pk=id_conf)
18
19
19 ip=conf.device.ip_address
20 ip=conf.device.ip_address
20 port=conf.device.port_address
21 port=conf.device.port_address
21
22
22 kwargs = {}
23 kwargs = {}
23
24
24 if request.method=='GET':
25 if request.method=='GET':
25 #r: response = icon, status
26 #r: response = icon, status
26 try:
27 try:
27 route = "http://" + str(ip) + ":" + str(port) + "/status/ad9548"
28 route = "http://" + str(ip) + ":" + str(port) + "/status/ad9548"
28 r = requests.get(route)
29 r = requests.get(route)
29 response = str(r.text)
30 response = str(r.text)
30 response = response.split(";")
31 response = response.split(";")
31 icon = response[0]
32 icon = response[0]
32 status = response[-1]
33 status = response[-1]
33 #print r.text
34 #print r.text
34 #"icon" could be: "alert" or "okay"
35 #"icon" could be: "alert" or "okay"
35 # Si hay alerta pero esta conectado
36 # Si hay alerta pero esta conectado
36 if "alert" in icon:
37 if "alert" in icon:
37 if "Starting Up" in status: #No Esta conectado
38 if "Starting Up" in status: #No Esta conectado
38 kwargs['connected'] = False
39 kwargs['connected'] = False
39 else:
40 else:
40 kwargs['connected'] = True
41 kwargs['connected'] = True
41 elif "okay" in icon:
42 elif "okay" in icon:
42 kwargs['connected'] = True
43 kwargs['connected'] = True
43 else:
44 else:
44 kwargs['connected'] = False
45 kwargs['connected'] = False
45
46
46 except:
47 except:
47 kwargs['connected'] = False
48 kwargs['connected'] = False
48 status = "The Device is not connected."
49 status = "The Device is not connected."
49
50
50 if not kwargs['connected']:
51 if not kwargs['connected']:
51 messages.error(request, message=status)
52 messages.error(request, message=status)
52
53
53 kwargs['dev_conf'] = conf
54 kwargs['dev_conf'] = conf
54 kwargs['dev_conf_keys'] = ['experiment', 'device',
55 kwargs['dev_conf_keys'] = ['experiment', 'device',
55 'freq0', 'freq1',
56 'freq0', 'freq1',
56 'freq2', 'freq3']
57 'freq2', 'freq3']
57
58
58 kwargs['title'] = 'CGS Configuration'
59 kwargs['title'] = 'CGS Configuration'
59 kwargs['suptitle'] = 'Details'
60 kwargs['suptitle'] = 'Details'
60
61
61 kwargs['button'] = 'Edit Configuration'
62 kwargs['button'] = 'Edit Configuration'
62
63
63 ###### SIDEBAR ######
64 ###### SIDEBAR ######
64 kwargs.update(sidebar(conf))
65 kwargs.update(sidebar(conf))
65
66
66 return render(request, 'cgs_conf.html', kwargs)
67 return render(request, 'cgs_conf.html', kwargs)
67
68
68 def cgs_conf_edit(request, id_conf):
69 def cgs_conf_edit(request, id_conf):
69
70
70 conf = get_object_or_404(CGSConfiguration, pk=id_conf)
71 conf = get_object_or_404(CGSConfiguration, pk=id_conf)
71
72
72 if request.method=='GET':
73 if request.method=='GET':
73 form = CGSConfigurationForm(instance=conf)
74 form = CGSConfigurationForm(instance=conf)
74
75
75 if request.method=='POST':
76 if request.method=='POST':
76 form = CGSConfigurationForm(request.POST, instance=conf)
77 form = CGSConfigurationForm(request.POST, instance=conf)
77
78
78 if form.is_valid():
79 if form.is_valid():
80 if conf.freq0 == None: conf.freq0 = 0
81 if conf.freq1 == None: conf.freq1 = 0
82 if conf.freq2 == None: conf.freq2 = 0
83 if conf.freq3 == None: conf.freq3 = 0
84
79 conf = form.save(commit=False)
85 conf = form.save(commit=False)
80
86
81 if conf.verify_frequencies():
87 if conf.verify_frequencies():
82
83 if conf.freq0 == None: conf.freq0 = 0
84 if conf.freq1 == None: conf.freq0 = 0
85 if conf.freq2 == None: conf.freq0 = 0
86 if conf.freq3 == None: conf.freq0 = 0
87
88
89 data = {'f0': str(conf.freq0), 'f1': str(conf.freq1),
90 'f2': str(conf.freq2), 'f3': str(conf.freq3)}
91 json_data = json.dumps(data)
92 conf.parameters = json_data
93
94 conf.save()
88 conf.save()
95 return redirect('url_cgs_conf', id_conf=conf.id)
89 return redirect('url_cgs_conf', id_conf=conf.id)
96
90
97 ##ERRORS
91 ##ERRORS
98
92
99 kwargs = {}
93 kwargs = {}
100 kwargs['id_dev'] = conf.id
94 kwargs['id_dev'] = conf.id
101 kwargs['form'] = form
95 kwargs['form'] = form
102 kwargs['title'] = 'Device Configuration'
96 kwargs['title'] = 'Device Configuration'
103 kwargs['suptitle'] = 'Edit'
97 kwargs['suptitle'] = 'Edit'
104 kwargs['button'] = 'Save'
98 kwargs['button'] = 'Save'
105
99
106
100
107 ###### SIDEBAR ######
101 ###### SIDEBAR ######
108 kwargs.update(sidebar(conf))
102 kwargs.update(sidebar(conf))
109
103
110 return render(request, 'cgs_conf_edit.html', kwargs)
104 return render(request, 'cgs_conf_edit.html', kwargs)
111
105
112 def cgs_conf_write(request, id_conf):
106 def cgs_conf_write(request, id_conf):
113
107
114 conf = get_object_or_404(CGSConfiguration, pk=id_conf)
108 conf = get_object_or_404(CGSConfiguration, pk=id_conf)
115 ip=conf.device.ip_address
109 ip=conf.device.ip_address
116 port=conf.device.port_address
110 port=conf.device.port_address
117
111
118 #Frequencies from form
112 #Frequencies from form
119 if conf.freq0 == None: conf.freq0 = 0
113 f0 = conf.freq0
120 if conf.freq1 == None: conf.freq0 = 0
114 f1 = conf.freq1
121 if conf.freq2 == None: conf.freq0 = 0
115 f2 = conf.freq2
122 if conf.freq3 == None: conf.freq0 = 0
116 f3 = conf.freq3
123 f0 = int(conf.freq0)
124 f1 = int(conf.freq1)
125 f2 = int(conf.freq2)
126 f3 = int(conf.freq3)
127
117
128 try:
118 try:
129 post_data = {"f0":f0, "f1":f1, "f2":f2, "f3":f3}
119 post_data = {"f0":f0, "f1":f1, "f2":f2, "f3":f3}
130 route = "http://" + str(ip) + ":" + str(port) + "/frequencies/"
120 route = "http://" + str(ip) + ":" + str(port) + "/frequencies/"
131 r = requests.post(route, post_data)
121 r = requests.post(route, post_data)
132 text = r.text
122 text = r.text
133 text = text.split(',')
123 text = text.split(',')
134
124
135 try:
125 try:
136 if len(text)>1:
126 if len(text)>1:
137 title = text[0]
127 title = text[0]
138 status = text[1]
128 status = text[1]
139 status_ok = r.status_code
129 status_ok = r.status_code
140 if title == "okay":
130 if title == "okay":
141 messages.success(request, status)
131 messages.success(request, status)
142 else:
132 else:
143 messages.error(request, status)
133 messages.error(request, status)
144
134
145 else:
135 else:
146 title = text[0]
136 title = text[0]
147 messages.error(request, title)
137 messages.error(request, title)
148
138
149 except:
139 except:
150 messages.error(request, "An hardware error was found.")
140 messages.error(request, "An hardware error was found.")
151
141
152 except:
142 except:
153 messages.error(request, "Could not write parameters.")
143 messages.error(request, "Could not write parameters.")
154
144
155
145
156
146
157
147
158 return redirect('url_cgs_conf', id_conf=conf.id)
148 return redirect('url_cgs_conf', id_conf=conf.id)
159
149
160 def cgs_conf_read(request, id_conf):
150 def cgs_conf_read(request, id_conf):
161
151
162 conf = get_object_or_404(CGSConfiguration, pk=id_conf)
152 conf = get_object_or_404(CGSConfiguration, pk=id_conf)
163
153
164 ip=conf.device.ip_address
154 ip=conf.device.ip_address
165 port=conf.device.port_address
155 port=conf.device.port_address
166
156
167 if request.method=='POST':
157 if request.method=='POST':
168 form = CGSConfigurationForm(request.POST, instance=conf)
158 form = CGSConfigurationForm(request.POST, instance=conf)
169
159
170 if form.is_valid():
160 if form.is_valid():
171 cgs_model = form.save(commit=False)
161 cgs_model = form.save(commit=False)
172
162
173 if cgs_model.verify_frequencies():
163 if cgs_model.verify_frequencies():
174
164
175 cgs_model.save()
165 cgs_model.save()
176 return redirect('url_cgs_conf', id_conf=conf.id)
166 return redirect('url_cgs_conf', id_conf=conf.id)
177
167
178 messages.error(request, "Parameters could not be saved. Invalid parameters")
168 messages.error(request, "Parameters could not be saved. Invalid parameters")
179
169
180 data = {}
170 data = {}
181
171
182
172
183 if request.method=='GET':
173 if request.method=='GET':
184 #r: response = icon, status
174 #r: response = icon, status
185 route = "http://" + str(ip) + ":" + str(port) + "/status/ad9548"
175 route = "http://" + str(ip) + ":" + str(port) + "/status/ad9548"
186 try:
176 try:
187 r = requests.get(route)
177 r = requests.get(route)
188 response = str(r.text)
178 response = str(r.text)
189 response = response.split(";")
179 response = response.split(";")
190 icon = response[0]
180 icon = response[0]
191 status = response[-1]
181 status = response[-1]
192 print r.text
182 print r.text
193 #"icon" could be: "alert" or "okay"
183 #"icon" could be: "alert" or "okay"
194 if "okay" in icon:
184 if "okay" in icon:
195 messages.success(request, status)
185 messages.success(request, status)
196 else:
186 else:
197 messages.error(request, status)
187 messages.error(request, status)
198 #Get Frequencies
188 #Get Frequencies
199 route = "http://" + str(ip) + ":" + str(port) + "/frequencies/"
189 route = "http://" + str(ip) + ":" + str(port) + "/frequencies/"
200 #frequencies = requests.get('http://10.10.10.175:8080/frequencies/')
190 #frequencies = requests.get('http://10.10.10.175:8080/frequencies/')
201 frequencies = requests.get(route)
191 frequencies = requests.get(route)
202 frequencies = frequencies.json()
192 frequencies = frequencies.json()
203 frequencies = frequencies.get("Frecuencias")
193 frequencies = frequencies.get("Frecuencias")
204 f0 = frequencies.get("f0")
194 f0 = frequencies.get("f0")
205 f1 = frequencies.get("f1")
195 f1 = frequencies.get("f1")
206 f2 = frequencies.get("f2")
196 f2 = frequencies.get("f2")
207 f3 = frequencies.get("f3")
197 f3 = frequencies.get("f3")
208 print f0,f1,f2,f3
198 print f0,f1,f2,f3
209
199
210
200
211 if not response:
201 if not response:
212 messages.error(request, "Could not read parameters from Device")
202 messages.error(request, "Could not read parameters from Device")
213 return redirect('url_cgs_conf', id_conf=conf.id)
203 return redirect('url_cgs_conf', id_conf=conf.id)
214
204
215 data = {'experiment' : conf.experiment.id,
205 data = {'experiment' : conf.experiment.id,
216 'device' : conf.device.id,
206 'device' : conf.device.id,
217 'freq0' : f0,
207 'freq0' : f0,
218 'freq1' : f1,
208 'freq1' : f1,
219 'freq2' : f2,
209 'freq2' : f2,
220 'freq3' : f3,
210 'freq3' : f3,
221 }
211 }
222 except:
212 except:
223 messages.error(request, "Could not read parameters from Device")
213 messages.error(request, "Could not read parameters from Device")
224 data = {'experiment' : conf.experiment.id,
214 data = {'experiment' : conf.experiment.id,
225 'device' : conf.device.id,
215 'device' : conf.device.id,
226 'freq0' : None,
216 'freq0' : None,
227 'freq1' : None,
217 'freq1' : None,
228 'freq2' : None,
218 'freq2' : None,
229 'freq3' : None,
219 'freq3' : None,
230 }
220 }
231 return redirect('url_cgs_conf', id_conf=conf.id)
221 return redirect('url_cgs_conf', id_conf=conf.id)
232
222
233 form = CGSConfigurationForm(initial = data)
223 form = CGSConfigurationForm(initial = data)
234
224
235 kwargs = {}
225 kwargs = {}
236 kwargs['id_dev'] = conf.id
226 kwargs['id_dev'] = conf.id
237 kwargs['form'] = form
227 kwargs['form'] = form
238 kwargs['title'] = 'Device Configuration'
228 kwargs['title'] = 'Device Configuration'
239 kwargs['suptitle'] = 'Parameters read from device'
229 kwargs['suptitle'] = 'Parameters read from device'
240 kwargs['button'] = 'Save'
230 kwargs['button'] = 'Save'
241
231
242 ###### SIDEBAR ######
232 ###### SIDEBAR ######
243 kwargs.update(sidebar(conf))
233 kwargs.update(sidebar(conf))
244
234
245 return render(request, 'cgs_conf_edit.html', kwargs)
235 return render(request, 'cgs_conf_edit.html', kwargs)
246
236
247 def cgs_conf_import(request, id_conf):
237 def cgs_conf_import(request, id_conf):
248
238
249 conf = get_object_or_404(CGSConfiguration, pk=id_conf)
239 conf = get_object_or_404(CGSConfiguration, pk=id_conf)
250
240
251 if request.method == 'POST':
241 if request.method == 'POST':
252 file_form = UploadFileForm(request.POST, request.FILES)
242 file_form = UploadFileForm(request.POST, request.FILES)
253
243
254 if file_form.is_valid():
244 if file_form.is_valid():
255
245
256 try:
246 try:
257 if conf.update_from_file(request.FILES['file']):
247 if conf.update_from_file(request.FILES['file']):
258
248
259 try:
249 try:
260 conf.full_clean()
250 conf.full_clean()
261 except ValidationError as e:
251 except ValidationError as e:
262 messages.error(request, e)
252 messages.error(request, e)
263 else:
253 else:
264 conf.save()
254 conf.save()
265
255
266 messages.success(request, "Parameters imported from file: '%s'." %request.FILES['file'].name)
256 messages.success(request, "Parameters imported from file: '%s'." %request.FILES['file'].name)
267 #messages.warning(request,"")
257 #messages.warning(request,"")
268 return redirect('url_cgs_conf', id_conf=conf.id)
258 return redirect('url_cgs_conf', id_conf=conf.id)
269 except:
259 except:
270 messages.error(request, "No JSON object could be decoded.")
260 messages.error(request, "No JSON object could be decoded.")
271
261
272 messages.error(request, "Could not import parameters from file")
262 messages.error(request, "Could not import parameters from file")
273
263
274 else:
264 else:
275 file_form = UploadFileForm(initial={'title': '.json'})
265 file_form = UploadFileForm(initial={'title': '.json'})
276
266
277
267
278 kwargs = {}
268 kwargs = {}
279 kwargs['id_dev'] = conf.id
269 kwargs['id_dev'] = conf.id
280 kwargs['title'] = 'Device Configuration'
270 kwargs['title'] = 'Device Configuration'
281 kwargs['form'] = file_form
271 kwargs['form'] = file_form
282 kwargs['suptitle'] = 'Importing file'
272 kwargs['suptitle'] = 'Importing file'
283 kwargs['button'] = 'Import'
273 kwargs['button'] = 'Import'
284
274
285 kwargs.update(sidebar(conf))
275 kwargs.update(sidebar(conf))
286
276
287 return render(request, 'cgs_conf_import.html', kwargs)
277 return render(request, 'cgs_conf_import.html', kwargs)
288
278
289 def handle_uploaded_file(f):
279 def handle_uploaded_file(f):
290
280
291 data = {'freq0' : 62500000,
281 data = {'freq0' : 62500000,
292 'freq1' : 62500000,
282 'freq1' : 62500000,
293 'freq2' : 62500000,
283 'freq2' : 62500000,
294 'freq3' : 62500000,
284 'freq3' : 62500000,
295 }
285 }
296
286
297 return data
287 return data
298
288
299 def cgs_conf_export(request, id_conf):
289 def cgs_conf_export(request, id_conf):
300
290
301 conf = get_object_or_404(CGSConfiguration, pk=id_conf)
291 conf = get_object_or_404(CGSConfiguration, pk=id_conf)
302 ip=conf.device.ip_address
292 ip=conf.device.ip_address
303 port=conf.device.port_address
293 port=conf.device.port_address
304
294
305 if request.method=='POST':
295 if request.method=='GET':
306 return HttpResponse(conf.parameters, content_type="application/json")
296 data = {"Frequencies": [
297 ["freq0", conf.freq0],
298 ["freq1", conf.freq1],
299 ["freq2", conf.freq2],
300 ["freq3", conf.freq3]
301 ]}
302 json_data = json.dumps(data)
303 conf.parameters = json_data
304 response = HttpResponse(conf.parameters, content_type="application/json")
305 response['Content-Disposition'] = 'attachment; filename="data.json"'
306
307 return response
307
308
308 return render(request, 'cgs_conf.html')
309 kwargs = {}
309 #return redirect(conf.get_absolute_url())
310 kwargs['dev_conf'] = conf
310
311 kwargs['dev_conf_keys'] = ['experiment', 'device',
312 'freq0', 'freq1',
313 'freq2', 'freq3']
314
315 kwargs['title'] = 'CGS Configuration'
316 kwargs['suptitle'] = 'Details'
317
318 kwargs['button'] = 'Edit Configuration'
319
320 ###### SIDEBAR ######
321 kwargs.update(sidebar(conf))
322 return render(request, 'cgs_conf.html', kwargs) No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now