##// END OF EJS Templates
template attribute added to RadarSys Models...
Miguel Urco -
r47:f6d4e6a94b9f
parent child
Show More
@@ -1,64 +1,64
1 1 from django import forms
2 2 from django.utils.safestring import mark_safe
3 3
4 4 from .models import DeviceType, Device, Experiment, Campaign, Configuration, Location
5 5
6 6 def add_empty_choice(choices, pos=0, label='-----'):
7 7 if len(choices)>0:
8 8 choices = list(choices)
9 9 choices.insert(0, (0, label))
10 10 return choices
11 11 else:
12 12 return [(0, label)]
13 13
14 14 class DatepickerWidget(forms.widgets.TextInput):
15 15 def render(self, name, value, attrs=None):
16 16 input_html = super(DatepickerWidget, self).render(name, value, attrs)
17 17 html = '<div class="input-group date">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span></div>'
18 18 return mark_safe(html)
19 19
20 20 class TimepickerWidget(forms.widgets.TextInput):
21 21 def render(self, name, value, attrs=None):
22 22 input_html = super(TimepickerWidget, self).render(name, value, attrs)
23 23 html = '<div class="input-group time">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-time"></i></span></div>'
24 24 return mark_safe(html)
25 25
26 26 class CampaignForm(forms.ModelForm):
27 27 def __init__(self, *args, **kwargs):
28 28 super(CampaignForm, self).__init__(*args, **kwargs)
29 29 self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs)
30 30 self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs)
31 31
32 32 class Meta:
33 33 model = Campaign
34 fields = ['name', 'start_date', 'end_date', 'tags', 'description', 'template']
34 exclude = ['']
35 35
36 36 class ExperimentForm(forms.ModelForm):
37 37 def __init__(self, *args, **kwargs):
38 38 super(ExperimentForm, self).__init__(*args, **kwargs)
39 39 self.fields['start_time'].widget = TimepickerWidget(self.fields['start_time'].widget.attrs)
40 40 self.fields['end_time'].widget = TimepickerWidget(self.fields['end_time'].widget.attrs)
41 41
42 42 self.fields['campaign'].widget.attrs['readonly'] = True
43 43
44 44 class Meta:
45 45 model = Experiment
46 fields = ['campaign', 'name', 'start_time', 'end_time']
46 exclude = ['']
47 47
48 48 class LocationForm(forms.ModelForm):
49 49 class Meta:
50 50 model = Location
51 51 exclude = ['']
52 52
53 53 class DeviceForm(forms.ModelForm):
54 54 class Meta:
55 55 model = Device
56 56 exclude = ['status']
57 57
58 58 class ConfigurationForm(forms.ModelForm):
59 59 class Meta:
60 60 model = Configuration
61 fields = ['experiment', 'device']
61 exclude = ['type', 'created_date', 'programmed_date', 'parameters']
62 62
63 63 class DeviceTypeForm(forms.Form):
64 64 device_type = forms.ChoiceField(choices=add_empty_choice(DeviceType.objects.all().order_by('name').values_list('id', 'name')))
@@ -1,142 +1,160
1 1 from django.db import models
2 2 from polymorphic import PolymorphicModel
3 3
4 4 from django.core.urlresolvers import reverse
5 5
6 6 CONF_STATES = (
7 (0, 'Disconnected'),
8 (1, 'Connected'),
9 (1, 'Running'),
10 )
7 (0, 'Disconnected'),
8 (1, 'Connected'),
9 (1, 'Running'),
10 )
11 11
12 12 CONF_TYPES = (
13 (0, 'Active'),
14 (1, 'Historical'),
15 )
13 (0, 'Active'),
14 (1, 'Historical'),
15 )
16 16
17 17 DEV_STATES = (
18 (0, 'No connected'),
19 (1, 'Connected'),
20 (2, 'Configured'),
21 (3, 'Running'),
22 )
18 (0, 'No connected'),
19 (1, 'Connected'),
20 (2, 'Configured'),
21 (3, 'Running'),
22 )
23 23
24 24 DEV_TYPES = (
25 ('', 'Select a device type'),
26 ('rc', 'Radar Controller'),
27 ('dds', 'Direct Digital Synthesizer'),
28 ('jars', 'Jicamarca Radar Acquisition System'),
29 ('usrp', 'Universal Software Radio Peripheral'),
30 ('cgs', 'Clock Generator System'),
31 ('abs', 'Automatic Beam Switching'),
32 )
25 ('', 'Select a device type'),
26 ('rc', 'Radar Controller'),
27 ('dds', 'Direct Digital Synthesizer'),
28 ('jars', 'Jicamarca Radar Acquisition System'),
29 ('usrp', 'Universal Software Radio Peripheral'),
30 ('cgs', 'Clock Generator System'),
31 ('abs', 'Automatic Beam Switching'),
32 )
33
34 DEV_PORTS = {
35 'rc' : 2000,
36 'dds' : 2000,
37 'jars' : 2000,
38 'usrp' : 2000,
39 'cgs' : 8080,
40 'abs' : 8080
41 }
33 42
34 43 # Create your models here.
35 44
36 45 class Location(models.Model):
37 46
38 47 name = models.CharField(max_length = 30)
39 48 description = models.TextField(blank=True, null=True)
40 49
41 50 class Meta:
42 51 db_table = 'db_location'
43 52
44 53 def __unicode__(self):
45 54 return u'%s' % self.name
46 55
47 56 class DeviceType(models.Model):
48 57
49 58 name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
50 59 description = models.TextField(blank=True, null=True)
51 60
52 61 class Meta:
53 62 db_table = 'db_device_types'
54 63
55 64 def __unicode__(self):
56 65 return u'%s' % self.get_name_display()
57 66
58 67 class Device(models.Model):
59 68
60 69 device_type = models.ForeignKey(DeviceType)
61 70 # location = models.ForeignKey(Location)
62 71
63 72 name = models.CharField(max_length=40, default='')
64 73 ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0')
65 74 port_address = models.PositiveSmallIntegerField(default=2000)
66 75 description = models.TextField(blank=True, null=True)
67 76 status = models.PositiveSmallIntegerField(default=0, choices=DEV_STATES)
68 77
69 78 class Meta:
70 79 db_table = 'db_devices'
71 80
72 81 def __unicode__(self):
73 82 return u'%s | %s' % (self.name, self.ip_address)
83
84 def get_status(self):
85
86 return self.status
87
74 88
75 89 class Campaign(models.Model):
76 90
91 template = models.BooleanField(default=False)
92
77 93 name = models.CharField(max_length=40, unique=True)
78 94 start_date = models.DateTimeField(blank=True, null=True)
79 95 end_date = models.DateTimeField(blank=True, null=True)
80 96 tags = models.CharField(max_length=40)
81 97 description = models.TextField(blank=True, null=True)
82 template = models.BooleanField(default=False)
83 98
84 99 class Meta:
85 100 db_table = 'db_campaigns'
86 101
87 102 def __unicode__(self):
88 103 return u'%s' % (self.name)
89 104
90 105 class Experiment(models.Model):
91 106
107 template = models.BooleanField(default=False)
108
92 109 campaign = models.ForeignKey(Campaign)
93 110 name = models.CharField(max_length=40, default='')
94 111 start_time = models.TimeField(default='00:00:00')
95 112 end_time = models.TimeField(default='23:59:59')
96 113
97 114 class Meta:
98 115 db_table = 'db_experiments'
99 116
100 117 def __unicode__(self):
101 118 return u'[%s]: %s' % (self.campaign.name, self.name)
102 119
103 120 class Configuration(PolymorphicModel):
104 121
122 template = models.BooleanField(default=False)
123
124 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
125
105 126 experiment = models.ForeignKey(Experiment)
106 127 device = models.ForeignKey(Device)
107 128
108 status = models.PositiveSmallIntegerField(default=0, choices=CONF_STATES)
109 129 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
110 130
111 name = models.CharField(max_length=40, default='')
112
113 131 created_date = models.DateTimeField(auto_now_add=True)
114 132 programmed_date = models.DateTimeField(auto_now=True)
115 133
116 134 parameters = models.TextField(default='{}')
117 135
118 136 class Meta:
119 137 db_table = 'db_configurations'
120 138
121 139 def __unicode__(self):
122 140 return u'[%s - %s]: %s' % (self.experiment.campaign.name,
123 self.experiment.name,
124 self.device.name)
125 def get_absolute_url(self):
141 self.experiment.name,
142 self.device.name)
126 143
144 def get_absolute_url(self):
127 145 return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)])
128 146
129 147 def get_absolute_url_edit(self):
130 148 return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)])
131 149
132 150 def get_absolute_url_import(self):
133 151 return reverse('url_import_%s_conf' % self.device.device_type.name, args=[str(self.id)])
134 152
135 153 def get_absolute_url_export(self):
136 154 return reverse('url_export_%s_conf' % self.device.device_type.name, args=[str(self.id)])
137 155
138 156 def get_absolute_url_write(self):
139 157 return reverse('url_write_%s_conf' % self.device.device_type.name, args=[str(self.id)])
140 158
141 159 def get_absolute_url_read(self):
142 160 return reverse('url_read_%s_conf' % self.device.device_type.name, args=[str(self.id)]) No newline at end of file
@@ -1,36 +1,35
1 1 from django.template.defaulttags import register
2 2
3 3 @register.filter
4 4 def attr(instance, key):
5 5
6 6 display_key = "get_" + key + "_display"
7 7
8 8 if hasattr(instance, display_key):
9 9 return getattr(instance, display_key)()
10 10
11 11 if hasattr(instance, key):
12 12 return getattr(instance, key)
13 13
14 14 return instance.get(key)
15 15
16 16 @register.filter
17 17 def title(s):
18 18 return s.replace('_', ' ').title()
19 19
20 20 @register.filter
21 21 def value(instance, key):
22 22
23 23 item = instance
24 24 for my_key in key.split("__"):
25 print "TP Value", item, my_key
26 25 item = attr(item, my_key)
27 26
28 27 print item
29 28 return item
30 29
31 30 @register.simple_tag
32 31 def get_verbose_field_name(instance, field_name):
33 32 """
34 33 Returns verbose_name for a field.
35 34 """
36 35 return instance._meta.get_field(field_name).verbose_name.title() No newline at end of file
@@ -1,600 +1,595
1 1 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
2 2 from django.contrib import messages
3 3
4 4 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm
5 5 from apps.cgs.forms import CGSConfigurationForm
6 6 from apps.jars.forms import JARSConfigurationForm
7 7 from apps.usrp.forms import USRPConfigurationForm
8 8 from apps.abs.forms import ABSConfigurationForm
9 9 from apps.rc.forms import RCConfigurationForm
10 10 from apps.dds.forms import DDSConfigurationForm
11 11
12 12 from .models import Campaign, Experiment, Device, Configuration, Location
13 13 from apps.cgs.models import CGSConfiguration
14 14 from apps.jars.models import JARSConfiguration
15 15 from apps.usrp.models import USRPConfiguration
16 16 from apps.abs.models import ABSConfiguration
17 17 from apps.rc.models import RCConfiguration
18 18 from apps.dds.models import DDSConfiguration
19 19
20 20 # Create your views here.
21 21
22 22 CONF_FORMS = {
23 23 'rc': RCConfigurationForm,
24 24 'dds': DDSConfigurationForm,
25 25 'jars': JARSConfigurationForm,
26 26 'cgs': CGSConfigurationForm,
27 27 'abs': ABSConfigurationForm,
28 28 'usrp': USRPConfigurationForm,
29 29 }
30 30
31 31 CONF_MODELS = {
32 32 'rc': RCConfiguration,
33 33 'dds': DDSConfiguration,
34 34 'jars': JARSConfiguration,
35 35 'cgs': CGSConfiguration,
36 36 'abs': ABSConfiguration,
37 37 'usrp': USRPConfiguration,
38 38 }
39 39
40 40 def index(request):
41 41 kwargs = {}
42 42
43 43 return render(request, 'index.html', kwargs)
44 44
45 45 def locations(request):
46 46
47 47 locations = Location.objects.all().order_by('name')
48 48
49 49 keys = ['id', 'name', 'description']
50 50
51 51 kwargs = {}
52 52 kwargs['location_keys'] = keys[1:]
53 53 kwargs['locations'] = locations
54 54 kwargs['title'] = 'Location'
55 55 kwargs['suptitle'] = 'List'
56 56 kwargs['button'] = 'New Location'
57 57
58 58 return render(request, 'locations.html', kwargs)
59 59
60 60 def location(request, id_loc):
61 61
62 62 location = get_object_or_404(Location, pk=id_loc)
63 63
64 64 kwargs = {}
65 65 kwargs['location'] = location
66 66 kwargs['location_keys'] = ['name', 'description']
67 67
68 68 kwargs['title'] = 'Location'
69 69 kwargs['suptitle'] = 'Details'
70 70
71 71 return render(request, 'location.html', kwargs)
72 72
73 73 def location_new(request):
74 74
75 75 if request.method == 'GET':
76 76 form = LocationForm()
77 77
78 78 if request.method == 'POST':
79 79 form = LocationForm(request.POST)
80 80
81 81 if form.is_valid():
82 82 form.save()
83 83 return redirect('url_locations')
84 84
85 85 kwargs = {}
86 86 kwargs['form'] = form
87 87 kwargs['title'] = 'Location'
88 88 kwargs['suptitle'] = 'New'
89 89 kwargs['button'] = 'Create'
90 90
91 91 return render(request, 'location_edit.html', kwargs)
92 92
93 93 def location_edit(request, id_loc):
94 94
95 95 location = get_object_or_404(Location, pk=id_loc)
96 96
97 97 if request.method=='GET':
98 98 form = LocationForm(instance=location)
99 99
100 100 if request.method=='POST':
101 101 form = LocationForm(request.POST, instance=location)
102 102
103 103 if form.is_valid():
104 104 form.save()
105 105 return redirect('url_locations')
106 106
107 107 kwargs = {}
108 108 kwargs['form'] = form
109 109 kwargs['title'] = 'Location'
110 110 kwargs['suptitle'] = 'Edit'
111 111 kwargs['button'] = 'Update'
112 112
113 113 return render(request, 'location_edit.html', kwargs)
114 114
115 115 def location_delete(request, id_loc):
116 116
117 117 location = get_object_or_404(Location, pk=id_loc)
118 118
119 119 if request.method=='POST':
120 120
121 121 if request.user.is_staff:
122 122 location.delete()
123 123 return redirect('url_locations')
124 124
125 125 return HttpResponse("Not enough permission to delete this object")
126 126
127 127 kwargs = {'object':location, 'loc_active':'active',
128 128 'url_cancel':'url_location', 'id_item':id_loc}
129 129
130 130 return render(request, 'item_delete.html', kwargs)
131 131
132 132 def devices(request):
133 133
134 134 devices = Device.objects.all().order_by('device_type__name')
135 135
136 136 # keys = ['id', 'device_type__name', 'name', 'ip_address']
137 137 keys = ['id', 'name', 'ip_address', 'port_address', 'device_type']
138 138
139 139 kwargs = {}
140 140 kwargs['device_keys'] = keys[1:]
141 141 kwargs['devices'] = devices#.values(*keys)
142 142 kwargs['title'] = 'Device'
143 143 kwargs['suptitle'] = 'List'
144 144 kwargs['button'] = 'New Device'
145 145
146 146 return render(request, 'devices.html', kwargs)
147 147
148 148 def device(request, id_dev):
149 149
150 150 device = get_object_or_404(Device, pk=id_dev)
151 151
152 152 kwargs = {}
153 153 kwargs['device'] = device
154 154 kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description']
155 155
156 156 kwargs['title'] = 'Device'
157 157 kwargs['suptitle'] = 'Details'
158 158
159 159 return render(request, 'device.html', kwargs)
160 160
161 161 def device_new(request):
162 162
163 163 if request.method == 'GET':
164 164 form = DeviceForm()
165 165
166 166 if request.method == 'POST':
167 167 form = DeviceForm(request.POST)
168 168
169 169 if form.is_valid():
170 170 form.save()
171 171 return redirect('url_devices')
172 172
173 173 kwargs = {}
174 174 kwargs['form'] = form
175 175 kwargs['title'] = 'Device'
176 176 kwargs['suptitle'] = 'New'
177 177 kwargs['button'] = 'Create'
178 178
179 179 return render(request, 'device_edit.html', kwargs)
180 180
181 181 def device_edit(request, id_dev):
182 182
183 183 device = get_object_or_404(Device, pk=id_dev)
184 184
185 185 if request.method=='GET':
186 186 form = DeviceForm(instance=device)
187 187
188 188 if request.method=='POST':
189 189 form = DeviceForm(request.POST, instance=device)
190 190
191 191 if form.is_valid():
192 192 form.save()
193 193 return redirect('url_devices')
194 194
195 195 kwargs = {}
196 196 kwargs['form'] = form
197 197 kwargs['title'] = 'Device'
198 198 kwargs['suptitle'] = 'Edit'
199 199 kwargs['button'] = 'Update'
200 200
201 201 return render(request, 'device_edit.html', kwargs)
202 202
203 203 def device_delete(request, id_dev):
204 204
205 205 device = get_object_or_404(Device, pk=id_dev)
206 206
207 207 if request.method=='POST':
208 208
209 209 if request.user.is_staff:
210 210 device.delete()
211 211 return redirect('url_devices')
212 212
213 213 return HttpResponse("Not enough permission to delete this object")
214 214
215 215 kwargs = {'object':device, 'dev_active':'active',
216 216 'url_cancel':'url_device', 'id_item':id_dev}
217 217
218 218 return render(request, 'item_delete.html', kwargs)
219 219
220 220 def campaigns(request):
221 221
222 222 campaigns = Campaign.objects.all().order_by('start_date')
223 223
224 224 keys = ['id', 'name', 'start_date', 'end_date']
225 225
226 226 kwargs = {}
227 227 kwargs['campaign_keys'] = keys[1:]
228 228 kwargs['campaigns'] = campaigns#.values(*keys)
229 229 kwargs['title'] = 'Campaign'
230 230 kwargs['suptitle'] = 'List'
231 231 kwargs['button'] = 'New Campaign'
232 232
233 233 return render(request, 'campaigns.html', kwargs)
234 234
235 235 def campaign(request, id_camp):
236 236
237 237 campaign = get_object_or_404(Campaign, pk=id_camp)
238 238 experiments = Experiment.objects.filter(campaign=campaign)
239 239
240 240 form = CampaignForm(instance=campaign)
241 241
242 242 kwargs = {}
243 243 kwargs['campaign'] = campaign
244 244 kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
245 245
246 246 keys = ['id', 'name', 'start_time', 'end_time']
247 247
248 248 kwargs['experiment_keys'] = keys[1:]
249 249 kwargs['experiments'] = experiments.values(*keys)
250 250
251 251 kwargs['title'] = 'Campaign'
252 252 kwargs['suptitle'] = 'Details'
253 253
254 254 kwargs['form'] = form
255 255 kwargs['button'] = 'Add Experiment'
256 256
257 257 return render(request, 'campaign.html', kwargs)
258 258
259 259 def campaign_new(request):
260 260
261 261 if request.method == 'GET':
262 262 form = CampaignForm()
263 263
264 264 if request.method == 'POST':
265 265 form = CampaignForm(request.POST)
266 266
267 267 if form.is_valid():
268 268 campaign = form.save()
269 269 return redirect('url_campaign', id_camp=campaign.id)
270 270
271 271 kwargs = {}
272 272 kwargs['form'] = form
273 273 kwargs['title'] = 'Campaign'
274 274 kwargs['suptitle'] = 'New'
275 275 kwargs['button'] = 'Create'
276 276
277 277 return render(request, 'campaign_edit.html', kwargs)
278 278
279 279 def campaign_edit(request, id_camp):
280 280
281 281 campaign = get_object_or_404(Campaign, pk=id_camp)
282 282
283 283 if request.method=='GET':
284 284 form = CampaignForm(instance=campaign)
285 285
286 286 if request.method=='POST':
287 287 form = CampaignForm(request.POST, instance=campaign)
288 288
289 289 if form.is_valid():
290 290 form.save()
291 291 return redirect('url_campaign', id_camp=id_camp)
292 292
293 293 kwargs = {}
294 294 kwargs['form'] = form
295 295 kwargs['title'] = 'Campaign'
296 296 kwargs['suptitle'] = 'Edit'
297 297 kwargs['button'] = 'Update'
298 298
299 299 return render(request, 'campaign_edit.html', kwargs)
300 300
301 301 def campaign_delete(request, id_camp):
302 302
303 303 campaign = get_object_or_404(Campaign, pk=id_camp)
304 304
305 305 if request.method=='POST':
306 306 if request.user.is_staff:
307 307 campaign.delete()
308 308 return redirect('url_campaigns')
309 309
310 310 return HttpResponse("Not enough permission to delete this object")
311 311
312 312 kwargs = {'object':campaign, 'camp_active':'active',
313 313 'url_cancel':'url_campaign', 'id_item':id_camp}
314 314
315 315 return render(request, 'item_delete.html', kwargs)
316 316
317 317 def experiments(request):
318 318
319 319 experiment_list = Experiment.objects.all().order_by('campaign')
320 320
321 321 keys = ['id', 'name', 'start_time', 'end_time', 'campaign']
322 322
323 323 kwargs = {}
324 324
325 325 kwargs['experiment_keys'] = keys[1:]
326 326 kwargs['experiments'] = experiment_list#.values(*keys)
327 327
328 328 kwargs['title'] = 'Experiment'
329 329 kwargs['suptitle'] = 'List'
330 330 kwargs['button'] = 'New Experiment'
331 331
332 332 return render(request, 'experiments.html', kwargs)
333 333
334 334 def experiment(request, id_exp):
335 335
336 336 experiment = get_object_or_404(Experiment, pk=id_exp)
337 337
338 338 experiments = Experiment.objects.filter(campaign=experiment.campaign)
339 339 configurations = Configuration.objects.filter(experiment=experiment, type=0)
340 340
341 341 kwargs = {}
342 342
343 343 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
344 344 conf_keys = ['id', 'device__name', 'device__device_type', 'device__ip_address', 'device__port_address']
345 345
346 346 conf_labels = ['id', 'device__name', 'device_type', 'ip_address', 'port_address']
347 347
348 348 kwargs['experiment_keys'] = exp_keys[1:]
349 349 kwargs['experiment'] = experiment
350 350
351 351 kwargs['experiments'] = experiments.values(*exp_keys)
352 352
353 353 kwargs['configuration_labels'] = conf_labels[1:]
354 354 kwargs['configuration_keys'] = conf_keys[1:]
355 355 kwargs['configurations'] = configurations #.values(*conf_keys)
356 356
357 357 kwargs['title'] = 'Experiment'
358 358 kwargs['suptitle'] = 'Details'
359 359
360 360 kwargs['button'] = 'Add Configuration'
361 361
362 362 return render(request, 'experiment.html', kwargs)
363 363
364 364 def experiment_new(request, id_camp=0):
365 365
366 366 if request.method == 'GET':
367 367 form = ExperimentForm(initial={'campaign':id_camp})
368 368
369 369 if request.method == 'POST':
370 370 form = ExperimentForm(request.POST, initial={'campaign':id_camp})
371 371
372 372 if form.is_valid():
373 373 experiment = form.save()
374 374 return redirect('url_experiment', id_exp=experiment.id)
375 375
376 376 kwargs = {}
377 377 kwargs['form'] = form
378 378 kwargs['title'] = 'Experiment'
379 379 kwargs['suptitle'] = 'New'
380 380 kwargs['button'] = 'Create'
381 381
382 382 return render(request, 'experiment_edit.html', kwargs)
383 383
384 384 def experiment_edit(request, id_exp):
385 385
386 386 experiment = get_object_or_404(Experiment, pk=id_exp)
387 387
388 388 if request.method == 'GET':
389 389 form = ExperimentForm(instance=experiment)
390 390
391 391 if request.method=='POST':
392 392 form = ExperimentForm(request.POST, instance=experiment)
393 393
394 394 if form.is_valid():
395 395 experiment = form.save()
396 396 return redirect('url_experiment', id_exp=experiment.id)
397 397
398 398 kwargs = {}
399 399 kwargs['form'] = form
400 400 kwargs['title'] = 'Experiment'
401 401 kwargs['suptitle'] = 'Edit'
402 402 kwargs['button'] = 'Update'
403 403
404 404 return render(request, 'experiment_edit.html', kwargs)
405 405
406 406 def experiment_delete(request, id_exp):
407 407
408 408 experiment = get_object_or_404(Experiment, pk=id_exp)
409 409
410 410 if request.method=='POST':
411 411 if request.user.is_staff:
412 412 id_camp = experiment.campaign.id
413 413 experiment.delete()
414 414 return redirect('url_campaign', id_camp=id_camp)
415 415
416 416 return HttpResponse("Not enough permission to delete this object")
417 417
418 418 kwargs = {'object':experiment, 'exp_active':'active',
419 419 'url_cancel':'url_experiment', 'id_item':id_exp}
420 420
421 421 return render(request, 'item_delete.html', kwargs)
422 422
423 423 def dev_confs(request):
424 424
425 425 configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment')
426 426
427 427 # keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name']
428 428
429 429 keys = ['id', 'device', 'experiment', 'type', 'programmed_date']
430 430
431 431 kwargs = {}
432 432
433 433 kwargs['configuration_keys'] = keys[1:]
434 434 kwargs['configurations'] = configurations#.values(*keys)
435 435
436 436 kwargs['title'] = 'Configuration'
437 437 kwargs['suptitle'] = 'List'
438 438 kwargs['button'] = 'New Configuration'
439 439
440 440 return render(request, 'dev_confs.html', kwargs)
441 441
442 442 def dev_conf(request, id_conf):
443 443
444 444 conf = get_object_or_404(Configuration, pk=id_conf)
445 445
446 446 DevConfModel = CONF_MODELS[conf.device.device_type.name]
447 447 dev_conf = DevConfModel.objects.get(pk=id_conf)
448 448
449 449 kwargs = {}
450 450 kwargs['dev_conf'] = dev_conf
451 kwargs['dev_conf_keys'] = ['experiment', 'device']
451 kwargs['dev_conf_keys'] = ['name', 'experiment', 'device']
452 452
453 453 kwargs['title'] = 'Configuration'
454 454 kwargs['suptitle'] = 'Details'
455 455
456 456 kwargs['button'] = 'Edit Configuration'
457 457
458 458 ###### SIDEBAR ######
459 459 kwargs.update(sidebar(conf))
460 460
461 461 return render(request, 'dev_conf.html', kwargs)
462 462
463 463 def dev_conf_new(request, id_exp=0):
464 464
465 465 if request.method == 'GET':
466 466 form = ConfigurationForm(initial={'experiment':id_exp})
467 467
468 468 if request.method == 'POST':
469 form = ConfigurationForm(request.POST)
469 experiment = Experiment.objects.get(pk=request.POST['experiment'])
470 device = Device.objects.get(pk=request.POST['device'])
471
472 DevConfForm = CONF_FORMS[device.device_type.name]
473
474 form = DevConfForm(request.POST, initial={'experiment':experiment.id})
470 475
471 476 if form.is_valid():
472 experiment = Experiment.objects.get(pk=request.POST['experiment'])
473 device = Device.objects.get(pk=request.POST['device'])
474
475 exp_devices = Device.objects.filter(configuration__experiment=experiment,
476 configuration__type=0)
477
478 if device.id not in exp_devices.values('id',):
479
480 DevConfModel = CONF_MODELS[device.device_type.name]
481 conf = DevConfModel(experiment=experiment, device=device)
482 conf.save()
483
484 return redirect('url_experiment', id_exp=experiment.id)
477 dev_conf = form.save()
478
479 return redirect('url_experiment', id_exp=experiment.id)
485 480
486 481 kwargs = {}
487 482 kwargs['form'] = form
488 483 kwargs['title'] = 'Configuration'
489 484 kwargs['suptitle'] = 'New'
490 485 kwargs['button'] = 'Create'
491 486
492 487 return render(request, 'dev_conf_edit.html', kwargs)
493 488
494 489 def dev_conf_edit(request, id_conf):
495 490
496 491 conf = get_object_or_404(Configuration, pk=id_conf)
497 492
498 493 DevConfModel = CONF_MODELS[conf.device.device_type.name]
499 494 DevConfForm = CONF_FORMS[conf.device.device_type.name]
500 495
501 496 dev_conf = DevConfModel.objects.get(pk=id_conf)
502 497
503 498 if request.method=='GET':
504 499 form = DevConfForm(instance=dev_conf)
505 500
506 501 if request.method=='POST':
507 502 form = DevConfForm(request.POST, instance=dev_conf)
508 503
509 504 if form.is_valid():
510 505 form.save()
511 506 return redirect('url_dev_conf', id_conf=id_conf)
512 507
513 508 kwargs = {}
514 509 kwargs['form'] = form
515 510 kwargs['title'] = 'Device Configuration'
516 511 kwargs['suptitle'] = 'Edit'
517 512 kwargs['button'] = 'Update'
518 513
519 514 ###### SIDEBAR ######
520 515 kwargs.update(sidebar(conf))
521 516
522 517 return render(request, 'dev_conf_edit.html', kwargs)
523 518
524 519 def dev_conf_read(request, id_conf):
525 520
526 521 conf = get_object_or_404(Configuration, pk=id_conf)
527 522
528 523 messages.error(request, "Read View not implemented yet")
529 524
530 525 return redirect('url_dev_conf', id_conf=conf.id)
531 526
532 527 def dev_conf_write(request, id_conf):
533 528
534 529 conf = get_object_or_404(Configuration, pk=id_conf)
535 530
536 531 messages.error(request, "Write View not implemented yet")
537 532
538 533 return redirect('url_dev_conf', id_conf=conf.id)
539 534
540 535 def dev_conf_import(request, id_conf):
541 536
542 537 conf = get_object_or_404(Configuration, pk=id_conf)
543 538
544 539 messages.error(request, "Import View not implemented yet")
545 540
546 541 return redirect('url_dev_conf', id_conf=conf.id)
547 542
548 543 def dev_conf_export(request, id_conf):
549 544
550 545 conf = get_object_or_404(Configuration, pk=id_conf)
551 546
552 547 messages.error(request, "Export View not implemented yet")
553 548
554 549 return redirect('url_dev_conf', id_conf=conf.id)
555 550
556 551 def dev_conf_delete(request, id_conf):
557 552
558 553 conf = get_object_or_404(Configuration, pk=id_conf)
559 554
560 555 if request.method=='POST':
561 556 if request.user.is_staff:
562 557 id_exp = conf.experiment.id
563 558 conf.delete()
564 559 return redirect('url_experiment', id_exp=id_exp)
565 560
566 561 return HttpResponse("Not enough permission to delete this object")
567 562
568 563 kwargs = {'object':conf, 'conf_active':'active',
569 564 'url_cancel':'url_dev_conf', 'id_item':id_conf}
570 565
571 566 ###### SIDEBAR ######
572 567 kwargs.update(sidebar(conf))
573 568
574 569 return render(request, 'item_delete.html', kwargs)
575 570
576 571 def sidebar(conf):
577 572
578 573 experiments = Experiment.objects.filter(campaign=conf.experiment.campaign)
579 574 configurations = Configuration.objects.filter(experiment=conf.experiment, type=0)
580 575
581 576 exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time']
582 577 conf_keys = ['id', 'device']
583 578
584 579 kwargs = {}
585 580
586 581 kwargs['dev_conf'] = conf
587 582
588 583 kwargs['experiment_keys'] = exp_keys[1:]
589 584 kwargs['experiments'] = experiments.values(*exp_keys)
590 585
591 586 kwargs['configuration_keys'] = conf_keys[1:]
592 587 kwargs['configurations'] = configurations #.values(*conf_keys)
593 588
594 589 return kwargs
595 590
596 591
597 592 def operation(request):
598 593 pass
599 594
600 595
General Comments 0
You need to be logged in to leave comments. Login now