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