##// END OF EJS Templates
models are passed as instances to templates (dictionaries are not used anymore)...
Miguel Urco -
r22:08de53529b15
parent child
Show More
@@ -1,106 +1,109
1 1 from itertools import chain
2 2 from django.db import models
3 3 from polymorphic import PolymorphicModel
4 4
5 5 CONF_TYPES = (
6 6 (0, 'Active'),
7 7 (1, 'Historical'),
8 8 )
9 9
10 10 DEV_STATES = (
11 11 (0, 'No connected'),
12 12 (1, 'Connected'),
13 13 (2, 'Configured'),
14 14 (3, 'Running'),
15 15 )
16 16
17 17 DEV_TYPES = (
18 18 ('', 'Select a device type'),
19 19 ('rc', 'Radar Controller'),
20 20 ('dds', 'Direct Digital Synthesizer'),
21 ('jars', 'Jicamarca Radar System'),
21 ('jars', 'Jicamarca Radar Acquisition System'),
22 22 ('usrp', 'Universal Software Radio Peripheral'),
23 23 ('cgs', 'Clock Generator System'),
24 24 ('abs', 'Automatic Beam Switching'),
25 25 )
26 26
27 27 # Create your models here.
28 28
29 29 class DeviceType(models.Model):
30 30
31 31 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
32 32
33 33 description = models.TextField(blank=True, null=True)
34 34
35 35 # info = models.TextField(blank=True, null=True)
36 36 # status = models.PositiveSmallIntegerField(default=1, choices=STATES)
37 37
38 38 class Meta:
39 39 db_table = 'db_device_types'
40 40
41 41 def __unicode__(self):
42 return u'%s' % self.name
42 return u'%s' % self.get_name_display()
43 43
44 44 class Device(models.Model):
45 45
46 46 device_type = models.ForeignKey(DeviceType)
47 47 name = models.CharField(max_length=40, default='')
48 48 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
49 49 port_address = models.PositiveSmallIntegerField(default=2000)
50 50 description = models.TextField(blank=True, null=True)
51 51 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
52 52
53 53 # serial_number = models.CharField(max_length=40, default='')
54 54 # mac_address = models.CharField(max_length = 20, null=True, blank=True)
55 55
56 56
57 57 class Meta:
58 58 db_table = 'db_devices'
59 59
60 60 def __unicode__(self):
61 return u'[%s]: %s | %s' % (self.device_type.name, self.name, self.ip_address)
61 return u'%s | %s' % (self.name, self.ip_address)
62 62
63 63 class Campaign(models.Model):
64 64
65 65 name = models.CharField(max_length=40, unique=True)
66 66 start_date = models.DateTimeField(blank=True, null=True)
67 67 end_date = models.DateTimeField(blank=True, null=True)
68 68 tags = models.CharField(max_length=40)
69 69 description = models.TextField(blank=True, null=True)
70 70 template = models.BooleanField(default=False)
71 71
72 72 class Meta:
73 73 db_table = 'db_campaigns'
74 74
75 75 def __unicode__(self):
76 return u'%s: %s - %s' % (self.name, self.start_date.date(), self.end_date.date())
76 return u'%s' % (self.name)
77 77
78 78 class Experiment(models.Model):
79 79
80 80 campaign = models.ForeignKey(Campaign)
81 81 name = models.CharField(max_length=40, default='')
82 82 start_time = models.TimeField(default='00:00:00')
83 83 end_time = models.TimeField(default='23:59:59')
84 84
85 85 class Meta:
86 86 db_table = 'db_experiments'
87 87
88 88 def __unicode__(self):
89 return u'[%s]: %s: %s - %s' % (self.campaign.name, self.name, self.start_time, self.end_time)
89 return u'[%s]: %s' % (self.campaign.name, self.name)
90 90
91 91 class Configuration(PolymorphicModel):
92 92
93 93 experiment = models.ForeignKey(Experiment)
94 94 device = models.ForeignKey(Device)
95 95 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
96 created = models.DateTimeField(auto_now_add=True, blank=True)
97 96
98 # parameters = models.TextField(default='{}')
97 created_date = models.DateTimeField(auto_now_add=True)
98 programmed_date = models.DateTimeField(auto_now=True)
99
100 parameters = models.TextField(default='{}')
101
99 102 class Meta:
100 103 db_table = 'db_configurations'
101 104
102 105 def __unicode__(self):
103 106 return u'[%s - %s]: %s' % (self.experiment.campaign.name,
104 107 self.experiment.name,
105 108 self.device.name)
106 109 No newline at end of file
@@ -1,84 +1,83
1 1 {% extends "base.html" %}
2 2 {% load bootstrap3 %}
3 3 {% load static %}
4 4 {% load main_tags %}
5 5 {% block extra-head %}
6 6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 7 {% endblock %}
8 8
9 9 {% block camp-active %}active{% endblock %}
10 10
11 11 {% block content-title %}{{title}}{% endblock %}
12 12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13 13
14 14 {% block content %}
15 15 <table class="table table-bordered">
16 16 {% for key in campaign_keys %}
17 17 <tr><th>{{key|title}}</th><td>{{campaign|attr:key}}</td></tr>
18 18 {% endfor %}
19 19 </table>
20 20
21 21 <button class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_export">Export</button>
22 22 <button class="btn btn-primary pull-right" style="margin-left: 10px" id="bt_edit">Edit</button>
23 23
24 24 <br></br>
25 25 <br></br>
26 26
27 27 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
28 28
29 29 <div class="panel panel-default">
30 30 <div class="panel-heading" role="tab" id="headingTwo">
31 31 <h4 class="panel-title">
32 32 <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
33 33 Experiment List
34 34 </a>
35 35 </h4>
36 36 </div>
37 37
38 38 <div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingTwo">
39 39 <div class="panel-body">
40 40 <table class="table table-hover">
41 41 <tr>
42 42 <th>#</th>
43 43 {% for header in experiment_keys %}
44 44 <th>{{ header|title }}</th>
45 45 {% endfor%}
46 46 </tr>
47 47 {% for item in experiments %}
48 48 <tr class="clickable-row" data-href="{% url 'url_experiment' item.id %}">
49 49 <td>{{ forloop.counter }}</td>
50 50 {% for key in experiment_keys %}
51 51 <td>{{ item|attr:key }}</td>
52 52 {% endfor %}
53 53 </tr>
54 54 {% endfor %}
55 55 </table>
56 56 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
57 57 </div>
58 58 </div>
59 59 </div>
60 60 </div>
61 61 {% endblock %}
62 62
63 63 {% block sidebar%}
64 64 {% include "sidebar_devices.html" %}
65 65 {% endblock %}
66 66
67 67 {% block extra-js%}
68 68 <script type="text/javascript">
69 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD HH:mm"});
70
69
71 70 $(".clickable-row").click(function() {
72 71 document.location = $(this).data("href");
73 72 });
74 73
75 74 $("#bt_edit").click(function() {
76 75 document.location = "{% url 'url_edit_campaign' campaign.id%}";
77 76 });
78 77
79 78 $("#bt_add").click(function() {
80 79 document.location = "{% url 'url_add_experiment' campaign.id%}";
81 80 });
82 81
83 82 </script>
84 83 {% endblock %} No newline at end of file
@@ -1,50 +1,50
1 1 {% extends "base.html" %}
2 2 {% load bootstrap3 %}
3 3 {% load static %}
4 4 {% load main_tags %}
5 5 {% block extra-head %}
6 6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 7 {% endblock %}
8 8
9 9 {% block conf-active %}active{% endblock %}
10 10
11 11 {% block content-title %}{{title}}{% endblock %}
12 12 {% block content-suptitle %}{{suptitle}}{% endblock %}
13 13
14 14 {% block content %}
15 15 <table class="table table-hover">
16 16 <tr>
17 17 <th>#</th>
18 18 {% for key in configuration_keys %}
19 19 <th>{{ key|title }}</th>
20 20 {% endfor%}
21 21 </tr>
22 22 {% for item in configurations %}
23 <tr class="clickable-row" data-href="/{{item.device__device_type__name}}/{{item.id}}/">
23 <tr class="clickable-row" data-href="/{{item.device.device_type.name}}/{{item.id}}/">
24 24 <td>{{ forloop.counter }}</td>
25 25 {% for key in configuration_keys %}
26 26 <td>{{ item|attr:key }}</td>
27 27 {% endfor %}
28 28 </tr>
29 29 {% endfor %}
30 30 </table>
31 31 <button class="btn btn-primary pull-right" id="bt_add">{{button}}</button>
32 32 {% endblock %}
33 33
34 34 {% block sidebar%}
35 35 {% include "sidebar_devices.html" %}
36 36 {% endblock %}
37 37
38 38 {% block extra-js%}
39 39 <script type="text/javascript">
40 40
41 41 $("#bt_add").click(function() {
42 42 document.location = "{% url 'url_add_dev_conf' 0%}";
43 43 });
44 44
45 45 $(".clickable-row").click(function() {
46 46 document.location = $(this).data("href");
47 47 });
48 48
49 49 </script>
50 50 {% endblock %} No newline at end of file
@@ -1,454 +1,457
1 1 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
2 2
3 3 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm
4 4 from apps.cgs.forms import CGSConfigurationForm
5 5 from apps.jars.forms import JARSConfigurationForm
6 6 from apps.usrp.forms import USRPConfigurationForm
7 7 from apps.abs.forms import ABSConfigurationForm
8 8 from apps.rc.forms import RCConfigurationForm
9 9 from apps.dds.forms import DDSConfigurationForm
10 10
11 11 from .models import Campaign, Experiment, Device, Configuration
12 12 from apps.cgs.models import CGSConfiguration
13 13 from apps.jars.models import JARSConfiguration
14 14 from apps.usrp.models import USRPConfiguration
15 15 from apps.abs.models import ABSConfiguration
16 16 from apps.rc.models import RCConfiguration
17 17 from apps.dds.models import DDSConfiguration
18 18
19 19 # Create your views here.
20 20
21 21 CONF_FORMS = {
22 22 'rc': RCConfigurationForm,
23 23 'dds': DDSConfigurationForm,
24 24 'jars': JARSConfigurationForm,
25 25 'cgs': CGSConfigurationForm,
26 26 'abs': ABSConfigurationForm,
27 27 'usrp': USRPConfigurationForm,
28 28 }
29 29
30 30 CONF_MODELS = {
31 31 'rc': RCConfiguration,
32 32 'dds': DDSConfiguration,
33 33 'jars': JARSConfiguration,
34 34 'cgs': CGSConfiguration,
35 35 'abs': ABSConfiguration,
36 36 'usrp': USRPConfiguration,
37 37 }
38 38
39 39 def index(request):
40 40 kwargs = {}
41 41
42 42 return render(request, 'index.html', kwargs)
43 43
44 44 def devices(request):
45 45
46 46 devices = Device.objects.all().order_by('device_type__name')
47 47
48 keys = ['id', 'device_type__name', 'name', 'ip_address']
48 # keys = ['id', 'device_type__name', 'name', 'ip_address']
49 keys = ['id', 'name', 'ip_address', 'device_type']
49 50
50 51 kwargs = {}
51 52 kwargs['device_keys'] = keys[1:]
52 kwargs['devices'] = devices.values(*keys)
53 kwargs['devices'] = devices#.values(*keys)
53 54 kwargs['title'] = 'Device'
54 55 kwargs['suptitle'] = 'List'
55 56 kwargs['button'] = 'New Device'
56 57
57 58 return render(request, 'devices.html', kwargs)
58 59
59 60 def device(request, id_dev):
60 61
61 62 device = get_object_or_404(Device, pk=id_dev)
62 63
63 64 kwargs = {}
64 65 kwargs['device'] = device
65 66 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
66 67
67 68 kwargs['title'] = 'Device'
68 69 kwargs['suptitle'] = 'Details'
69 70
70 71 kwargs['button'] = 'Add Device'
71 72
72 73 return render(request, 'device.html', kwargs)
73 74
74 75 def device_new(request):
75 76
76 77 if request.method == 'GET':
77 78 form = DeviceForm()
78 79
79 80 if request.method == 'POST':
80 81 form = DeviceForm(request.POST)
81 82
82 83 if form.is_valid():
83 84 form.save()
84 85 return redirect('url_devices')
85 86
86 87 kwargs = {}
87 88 kwargs['form'] = form
88 89 kwargs['title'] = 'Device'
89 90 kwargs['suptitle'] = 'New'
90 91 kwargs['button'] = 'Create'
91 92
92 93 return render(request, 'device_edit.html', kwargs)
93 94
94 95 def device_edit(request, id_dev):
95 96
96 97 device = get_object_or_404(Device, pk=id_dev)
97 98
98 99 if request.method=='GET':
99 100 form = DeviceForm(instance=device)
100 101
101 102 if request.method=='POST':
102 103 form = DeviceForm(request.POST, instance=device)
103 104
104 105 if form.is_valid():
105 106 form.save()
106 107 return redirect('url_devices')
107 108
108 109 kwargs = {}
109 110 kwargs['form'] = form
110 111 kwargs['title'] = 'Device'
111 112 kwargs['suptitle'] = 'Edit'
112 113 kwargs['button'] = 'Update'
113 114
114 115 return render(request, 'device_edit.html', kwargs)
115 116
116 117 def device_delete(request, id_dev):
117 118
118 119 device = get_object_or_404(Device, pk=id_dev)
119 120
120 121 if request.method=='POST':
121 122
122 123 if request.user.is_staff:
123 124 device.delete()
124 125 return redirect('url_devices')
125 126
126 127 return HttpResponse("Not enough permission to delete this object")
127 128
128 129 kwargs = {'object':device, 'dev_active':'active',
129 130 'url_cancel':'url_device', 'id_item':id_dev}
130 131
131 132 return render(request, 'item_delete.html', kwargs)
132 133
133 134 def campaigns(request):
134 135
135 136 campaigns = Campaign.objects.all().order_by('start_date')
136 137
137 138 keys = ['id', 'name', 'start_date', 'end_date']
138 139
139 140 kwargs = {}
140 141 kwargs['campaign_keys'] = keys[1:]
141 kwargs['campaigns'] = campaigns.values(*keys)
142 kwargs['campaigns'] = campaigns#.values(*keys)
142 143 kwargs['title'] = 'Campaign'
143 144 kwargs['suptitle'] = 'List'
144 145 kwargs['button'] = 'New Campaign'
145 146
146 147 return render(request, 'campaigns.html', kwargs)
147 148
148 149 def campaign(request, id_camp):
149 150
150 151 campaign = get_object_or_404(Campaign, pk=id_camp)
151 152 experiments = Experiment.objects.filter(campaign=campaign)
152 153
153 154 form = CampaignForm(instance=campaign)
154 155
155 156 kwargs = {}
156 157 kwargs['campaign'] = campaign
157 158 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
158 159
159 160 keys = ['id', 'name', 'start_time', 'end_time']
160 161
161 162 kwargs['experiment_keys'] = keys[1:]
162 163 kwargs['experiments'] = experiments.values(*keys)
163 164
164 165 kwargs['title'] = 'Campaign'
165 166 kwargs['suptitle'] = 'Details'
166 167
167 168 kwargs['form'] = form
168 169 kwargs['button'] = 'Add Experiment'
169 170
170 171 return render(request, 'campaign.html', kwargs)
171 172
172 173 def campaign_new(request):
173 174
174 175 if request.method == 'GET':
175 176 form = CampaignForm()
176 177
177 178 if request.method == 'POST':
178 179 form = CampaignForm(request.POST)
179 180
180 181 if form.is_valid():
181 182 campaign = form.save()
182 183 return redirect('url_campaign', id_camp=campaign.id)
183 184
184 185 kwargs = {}
185 186 kwargs['form'] = form
186 187 kwargs['title'] = 'Campaign'
187 188 kwargs['suptitle'] = 'New'
188 189 kwargs['button'] = 'Create'
189 190
190 191 return render(request, 'campaign_edit.html', kwargs)
191 192
192 193 def campaign_edit(request, id_camp):
193 194
194 195 campaign = get_object_or_404(Campaign, pk=id_camp)
195 196
196 197 if request.method=='GET':
197 198 form = CampaignForm(instance=campaign)
198 199
199 200 if request.method=='POST':
200 201 form = CampaignForm(request.POST, instance=campaign)
201 202
202 203 if form.is_valid():
203 204 form.save()
204 205 return redirect('url_campaign', id_camp=id_camp)
205 206
206 207 kwargs = {}
207 208 kwargs['form'] = form
208 209 kwargs['title'] = 'Campaign'
209 210 kwargs['suptitle'] = 'Edit'
210 211 kwargs['button'] = 'Update'
211 212
212 213 return render(request, 'campaign_edit.html', kwargs)
213 214
214 215 def campaign_delete(request, id_camp):
215 216
216 217 campaign = get_object_or_404(Campaign, pk=id_camp)
217 218
218 219 if request.method=='POST':
219 220 if request.user.is_staff:
220 221 campaign.delete()
221 222 return redirect('url_campaigns')
222 223
223 224 return HttpResponse("Not enough permission to delete this object")
224 225
225 226 kwargs = {'object':campaign, 'camp_active':'active',
226 227 'url_cancel':'url_campaign', 'id_item':id_camp}
227 228
228 229 return render(request, 'item_delete.html', kwargs)
229 230
230 231 def experiments(request):
231 232
232 campaigns = Experiment.objects.all().order_by('start_time')
233 experiment_list = Experiment.objects.all().order_by('campaign')
233 234
234 keys = ['id', 'campaign__name', 'name', 'start_time', 'end_time']
235 keys = ['id', 'name', 'start_time', 'end_time', 'campaign']
235 236
236 237 kwargs = {}
237 238
238 239 kwargs['experiment_keys'] = keys[1:]
239 kwargs['experiments'] = campaigns.values(*keys)
240 kwargs['experiments'] = experiment_list#.values(*keys)
240 241
241 242 kwargs['title'] = 'Experiment'
242 243 kwargs['suptitle'] = 'List'
243 244 kwargs['button'] = 'New Experiment'
244 245
245 246 return render(request, 'experiments.html', kwargs)
246 247
247 248 def experiment(request, id_exp):
248 249
249 250 experiment = get_object_or_404(Experiment, pk=id_exp)
250 251
251 252 experiments = Experiment.objects.filter(campaign=experiment.campaign)
252 253 configurations = Configuration.objects.filter(experiment=experiment)
253 254
254 255 kwargs = {}
255 256
256 257 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
257 258 conf_keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address']
258 259
259 260
260 261 kwargs['experiment_keys'] = exp_keys[1:]
261 262 kwargs['experiment'] = experiment
262 263
263 264 kwargs['experiments'] = experiments.values(*exp_keys)
264 265
265 266 kwargs['configuration_keys'] = conf_keys[1:]
266 267 kwargs['configurations'] = configurations.values(*conf_keys)
267 268
268 269 kwargs['title'] = 'Experiment'
269 270 kwargs['suptitle'] = 'Details'
270 271
271 272 kwargs['button'] = 'Add Device'
272 273
273 274 return render(request, 'experiment.html', kwargs)
274 275
275 276 def experiment_new(request, id_camp=0):
276 277
277 278 if request.method == 'GET':
278 279 form = ExperimentForm(initial={'campaign':id_camp})
279 280
280 281 if request.method == 'POST':
281 282 form = ExperimentForm(request.POST, initial={'campaign':id_camp})
282 283
283 284 if form.is_valid():
284 285 experiment = form.save()
285 286 return redirect('url_experiment', id_exp=experiment.id)
286 287
287 288 kwargs = {}
288 289 kwargs['form'] = form
289 290 kwargs['title'] = 'Experiment'
290 291 kwargs['suptitle'] = 'New'
291 292 kwargs['button'] = 'Create'
292 293
293 294 return render(request, 'experiment_edit.html', kwargs)
294 295
295 296 def experiment_edit(request, id_exp):
296 297
297 298 experiment = get_object_or_404(Experiment, pk=id_exp)
298 299
299 300 if request.method == 'GET':
300 301 form = ExperimentForm(instance=experiment)
301 302
302 303 if request.method=='POST':
303 304 form = ExperimentForm(request.POST, instance=experiment)
304 305
305 306 if form.is_valid():
306 307 experiment = form.save()
307 308 return redirect('url_experiment', id_exp=experiment.id)
308 309
309 310 kwargs = {}
310 311 kwargs['form'] = form
311 312 kwargs['title'] = 'Experiment'
312 313 kwargs['suptitle'] = 'Edit'
313 314 kwargs['button'] = 'Update'
314 315
315 316 return render(request, 'experiment_edit.html', kwargs)
316 317
317 318 def experiment_delete(request, id_exp):
318 319
319 320 experiment = get_object_or_404(Experiment, pk=id_exp)
320 321
321 322 if request.method=='POST':
322 323 if request.user.is_staff:
323 324 id_camp = experiment.campaign.id
324 325 experiment.delete()
325 326 return redirect('url_campaign', id_camp=id_camp)
326 327
327 328 return HttpResponse("Not enough permission to delete this object")
328 329
329 330 kwargs = {'object':experiment, 'exp_active':'active',
330 331 'url_cancel':'url_experiment', 'id_item':id_exp}
331 332
332 333 return render(request, 'item_delete.html', kwargs)
333 334
334 335 def dev_confs(request):
335 336
336 configurations = Configuration.objects.all().order_by('device__device_type')
337 configurations = Configuration.objects.all().order_by('experiment')
337 338
338 keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name']
339 # keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name']
339 340
341 keys = ['id', 'device', 'experiment']
342
340 343 kwargs = {}
341 344
342 345 kwargs['configuration_keys'] = keys[1:]
343 kwargs['configurations'] = configurations.values(*keys)
346 kwargs['configurations'] = configurations#.values(*keys)
344 347
345 348 kwargs['title'] = 'Configuration'
346 349 kwargs['suptitle'] = 'List'
347 350 kwargs['button'] = 'New Configuration'
348 351
349 352 return render(request, 'dev_confs.html', kwargs)
350 353
351 354 def dev_conf(request, id_conf):
352 355
353 356 conf = get_object_or_404(Configuration, pk=id_conf)
354 357
355 358 DevConfModel = CONF_MODELS[conf.device.device_type.name]
356 359 dev_conf = DevConfModel.objects.get(pk=id_conf)
357 360
358 361 kwargs = {}
359 362 kwargs['dev_conf'] = dev_conf
360 363 kwargs['dev_conf_keys'] = ['experiment', 'device']
361 364
362 365 kwargs['title'] = 'Configuration'
363 366 kwargs['suptitle'] = 'Details'
364 367
365 368 kwargs['button'] = 'Edit Configuration'
366 369
367 370 ###### SIDEBAR ######
368 371 experiments = Experiment.objects.filter(campaign=conf.experiment.campaign)
369 372 configurations = Configuration.objects.filter(experiment=conf.experiment)
370 373
371 374 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
372 375 conf_keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address']
373 376
374 377 kwargs['experiment_keys'] = exp_keys[1:]
375 378 kwargs['experiments'] = experiments.values(*exp_keys)
376 379
377 380 kwargs['configuration_keys'] = conf_keys[1:]
378 381 kwargs['configurations'] = configurations.values(*conf_keys)
379 382
380 383 return render(request, 'dev_conf.html', kwargs)
381 384
382 385 def dev_conf_new(request, id_exp=0):
383 386
384 387 if request.method == 'GET':
385 388 form = ConfigurationForm(initial={'experiment':id_exp})
386 389
387 390 if request.method == 'POST':
388 391 form = ConfigurationForm(request.POST)
389 392
390 393 if form.is_valid():
391 394 experiment = Experiment.objects.get(pk=request.POST['experiment'])
392 395 device = Device.objects.get(pk=request.POST['device'])
393 396
394 397 exp_devices = Device.objects.filter(configuration__experiment=experiment)
395 398
396 399 if device.id not in exp_devices.values('id',):
397 400
398 401 DevConfModel = CONF_MODELS[device.device_type.name]
399 402 conf = DevConfModel(experiment=experiment, device=device)
400 403 conf.save()
401 404
402 405 return redirect('url_experiment', id_exp=experiment.id)
403 406
404 407 kwargs = {}
405 408 kwargs['form'] = form
406 409 kwargs['title'] = 'Configuration'
407 410 kwargs['suptitle'] = 'New'
408 411 kwargs['button'] = 'Create'
409 412
410 413 return render(request, 'dev_conf_edit.html', kwargs)
411 414
412 415 def dev_conf_edit(request, id_conf):
413 416
414 417 conf = get_object_or_404(Configuration, pk=id_conf)
415 418
416 419 DevConfModel = CONF_MODELS[conf.device.device_type.name]
417 420 DevConfForm = CONF_FORMS[conf.device.device_type.name]
418 421
419 422 dev_conf = DevConfModel.objects.get(pk=id_conf)
420 423
421 424 if request.method=='GET':
422 425 form = DevConfForm(instance=dev_conf)
423 426
424 427 if request.method=='POST':
425 428 form = DevConfForm(request.POST, instance=dev_conf)
426 429
427 430 if form.is_valid():
428 431 form.save()
429 432 return redirect('url_dev_conf', id_conf=id_conf)
430 433
431 434 kwargs = {}
432 435 kwargs['form'] = form
433 436 kwargs['title'] = 'Device Configuration'
434 437 kwargs['suptitle'] = 'Edit'
435 438 kwargs['button'] = 'Update'
436 439
437 440 return render(request, 'dev_conf_edit.html', kwargs)
438 441
439 442 def dev_conf_delete(request, id_conf):
440 443
441 444 conf = get_object_or_404(Configuration, pk=id_conf)
442 445
443 446 if request.method=='POST':
444 447 if request.user.is_staff:
445 448 id_exp = conf.experiment.id
446 449 conf.delete()
447 450 return redirect('url_experiment', id_exp=id_exp)
448 451
449 452 return HttpResponse("Not enough permission to delete this object")
450 453
451 454 kwargs = {'object':conf, 'conf_active':'active',
452 455 'url_cancel':'url_dev_conf', 'id_item':id_conf}
453 456
454 457 return render(request, 'item_delete.html', kwargs) No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now