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