##// END OF EJS Templates
Improve Search view (filters and paginator added), add base_list template, delete unused templates...
Juan C. Espinoza -
r138:3e65d7459f20
parent child
Show More
@@ -54,7 +54,7 def cgs_conf(request, id_conf):
54 # messages.error(request, message=status)
54 # messages.error(request, message=status)
55
55
56 kwargs['dev_conf'] = conf
56 kwargs['dev_conf'] = conf
57 kwargs['dev_conf_keys'] = ['experiment', 'device',
57 kwargs['dev_conf_keys'] = ['name',
58 'freq0', 'freq1',
58 'freq0', 'freq1',
59 'freq2', 'freq3']
59 'freq2', 'freq3']
60
60
@@ -21,8 +21,6 def dds_conf(request, id_conf):
21
21
22 kwargs['dev_conf'] = conf
22 kwargs['dev_conf'] = conf
23 kwargs['dev_conf_keys'] = ['name',
23 kwargs['dev_conf_keys'] = ['name',
24 'experiment',
25 'device',
26 'clock',
24 'clock',
27 'multiplier',
25 'multiplier',
28 'frequencyA_Mhz',
26 'frequencyA_Mhz',
@@ -22,7 +22,7 def jars_conf(request, id_conf):
22
22
23
23
24 kwargs['dev_conf'] = conf
24 kwargs['dev_conf'] = conf
25 kwargs['dev_conf_keys'] = ['experiment', 'device',
25 kwargs['dev_conf_keys'] = ['name',
26 'cards_number', 'channels_number', 'channels',
26 'cards_number', 'channels_number', 'channels',
27 'rd_directory', 'raw_data_blocks', 'data_type',
27 'rd_directory', 'raw_data_blocks', 'data_type',
28 'acq_profiles', 'profiles_block', 'fftpoints',
28 'acq_profiles', 'profiles_block', 'fftpoints',
@@ -1,5 +1,5
1 [
1 [
2 {"fields": {"name": "MAIN RADAR", "description": ""}, "model": "main.location", "pk": 1},
2 {"fields": {"name": "JRO Imaging", "description": ""}, "model": "main.location", "pk": 1},
3 {"fields": {"name": "JASMET", "description": ""}, "model": "main.location", "pk": 2},
3 {"fields": {"name": "JASMET", "description": ""}, "model": "main.location", "pk": 2},
4 {"fields": {"name": "SOUSY", "description": ""}, "model": "main.location", "pk": 3},
4 {"fields": {"name": "SOUSY", "description": ""}, "model": "main.location", "pk": 3},
5 {"fields": {"name": "JULIA", "description": ""}, "model": "main.location", "pk": 4},
5 {"fields": {"name": "JULIA", "description": ""}, "model": "main.location", "pk": 4},
@@ -32,6 +32,20 class DatepickerWidget(forms.widgets.TextInput):
32 html = '<div class="input-group date">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span></div>'
32 html = '<div class="input-group date">'+input_html+'<span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span></div>'
33 return mark_safe(html)
33 return mark_safe(html)
34
34
35 class DateRangepickerWidget(forms.widgets.TextInput):
36 def render(self, name, value, attrs=None):
37 start = attrs['start_date']
38 end = attrs['end_date']
39 html = '''<div class="col-md-5 input-group date" style="float:inherit">
40 <input class="form-control" id="id_start_date" name="start_date" placeholder="Start" title="" type="text" value="{}">
41 <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
42 </div>
43 <div class="col-md-5 col-md-offset-2 input-group date" style="float:inherit">
44 <input class="form-control" id="id_end_date" name="end_date" placeholder="End" title="" type="text" value="{}">
45 <span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>
46 </div>'''.format(start, end)
47 return mark_safe(html)
48
35 class TimepickerWidget(forms.widgets.TextInput):
49 class TimepickerWidget(forms.widgets.TextInput):
36 def render(self, name, value, attrs=None):
50 def render(self, name, value, attrs=None):
37 input_html = super(TimepickerWidget, self).render(name, value, attrs)
51 input_html = super(TimepickerWidget, self).render(name, value, attrs)
@@ -132,6 +146,7 class OperationForm(forms.Form):
132 super(OperationForm, self).__init__(*args, **kwargs)
146 super(OperationForm, self).__init__(*args, **kwargs)
133 self.fields['campaign'].choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name')[:length]
147 self.fields['campaign'].choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name')[:length]
134
148
149
135 class OperationSearchForm(forms.Form):
150 class OperationSearchForm(forms.Form):
136 # -----ALL Campaigns------
151 # -----ALL Campaigns------
137 campaign = forms.ChoiceField(label="Campaign")
152 campaign = forms.ChoiceField(label="Campaign")
@@ -140,6 +155,7 class OperationSearchForm(forms.Form):
140 super(OperationSearchForm, self).__init__(*args, **kwargs)
155 super(OperationSearchForm, self).__init__(*args, **kwargs)
141 self.fields['campaign'].choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name')
156 self.fields['campaign'].choices=Campaign.objects.all().order_by('-start_date').values_list('id', 'name')
142
157
158
143 class NewForm(forms.Form):
159 class NewForm(forms.Form):
144
160
145 create_from = forms.ChoiceField(choices=((0, '-----'),
161 create_from = forms.ChoiceField(choices=((0, '-----'),
@@ -152,4 +168,23 class NewForm(forms.Form):
152 template_choices = kwargs.pop('template_choices', [])
168 template_choices = kwargs.pop('template_choices', [])
153 super(NewForm, self).__init__(*args, **kwargs)
169 super(NewForm, self).__init__(*args, **kwargs)
154 self.fields['choose_template'].choices = add_empty_choice(template_choices)
170 self.fields['choose_template'].choices = add_empty_choice(template_choices)
171
172
173 class FilterForm(forms.Form):
174
175 def __init__(self, *args, **kwargs):
176 extra_fields = kwargs.pop('extra_fields', [])
177 super(FilterForm, self).__init__(*args, **kwargs)
178
179 for field in extra_fields:
180 if 'range_date' in field:
181 self.fields[field] = forms.CharField(required=False)
182 self.fields[field].widget = DateRangepickerWidget()
183 if 'initial' in kwargs:
184 self.fields[field].widget.attrs = {'start_date':kwargs['initial'].get('start_date', ''),
185 'end_date':kwargs['initial'].get('end_date', '')}
186 elif 'template' in field:
187 self.fields['template'] = forms.BooleanField(required=False)
188 else:
189 self.fields[field] = forms.CharField(required=False)
155 No newline at end of file
190
@@ -75,7 +75,7 class Location(models.Model):
75 return u'%s' % self.name
75 return u'%s' % self.name
76
76
77 def get_absolute_url(self):
77 def get_absolute_url(self):
78 return reverse('url_device', args=[str(self.id)])
78 return reverse('url_location', args=[str(self.id)])
79
79
80
80
81 class DeviceType(models.Model):
81 class DeviceType(models.Model):
@@ -143,10 +143,11 class Campaign(models.Model):
143 ordering = ('name',)
143 ordering = ('name',)
144
144
145 def __unicode__(self):
145 def __unicode__(self):
146 return u'%s' % (self.name)
146 if self.template:
147 return u'{} (template)'.format(self.name)
148 else:
149 return u'{}'.format(self.name)
147
150
148 def get_absolute_url(self):
149 return reverse('url_campaign', args=[str(self.id)])
150
151
151 def parms_to_dict(self):
152 def parms_to_dict(self):
152
153
@@ -259,7 +260,7 class Experiment(models.Model):
259 return u'%s' % (self.name)
260 return u'%s' % (self.name)
260
261
261 @property
262 @property
262 def radar(self):
263 def radar_system(self):
263 return self.location
264 return self.location
264
265
265 def clone(self, **kwargs):
266 def clone(self, **kwargs):
@@ -434,8 +435,8 class Configuration(PolymorphicModel):
434
435
435 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
436 name = models.CharField(verbose_name="Configuration Name", max_length=40, default='')
436
437
437 experiment = models.ForeignKey('Experiment', null=True, blank=True, on_delete=models.CASCADE)
438 experiment = models.ForeignKey('Experiment', verbose_name='Experiment', null=True, blank=True, on_delete=models.CASCADE)
438 device = models.ForeignKey(Device, null=True, on_delete=models.CASCADE)
439 device = models.ForeignKey('Device', verbose_name='Device', null=True, on_delete=models.CASCADE)
439
440
440 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
441 type = models.PositiveSmallIntegerField(default=0, choices=CONF_TYPES)
441
442
@@ -450,8 +451,17 class Configuration(PolymorphicModel):
450 db_table = 'db_configurations'
451 db_table = 'db_configurations'
451
452
452 def __unicode__(self):
453 def __unicode__(self):
453
454
454 return u'[{}]: {}'.format(self.device.device_type.name.upper(), self.name)
455 device = '{}:'.format(self.device.device_type.name.upper())
456
457 if 'mix' in self._meta.get_all_field_names():
458 if self.mix:
459 device = '{} MIXED:'.format(self.device.device_type.name.upper())
460
461 if self.template:
462 return u'{} {} (template)'.format(device, self.name)
463 else:
464 return u'{} {}'.format(device, self.name)
455
465
456 def clone(self, **kwargs):
466 def clone(self, **kwargs):
457
467
@@ -52,6 +52,7
52 <li><a href="{% url 'url_add_experiment' %}">Experiment</a></li>
52 <li><a href="{% url 'url_add_experiment' %}">Experiment</a></li>
53 <li><a href="{% url 'url_add_dev_conf' 0%}">Device Configuration</a></li>
53 <li><a href="{% url 'url_add_dev_conf' 0%}">Device Configuration</a></li>
54 <li><a href="{% url 'url_add_device'%}">Device</a></li>
54 <li><a href="{% url 'url_add_device'%}">Device</a></li>
55 <li><a href="{% url 'url_add_location'%}">Radar System</a></li>
55 </ul>
56 </ul>
56 </li>
57 </li>
57 <li class=" dropdown {% block search-active %}{% endblock %}">
58 <li class=" dropdown {% block search-active %}{% endblock %}">
@@ -61,6 +62,7
61 <li><a href="{% url 'url_experiments' %}">Experiments</a></li>
62 <li><a href="{% url 'url_experiments' %}">Experiments</a></li>
62 <li><a href="{% url 'url_dev_confs' %}">Configurations</a></li>
63 <li><a href="{% url 'url_dev_confs' %}">Configurations</a></li>
63 <li><a href="{% url 'url_devices' %}">Devices</a></li>
64 <li><a href="{% url 'url_devices' %}">Devices</a></li>
65 <li><a href="{% url 'url_locations' %}">Radar Systems</a></li>
64 </ul>
66 </ul>
65 </li>
67 </li>
66 </ul>
68 </ul>
@@ -2,45 +2,72
2 {% load bootstrap3 %}
2 {% load bootstrap3 %}
3 {% load static %}
3 {% load static %}
4 {% load main_tags %}
4 {% load main_tags %}
5
5 {% block extra-head %}
6 {% block extra-head %}
6 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 <link href="{% static 'css/bootstrap-datetimepicker.min.css' %}" media="screen" rel="stylesheet">
7 {% endblock %}
8 {% endblock %}
8
9
9 {% block camp-active %}active{% endblock %}
10 {% block search-active %}active{% endblock %}
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
16 {% block content-filter %}
17 {% if form %}
18 <form class="form" method="get">
19 {% bootstrap_form form layout='horizontal' size='medium' %}
20 <div class="pull-right">
21 <button type="button" class="btn btn-primary" onclick="window.location.replace('?');"><span class="glyphicon glyphicon-refresh" aria-hidden="true"></span></button>
22 <button type="submit" class="btn btn-primary"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></button>
23 </div>
24 </form>
25 {% endif %}
26 {% endblock %}
27 <br><br>
15 <table class="table table-hover">
28 <table class="table table-hover">
16 <tr>
29 <tr>
17 <th>#</th>
30 <th>#</th>
18 {% for key in campaign_keys %}
31 {% for key in keys %}
19 <th>{{ key|title }}</th>
32 <th>{{ key|title }}</th>
20 {% endfor%}
33 {% endfor%}
21 </tr>
34 </tr>
22 {% for campaign in campaigns %}
35 {% for object in objects %}
23 <tr class="clickable-row" data-href="{% url 'url_campaign' campaign.id %}">
36 <tr class="clickable-row" data-href="{{object.get_absolute_url}}">
24 <td>{{ forloop.counter }}</td>
37 <td>{{ forloop.counter|add:offset }}</td>
25 {% for key in campaign_keys %}
38 {% for key in keys %}
26 <td>{{ campaign|attr:key }}</td>
39 <td>{{ object|attr:key }}</td>
27 {% endfor %}
40 {% endfor %}
28 </tr>
41 </tr>
29 {% endfor %}
42 {% endfor %}
30 </table>
43 </table>
31
44
32 {% endblock %}
45 <div class="pagination">
46 <span class="step-links">
47 {% if objects.has_previous %}
48 <a href="?page={{ objects.previous_page_number }}&{{q}}"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span></a>
49 {% endif %}
50 <span class="current">
51 Page {{ objects.number }} of {{ objects.paginator.num_pages }}.
52 </span>
53 {% if objects.has_next %}
54 <a href="?page={{ objects.next_page_number }}&{{q}}"><span class="glyphicon glyphicon-menu-right aria-hidden="true"></span></a>
55 {% endif %}
56 </span>
57 </div>
33
58
34 {% block sidebar%}
35 {% include "sidebar_devices.html" %}
36 {% endblock %}
59 {% endblock %}
37
60
38 {% block extra-js%}
61 {% block extra-js%}
62 <script src="{% static 'js/moment.min.js' %}"></script>
63 <script src="{% static 'js/bootstrap-datetimepicker.min.js' %}"></script>
39 <script type="text/javascript">
64 <script type="text/javascript">
40
65
66 $('.input-group.date').datetimepicker({"format": "YYYY-MM-DD"});
67
41 $(".clickable-row").click(function() {
68 $(".clickable-row").click(function() {
42 document.location = $(this).data("href");
69 document.location = $(this).data("href");
43 });
70 });
44
71
45 </script>
72 </script>
46 {% endblock %} No newline at end of file
73 {% endblock %}
@@ -33,7 +33,9
33 <br>
33 <br>
34
34
35 {% endif %}
35 {% endif %}
36
36 <div class="clearfix"></div>
37 <h2>Radar Systems</h2>
38 <br>
37 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true" >
39 <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true" >
38
40
39 {% for location in locations %}
41 {% for location in locations %}
@@ -43,7 +45,7
43 <h4 class="panel-title">
45 <h4 class="panel-title">
44
46
45 <a class="collapsed" role="button" data-toggle="collapse" href="#collapseTwo-{{ location.id }}" aria-expanded="false" aria-controls="collapseTwo">
47 <a class="collapsed" role="button" data-toggle="collapse" href="#collapseTwo-{{ location.id }}" aria-expanded="false" aria-controls="collapseTwo">
46 {{location.name}}: Experiment List
48 {{location.name}}: Experiments
47 <span>
49 <span>
48 </span>
50 </span>
49 </a>
51 </a>
@@ -6,6 +6,9 def attr(instance, key):
6
6
7 display_key = "get_" + key + "_display"
7 display_key = "get_" + key + "_display"
8
8
9 if key=='name':
10 return '{}'.format(instance)
11
9 if hasattr(instance, display_key):
12 if hasattr(instance, display_key):
10 return getattr(instance, display_key)()
13 return getattr(instance, display_key)()
11
14
@@ -35,5 +38,5 def get_verbose_field_name(instance, field_name):
35 Returns verbose_name for a field.
38 Returns verbose_name for a field.
36 """
39 """
37 if field_name=='ipp_unit':
40 if field_name=='ipp_unit':
38 return 'Inter pulse period [Km(Units)]'
41 return 'IPP [Km(Units)]'
39 return mark_safe(instance._meta.get_field(field_name).verbose_name) No newline at end of file
42 return mark_safe(instance._meta.get_field(field_name).verbose_name)
@@ -2,11 +2,14 from django.shortcuts import render, redirect, get_object_or_404, HttpResponse
2 from django.utils.safestring import mark_safe
2 from django.utils.safestring import mark_safe
3 from django.http import HttpResponseRedirect
3 from django.http import HttpResponseRedirect
4 from django.core.urlresolvers import reverse
4 from django.core.urlresolvers import reverse
5 from django.db.models import Q
6 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
5 from django.contrib import messages
7 from django.contrib import messages
6 from datetime import datetime
8 from datetime import datetime
9 import urllib
7
10
8 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm
11 from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm
9 from .forms import OperationSearchForm
12 from .forms import OperationSearchForm, FilterForm
10 from apps.cgs.forms import CGSConfigurationForm
13 from apps.cgs.forms import CGSConfigurationForm
11 from apps.jars.forms import JARSConfigurationForm
14 from apps.jars.forms import JARSConfigurationForm
12 from apps.usrp.forms import USRPConfigurationForm
15 from apps.usrp.forms import USRPConfigurationForm
@@ -21,6 +24,7 from apps.usrp.models import USRPConfiguration
21 from apps.abs.models import ABSConfiguration
24 from apps.abs.models import ABSConfiguration
22 from apps.rc.models import RCConfiguration, RCLine, RCLineType
25 from apps.rc.models import RCConfiguration, RCLine, RCLineType
23 from apps.dds.models import DDSConfiguration
26 from apps.dds.models import DDSConfiguration
27 from django.http.request import QueryDict
24
28
25 # Create your views here.
29 # Create your views here.
26
30
@@ -63,18 +67,16 def index(request):
63
67
64 def locations(request):
68 def locations(request):
65
69
66 locations = Location.objects.all().order_by('name')
70 page = request.GET.get('page')
67
71 order = ('name',)
68 keys = ['id', 'name', 'description']
72
73 kwargs = get_paginator(Location, page, order)
69
74
70 kwargs = {}
75 kwargs['keys'] = ['name', 'description']
71 kwargs['location_keys'] = keys[1:]
76 kwargs['title'] = 'Radar System'
72 kwargs['locations'] = locations
73 kwargs['title'] = 'Location'
74 kwargs['suptitle'] = 'List'
77 kwargs['suptitle'] = 'List'
75 kwargs['button'] = 'New Location'
76
78
77 return render(request, 'locations.html', kwargs)
79 return render(request, 'base_list.html', kwargs)
78
80
79
81
80 def location(request, id_loc):
82 def location(request, id_loc):
@@ -105,11 +107,11 def location_new(request):
105
107
106 kwargs = {}
108 kwargs = {}
107 kwargs['form'] = form
109 kwargs['form'] = form
108 kwargs['title'] = 'Location'
110 kwargs['title'] = 'Radar System'
109 kwargs['suptitle'] = 'New'
111 kwargs['suptitle'] = 'New'
110 kwargs['button'] = 'Create'
112 kwargs['button'] = 'Create'
111
113
112 return render(request, 'location_edit.html', kwargs)
114 return render(request, 'base_edit.html', kwargs)
113
115
114
116
115 def location_edit(request, id_loc):
117 def location_edit(request, id_loc):
@@ -132,7 +134,7 def location_edit(request, id_loc):
132 kwargs['suptitle'] = 'Edit'
134 kwargs['suptitle'] = 'Edit'
133 kwargs['button'] = 'Update'
135 kwargs['button'] = 'Update'
134
136
135 return render(request, 'location_edit.html', kwargs)
137 return render(request, 'base_edit.html', kwargs)
136
138
137
139
138 def location_delete(request, id_loc):
140 def location_delete(request, id_loc):
@@ -161,19 +163,15 def location_delete(request, id_loc):
161
163
162 def devices(request):
164 def devices(request):
163
165
164 devices = Device.objects.all().order_by('device_type__name')
166 page = request.GET.get('page')
165
167 order = ('device_type', 'name')
166 # keys = ['id', 'device_type__name', 'name', 'ip_address']
168
167 keys = ['id', 'name', 'ip_address', 'port_address', 'device_type']
169 kwargs = get_paginator(Device, page, order)
168
170 kwargs['keys'] = ['name', 'ip_address', 'port_address', 'device_type']
169 kwargs = {}
170 kwargs['device_keys'] = keys[1:]
171 kwargs['devices'] = devices#.values(*keys)
172 kwargs['title'] = 'Device'
171 kwargs['title'] = 'Device'
173 kwargs['suptitle'] = 'List'
172 kwargs['suptitle'] = 'List'
174 kwargs['button'] = 'New Device'
175
173
176 return render(request, 'devices.html', kwargs)
174 return render(request, 'base_list.html', kwargs)
177
175
178
176
179 def device(request, id_dev):
177 def device(request, id_dev):
@@ -208,7 +206,7 def device_new(request):
208 kwargs['suptitle'] = 'New'
206 kwargs['suptitle'] = 'New'
209 kwargs['button'] = 'Create'
207 kwargs['button'] = 'Create'
210
208
211 return render(request, 'device_edit.html', kwargs)
209 return render(request, 'base_edit.html', kwargs)
212
210
213
211
214 def device_edit(request, id_dev):
212 def device_edit(request, id_dev):
@@ -231,7 +229,7 def device_edit(request, id_dev):
231 kwargs['suptitle'] = 'Edit'
229 kwargs['suptitle'] = 'Edit'
232 kwargs['button'] = 'Update'
230 kwargs['button'] = 'Update'
233
231
234 return render(request, 'device_edit.html', kwargs)
232 return render(request, 'base_edit.html', kwargs)
235
233
236
234
237 def device_delete(request, id_dev):
235 def device_delete(request, id_dev):
@@ -260,18 +258,21 def device_delete(request, id_dev):
260
258
261 def campaigns(request):
259 def campaigns(request):
262
260
263 campaigns = Campaign.objects.all().order_by('start_date')
261 page = request.GET.get('page')
264
262 order = ('start_date',)
265 keys = ['id', 'name', 'start_date', 'end_date']
263 filters = request.GET.copy()
264
265 kwargs = get_paginator(Campaign, page, order, filters)
266
266
267 kwargs = {}
267 form = FilterForm(initial=request.GET, extra_fields=['range_date', 'tags','template'])
268 kwargs['campaign_keys'] = keys[1:]
268 kwargs['keys'] = ['name', 'start_date', 'end_date']
269 kwargs['campaigns'] = campaigns#.values(*keys)
270 kwargs['title'] = 'Campaign'
269 kwargs['title'] = 'Campaign'
271 kwargs['suptitle'] = 'List'
270 kwargs['suptitle'] = 'List'
272 kwargs['button'] = 'New Campaign'
271 kwargs['form'] = form
272 filters.pop('page', None)
273 kwargs['q'] = urllib.urlencode(filters)
273
274
274 return render(request, 'campaigns.html', kwargs)
275 return render(request, 'base_list.html', kwargs)
275
276
276
277
277 def campaign(request, id_camp):
278 def campaign(request, id_camp):
@@ -286,7 +287,7 def campaign(request, id_camp):
286 kwargs['campaign_keys'] = ['template', 'name', 'start_date', 'end_date', 'tags', 'description']
287 kwargs['campaign_keys'] = ['template', 'name', 'start_date', 'end_date', 'tags', 'description']
287
288
288 kwargs['experiments'] = experiments
289 kwargs['experiments'] = experiments
289 kwargs['experiment_keys'] = ['name', 'radar', 'start_time', 'end_time']
290 kwargs['experiment_keys'] = ['name', 'radar_system', 'start_time', 'end_time']
290
291
291 kwargs['title'] = 'Campaign'
292 kwargs['title'] = 'Campaign'
292 kwargs['suptitle'] = 'Details'
293 kwargs['suptitle'] = 'Details'
@@ -467,20 +468,22 def campaign_import(request, id_camp):
467
468
468 def experiments(request):
469 def experiments(request):
469
470
470 experiment_list = Experiment.objects.all()
471 page = request.GET.get('page')
471
472 order = ('location',)
472 keys = ['id', 'name', 'start_time', 'end_time']
473 filters = request.GET.copy()
473
474
474 kwargs = {}
475 kwargs = get_paginator(Experiment, page, order, filters)
475
476
476 kwargs['experiment_keys'] = keys[1:]
477 form = FilterForm(initial=request.GET, extra_fields=['tags','template'])
477 kwargs['experiments'] = experiment_list
478
478
479 kwargs['keys'] = ['name', 'radar_system', 'start_time', 'end_time']
479 kwargs['title'] = 'Experiment'
480 kwargs['title'] = 'Experiment'
480 kwargs['suptitle'] = 'List'
481 kwargs['suptitle'] = 'List'
481 kwargs['button'] = 'New Experiment'
482 kwargs['form'] = form
483 filters.pop('page', None)
484 kwargs['q'] = urllib.urlencode(filters)
482
485
483 return render(request, 'experiments.html', kwargs)
486 return render(request, 'base_list.html', kwargs)
484
487
485
488
486 def experiment(request, id_exp):
489 def experiment(request, id_exp):
@@ -491,7 +494,7 def experiment(request, id_exp):
491
494
492 kwargs = {}
495 kwargs = {}
493
496
494 kwargs['experiment_keys'] = ['template', 'radar', 'name', 'start_time', 'end_time']
497 kwargs['experiment_keys'] = ['template', 'radar_system', 'name', 'start_time', 'end_time']
495 kwargs['experiment'] = experiment
498 kwargs['experiment'] = experiment
496
499
497 kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
500 kwargs['configuration_keys'] = ['name', 'device__ip_address', 'device__port_address', 'device__status']
@@ -532,7 +535,8 def experiment_new(request, id_camp=None):
532 form = NewForm()
535 form = NewForm()
533
536
534 if request.method == 'POST':
537 if request.method == 'POST':
535 form = ExperimentForm(request.POST)
538 form = ExperimentForm(request.POST)
539 print form.data
536 if form.is_valid():
540 if form.is_valid():
537 experiment = form.save()
541 experiment = form.save()
538
542
@@ -792,21 +796,26 def parse_mask(l):
792 values.reverse()
796 values.reverse()
793
797
794 return int(''.join([str(x) for x in values]), 2)
798 return int(''.join([str(x) for x in values]), 2)
795
799
796
800
797 def dev_confs(request):
801 def dev_confs(request):
798
802
799 configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment')
800
801 kwargs = {}
802
803
803 kwargs['configuration_keys'] = ['device', 'name', 'experiment', 'type', 'programmed_date']
804 page = request.GET.get('page')
804 kwargs['configurations'] = configurations
805 order = ('type', 'device__device_type', 'experiment')
806 filters = request.GET.copy()
807
808 kwargs = get_paginator(Configuration, page, order, filters)
805
809
810 form = FilterForm(initial=request.GET, extra_fields=['tags','template'])
811 kwargs['keys'] = ['name', 'experiment', 'type', 'programmed_date']
806 kwargs['title'] = 'Configuration'
812 kwargs['title'] = 'Configuration'
807 kwargs['suptitle'] = 'List'
813 kwargs['suptitle'] = 'List'
814 kwargs['form'] = form
815 filters.pop('page', None)
816 kwargs['q'] = urllib.urlencode(filters)
808
817
809 return render(request, 'dev_confs.html', kwargs)
818 return render(request, 'base_list.html', kwargs)
810
819
811
820
812 def dev_conf(request, id_conf):
821 def dev_conf(request, id_conf):
@@ -874,8 +883,7 def dev_conf_new(request, id_exp=0, id_dev=0):
874 if conf.device.device_type.name=='jars':
883 if conf.device.device_type.name=='jars':
875 conf.add_parms_to_filter()
884 conf.add_parms_to_filter()
876
885
877 return redirect('url_dev_conf', id_conf=conf.pk)
886 return redirect('url_dev_conf', id_conf=conf.pk)
878
879
887
880 kwargs['id_exp'] = id_exp
888 kwargs['id_exp'] = id_exp
881 kwargs['form'] = form
889 kwargs['form'] = form
@@ -1172,6 +1180,44 def sidebar(**kwargs):
1172
1180
1173 return side_data
1181 return side_data
1174
1182
1183 def get_paginator(model, page, order, filters={}, n=10):
1184
1185 kwargs = {}
1186 query = Q()
1187 if isinstance(filters, QueryDict):
1188 filters = filters.dict()
1189 [filters.pop(key) for key in filters.keys() if filters[key] in ('', ' ')]
1190 filters.pop('page', None)
1191
1192 if 'start_date' in filters:
1193 filters['start_date__gte'] = filters.pop('start_date')
1194 if 'end_date' in filters:
1195 filters['start_date__lte'] = filters.pop('end_date')
1196 if 'tags' in filters:
1197 tags = filters.pop('tags')
1198 if 'tags' in model._meta.get_all_field_names():
1199 query = query | Q(tags__icontains=tags)
1200 if 'name' in model._meta.get_all_field_names():
1201 query = query | Q(name__icontains=tags)
1202 if 'location' in model._meta.get_all_field_names():
1203 query = query | Q(location__name__icontains=tags)
1204 if 'device' in model._meta.get_all_field_names():
1205 query = query | Q(device__name__icontains=tags)
1206
1207 object_list = model.objects.filter(query, **filters).order_by(*order)
1208 paginator = Paginator(object_list, n)
1209
1210 try:
1211 objects = paginator.page(page)
1212 except PageNotAnInteger:
1213 objects = paginator.page(1)
1214 except EmptyPage:
1215 objects = paginator.page(paginator.num_pages)
1216
1217 kwargs['objects'] = objects
1218 kwargs['offset'] = (int(page)-1)*n if page else 0
1219
1220 return kwargs
1175
1221
1176 def operation(request, id_camp=None):
1222 def operation(request, id_camp=None):
1177
1223
@@ -57,8 +57,8 DAT_CMDS = {
57
57
58 class RCConfiguration(Configuration):
58 class RCConfiguration(Configuration):
59
59
60 ipp = models.FloatField(verbose_name='Inter pulse period [Km]', validators=[MinValueValidator(1), MaxValueValidator(9000)], default=300)
60 ipp = models.FloatField(verbose_name='IPP [Km]', validators=[MinValueValidator(1), MaxValueValidator(9000)], default=300)
61 ntx = models.PositiveIntegerField(verbose_name='Number of TX', validators=[MinValueValidator(1), MaxValueValidator(300)], default=1)
61 ntx = models.PositiveIntegerField(verbose_name='Number of TX', validators=[MinValueValidator(1), MaxValueValidator(400)], default=1)
62 clock_in = models.FloatField(verbose_name='Clock in [MHz]', validators=[MinValueValidator(1), MaxValueValidator(80)], default=1)
62 clock_in = models.FloatField(verbose_name='Clock in [MHz]', validators=[MinValueValidator(1), MaxValueValidator(80)], default=1)
63 clock_divider = models.PositiveIntegerField(verbose_name='Clock divider', validators=[MinValueValidator(1), MaxValueValidator(256)], default=1)
63 clock_divider = models.PositiveIntegerField(verbose_name='Clock divider', validators=[MinValueValidator(1), MaxValueValidator(256)], default=1)
64 clock = models.FloatField(verbose_name='Clock Master [MHz]', blank=True, default=1)
64 clock = models.FloatField(verbose_name='Clock Master [MHz]', blank=True, default=1)
@@ -74,14 +74,6 class RCConfiguration(Configuration):
74 class Meta:
74 class Meta:
75 db_table = 'rc_configurations'
75 db_table = 'rc_configurations'
76
76
77
78 def __unicode__(self):
79
80 if self.mix:
81 return u'[RC MIXED]: {}'.format(self.name)
82 else:
83 return u'[RC]: {}'.format(self.name)
84
85 def get_absolute_url_plot(self):
77 def get_absolute_url_plot(self):
86 return reverse('url_plot_rc_pulses', args=[str(self.id)])
78 return reverse('url_plot_rc_pulses', args=[str(self.id)])
87
79
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now