From 6a2dde2f45c91b6614eabea25d8985a5acda7e44 2015-12-31 15:23:48 From: Miguel Urco Date: 2015-12-31 15:23:48 Subject: [PATCH] Campaign has been added to RadarSys Model git-svn-id: http://jro-dev.igp.gob.pe/svn/jro_hard/radarsys/trunk/webapp@27 aa17d016-51d5-4e8b-934c-7b2bbb1bbe71 --- diff --git a/apps/abs/forms.py b/apps/abs/forms.py new file mode 100644 index 0000000..38e0531 --- /dev/null +++ b/apps/abs/forms.py @@ -0,0 +1,8 @@ +from django import forms +from .models import ABSConfiguration + +class ABSConfigurationForm(forms.ModelForm): + + class Meta: + model = ABSConfiguration + fields = ('experiment',) diff --git a/apps/abs/urls.py b/apps/abs/urls.py index ab9b5a3..4522db7 100644 --- a/apps/abs/urls.py +++ b/apps/abs/urls.py @@ -1,5 +1,6 @@ from django.conf.urls import url urlpatterns = ( - + url(r'^(?P-?\d+)/$', 'apps.main.views.dev_conf', name='url_abs_conf'), + url(r'^(?P-?\d+)/edit/$', 'apps.main.views.edit_dev_conf', name='url_edit_abs_conf'), ) diff --git a/apps/cgs/forms.py b/apps/cgs/forms.py index 462942f..2cdff67 100644 --- a/apps/cgs/forms.py +++ b/apps/cgs/forms.py @@ -1,4 +1,5 @@ from django import forms +from apps.main.models import Device from .models import CGSConfiguration class CGSConfigurationForm(forms.ModelForm): @@ -7,16 +8,27 @@ class CGSConfigurationForm(forms.ModelForm): #request = kwargs.pop('request') super(CGSConfigurationForm, self).__init__(*args, **kwargs) + instance = getattr(self, 'instance', None) + + if instance and instance.pk: + + devices = Device.objects.filter(device_type__name='cgs') + items = devices.values('id', 'name', 'device_type__name', 'ip_address') + + self.fields['experiment'].widget.attrs['readonly'] = True + self.fields['device'].widget.choices = [(item['id'], '[%s]: %s | %s' % (item['device_type__name'], item['name'], item['ip_address'])) for item in items] + def clean(self): - # Custom validation to force an integer when type of unit = "Unit" - form_data = self.cleaned_data - if (form_data['freq0'] or form_data['freq1'] or form_data['freq2'] or form_data['freq3'] < 0): - raise forms.ValidationError("Please introduce positive Number") - - return form_data + return +# # Custom validation to force an integer when type of unit = "Unit" +# form_data = self.cleaned_data +# if (form_data['freq0'] or form_data['freq1'] or form_data['freq2'] or form_data['freq3'] < 0): +# raise forms.ValidationError("Please introduce positive Number") +# +# return form_data class Meta: model = CGSConfiguration #exclude = ('freqs', 'clk_in', 'mult','div',) # exclude = ('freqs',) - fields = ('freq0', 'freq1', 'freq2', 'freq3') + fields = ('experiment', 'device', 'freq0', 'freq1', 'freq2', 'freq3') diff --git a/apps/cgs/templates/cgs_conf.html b/apps/cgs/templates/cgs_conf.html new file mode 100644 index 0000000..99944d7 --- /dev/null +++ b/apps/cgs/templates/cgs_conf.html @@ -0,0 +1 @@ +{% extends "dev_conf.html" %} \ No newline at end of file diff --git a/apps/cgs/templates/conf_cgs.html b/apps/cgs/templates/conf_cgs.html deleted file mode 100644 index a89fbe3..0000000 --- a/apps/cgs/templates/conf_cgs.html +++ /dev/null @@ -1 +0,0 @@ -{% extends "conf_device.html" %} \ No newline at end of file diff --git a/apps/cgs/views.py b/apps/cgs/views.py index fd94c46..197e963 100644 --- a/apps/cgs/views.py +++ b/apps/cgs/views.py @@ -7,17 +7,13 @@ from apps.main.models import Device # Create your views here. def configurate_frequencies(request, id=0): - kwargs = {} + if id: - - conf = CGSConfiguration.objects.get(pk=id) - experiment = conf.experiment - conf = CGSConfiguration.objects.get(pk=id) devices = Device.objects.filter(configuration__experiment=conf.experiment) - devices = devices.values('configuration__id', 'device_type__alias', 'device_type__name') + devices = devices.values('configuration__id', 'device_type__name') for device in devices: - if device['device_type__alias']=='cgs': + if device['device_type__name']=='cgs': device['active'] = 'active' break @@ -31,10 +27,13 @@ def configurate_frequencies(request, id=0): 'device': device, 'devices':devices, 'title': ('YAP'), - 'experiment': experiment, + 'experiment': conf.experiment, } + data['dev_conf'] = conf + data['dev_conf_keys'] = ['experiment', 'device'] + if request.method == 'POST': form = CGSConfigurationForm(request.POST) #, initial={'purchase_request':purchase_request}) if form.is_valid(): @@ -49,10 +48,6 @@ def configurate_frequencies(request, id=0): else: form = CGSConfigurationForm() - - return render_to_response('conf_cgs.html', data, context_instance=RequestContext(request)) - #return render_to_response("index.html", kwargs, context_instance=RequestContext(request)) - #return_to_response('index.html', {'title': 'Configura','form': form}, context_instance=RequestContext(request)) - + return render(request, 'cgs_conf.html', data) diff --git a/apps/dds/forms.py b/apps/dds/forms.py index 3af86fa..f03a988 100644 --- a/apps/dds/forms.py +++ b/apps/dds/forms.py @@ -1,24 +1,36 @@ from django import forms +from apps.main.models import Device from .models import DDSConfiguration from django.core.validators import MinValueValidator, MaxValueValidator class DDSConfigurationForm(forms.ModelForm): - freq0 = forms.FloatField(label='Frequency', validators=[MinValueValidator(0e6), MaxValueValidator(150e6)]) - pha0 = forms.FloatField(label='Phase', validators=[MinValueValidator(0), MaxValueValidator(360)]) + frequency = forms.FloatField(label='Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)]) + phase = forms.FloatField(label='Phase (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)]) - freq1 = forms.FloatField(label='Modulated Frequency', validators=[MinValueValidator(5e6), MaxValueValidator(150e6)], required=False) - pha1 = forms.FloatField(label='Modulated Phase', validators=[MinValueValidator(0), MaxValueValidator(360)], required=False) + frequency_mod = forms.FloatField(label='Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], required=False) + phase_mod = forms.FloatField(label='Phase (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], required=False) def __init__(self, *args, **kwargs): #request = kwargs.pop('request') super(DDSConfigurationForm, self).__init__(*args, **kwargs) - + + instance = getattr(self, 'instance', None) + + if instance and instance.pk: + + devices = Device.objects.filter(device_type__name='dds') + items = devices.values('id', 'name', 'device_type__name', 'ip_address') + + self.fields['experiment'].widget.attrs['readonly'] = True + self.fields['device'].widget.choices = [(item['id'], '[%s]: %s | %s' % (item['device_type__name'], item['name'], item['ip_address'])) for item in items] + + def clean(self): # Custom validation to force an integer when type of unit = "Unit" return class Meta: model = DDSConfiguration - fields = ('clock', 'multiplier', 'modulation') + fields = ('experiment', 'device', 'clock', 'multiplier', 'modulation') diff --git a/apps/dds/models.py b/apps/dds/models.py index 8de218f..e58706c 100644 --- a/apps/dds/models.py +++ b/apps/dds/models.py @@ -4,18 +4,28 @@ from apps.main.models import Configuration from django.core.validators import MinValueValidator, MaxValueValidator +MOD_TYPES = ( + (None, 'Select a modulation type'), + (0, 'No modulation'), + (1, 'ASK'), + (2, 'FSK'), + (3, 'PSK'), +) + class DDSConfiguration(Configuration): - clock = models.FloatField(verbose_name='Clock Master',validators=[MinValueValidator(5e6), MaxValueValidator(50e6)], blank=True, null=True) - multiplier = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(0), MaxValueValidator(20)], default=4) - modulation = models.PositiveIntegerField(verbose_name='Modulation',validators=[MinValueValidator(0), MaxValueValidator(3)], default=0) - frequency0 = models.PositiveIntegerField(verbose_name='Frequency 0',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True) - frequency1 = models.PositiveIntegerField(verbose_name='Frequency 1',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True) - phase0 = models.PositiveIntegerField(verbose_name='Phase 0',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)], blank=True, null=True) - phase1 = models.PositiveIntegerField(verbose_name='Phase 1',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)], blank=True, null=True) + clock = models.FloatField(verbose_name='Clock Master (MHz)',validators=[MinValueValidator(5), MaxValueValidator(50)], blank=True, null=True) + multiplier = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(1), MaxValueValidator(20)], default=4) + freq_reg = models.PositiveIntegerField(verbose_name='Frequency (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True) + phase_reg = models.PositiveIntegerField(verbose_name='Phase (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)], blank=True, null=True) + amplitude_chA = models.PositiveIntegerField(verbose_name='Amplitude CHA',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True) amplitude_chB = models.PositiveIntegerField(verbose_name='Amplitude CHB',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True) + modulation = models.PositiveIntegerField(choices = MOD_TYPES, default = 0) + freq_reg_mod = models.PositiveIntegerField(verbose_name='Frequency Mod (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**32-1)], blank=True, null=True) + phase_reg_mod = models.PositiveIntegerField(verbose_name='Phase Mod (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)], blank=True, null=True) + class Meta: db_table = 'dds_configurations' \ No newline at end of file diff --git a/apps/dds/templates/conf_dds.html b/apps/dds/templates/conf_dds.html deleted file mode 100644 index a89fbe3..0000000 --- a/apps/dds/templates/conf_dds.html +++ /dev/null @@ -1 +0,0 @@ -{% extends "conf_device.html" %} \ No newline at end of file diff --git a/apps/dds/templates/dds_conf.html b/apps/dds/templates/dds_conf.html new file mode 100644 index 0000000..982ca82 --- /dev/null +++ b/apps/dds/templates/dds_conf.html @@ -0,0 +1,11 @@ +{% extends "dev_conf.html" %} + +{% block extra-js%} + +{% endblock %} \ No newline at end of file diff --git a/apps/dds/templates/dds_conf_edit.html b/apps/dds/templates/dds_conf_edit.html new file mode 100644 index 0000000..029ea49 --- /dev/null +++ b/apps/dds/templates/dds_conf_edit.html @@ -0,0 +1 @@ +{% extends "dev_conf_edit.html" %} \ No newline at end of file diff --git a/apps/dds/urls.py b/apps/dds/urls.py index 28ad4e1..a057bb6 100644 --- a/apps/dds/urls.py +++ b/apps/dds/urls.py @@ -1,6 +1,6 @@ from django.conf.urls import url urlpatterns = ( - url(r'^(?P-?\d+)/$', 'apps.dds.views.config_dds', name='url_conf_dds'), - url(r'^(?P-?\d+)/edit/$', 'apps.dds.views.config_dds_edit', name='url_conf_dds_edit'), + url(r'^(?P-?\d+)/$', 'apps.dds.views.dds_conf', name='url_dds_conf'), + url(r'^(?P-?\d+)/edit/$', 'apps.dds.views.edit_dds_conf', name='url_edit_dds_conf'), ) diff --git a/apps/dds/views.py b/apps/dds/views.py index 39d5a23..6914fb2 100644 --- a/apps/dds/views.py +++ b/apps/dds/views.py @@ -2,56 +2,48 @@ from django.shortcuts import redirect, render -from apps.main.models import Device from .models import DDSConfiguration from .forms import DDSConfigurationForm # Create your views here. -def config_dds(request, id_conf): +def dds_conf(request, id_conf): - if id_conf: - - conf = DDSConfiguration.objects.get(pk=id_conf) - form = DDSConfigurationForm(instance=conf) - experiment = conf.experiment - - devices = Device.objects.filter(configuration__experiment=experiment) - - deviceList = devices.values('configuration__id', 'device_type__alias', 'device_type__name') - - for thisDevice in deviceList: - if thisDevice['configuration__id'] == conf.id: - thisDevice['active'] = 'active' - break - - device = thisDevice - - else: - form = DDSConfigurationForm() - device = '' - experiment = '' - devices = {} - - kwargs = { - 'form': form, - 'device': device, - 'experiment': experiment, - 'devices': deviceList - } - -# return render_to_response('conf_dds.html', kwargs, context_instance=RequestContext(request)) - return render(request, 'conf_dds.html', kwargs) + dev_conf = DDSConfiguration.objects.get(pk=id_conf) -def config_dds_edit(request, id_conf): + kwargs = {} + kwargs['dev_conf'] = dev_conf + kwargs['dev_conf_keys'] = ['experiment', 'device', + 'clock', 'multiplier', + 'freq_reg', 'phase_reg', + 'amplitude_chA', 'amplitude_chB', + 'modulation', + 'freq_reg_mod', 'phase_reg_mod'] - if request.method=='POST': + kwargs['title'] = 'DDS Configuration' + kwargs['suptitle'] = 'Details' + + kwargs['button'] = 'Edit Configuration' + + return render(request, 'dds_conf.html', kwargs) + +def edit_dds_conf(request, id_conf): + + dev_conf = DDSConfiguration.objects.get(pk=id_conf) + + if request.method=='GET': + form = DDSConfigurationForm(instance=dev_conf) - conf = DDSConfiguration.objects.get(pk=id_conf) - form = DDSConfigurationForm(instance=conf) + if request.method=='POST': + form = DDSConfigurationForm(request.POST, instance=dev_conf) if form.is_valid(): form.save() - else: - raise ValueError, "Error" - - return redirect('url_conf_dds', id_conf=id_conf) \ No newline at end of file + return redirect('url_dds_conf', id_conf=id_conf) + + kwargs = {} + kwargs['form'] = form + kwargs['title'] = 'Device Configuration' + kwargs['suptitle'] = 'Edit' + kwargs['button'] = 'Update' + + return render(request, 'dds_conf_edit.html', kwargs) \ No newline at end of file diff --git a/apps/jars/forms.py b/apps/jars/forms.py index 7790548..340018c 100644 --- a/apps/jars/forms.py +++ b/apps/jars/forms.py @@ -8,7 +8,7 @@ class JARSConfigurationForm(forms.ModelForm): instance = getattr(self, 'instance', None) if instance and instance.pk: self.fields['experiment'].widget.attrs['disabled'] = True - self.fields['device'].widget.choices = [(item['id'], '%s %s | %s' % (item['device_type__alias'], item['model'], item['ip_address'])) for item in Device.objects.filter(device_type__alias='jars').values('id', 'device_type__alias', 'model', 'ip_address')] + self.fields['device'].widget.choices = [(item['id'], '%s | %s' % (item['device_type__name'], item['ip_address'])) for item in Device.objects.filter(device_type__name='jars').values('id', 'device_type__name', 'ip_address')] class Meta: model = JARSConfiguration diff --git a/apps/jars/views.py b/apps/jars/views.py index 18928af..4e2a889 100644 --- a/apps/jars/views.py +++ b/apps/jars/views.py @@ -11,9 +11,9 @@ def jars_config(request, id): if id: conf = JARSConfiguration.objects.get(pk=id) devices = Device.objects.filter(configuration__experiment=conf.experiment) - devices = devices.values('configuration__id', 'device_type__alias', 'device_type__name') + devices = devices.values('configuration__id', 'device_type__name') for device in devices: - if device['device_type__alias']=='jars': + if device['device_type__name']=='jars': device['active'] = 'active' form = JARSConfigurationForm(instance=conf) else: diff --git a/apps/main/admin.py b/apps/main/admin.py index 76f4448..858da18 100644 --- a/apps/main/admin.py +++ b/apps/main/admin.py @@ -1,8 +1,8 @@ from django.contrib import admin -from .models import Device, DeviceType, Experiment +from .models import Device, DeviceType, Experiment, Campaign # Register your models here. - +admin.site.register(Campaign) admin.site.register(Experiment) admin.site.register(Device) admin.site.register(DeviceType) \ No newline at end of file diff --git a/apps/main/forms.py b/apps/main/forms.py index 43bdad9..941069c 100644 --- a/apps/main/forms.py +++ b/apps/main/forms.py @@ -1,7 +1,7 @@ from django import forms from django.utils.safestring import mark_safe -from .models import DeviceType, Device, Experiment +from .models import DeviceType, Device, Experiment, Campaign, Configuration def add_empty_choice(choices, pos=0, label='-----'): if len(choices)>0: @@ -17,21 +17,44 @@ class DatepickerWidget(forms.widgets.TextInput): html = '
'+input_html+'
' return mark_safe(html) -class NewExperimentForm(forms.ModelForm): +class TimepickerWidget(forms.widgets.TextInput): + def render(self, name, value, attrs=None): + input_html = super(TimepickerWidget, self).render(name, value, attrs) + html = '
'+input_html+'
' + return mark_safe(html) + +class CampaignForm(forms.ModelForm): def __init__(self, *args, **kwargs): - super(NewExperimentForm, self).__init__(*args, **kwargs) + super(CampaignForm, self).__init__(*args, **kwargs) self.fields['start_date'].widget = DatepickerWidget(self.fields['start_date'].widget.attrs) self.fields['end_date'].widget = DatepickerWidget(self.fields['end_date'].widget.attrs) class Meta: + model = Campaign + fields = ['name', 'start_date', 'end_date', 'tags', 'description', 'template'] + +class ExperimentForm(forms.ModelForm): + def __init__(self, *args, **kwargs): + super(ExperimentForm, self).__init__(*args, **kwargs) + self.fields['start_time'].widget = TimepickerWidget(self.fields['start_time'].widget.attrs) + self.fields['end_time'].widget = TimepickerWidget(self.fields['end_time'].widget.attrs) + + self.fields['campaign'].widget.attrs['readonly'] = True + + class Meta: model = Experiment - fields = ['name', 'alias', 'start_date', 'end_date'] + fields = ['campaign', 'name', 'start_time', 'end_time'] -class NewDeviceForm(forms.ModelForm): +class DeviceForm(forms.ModelForm): class Meta: model = Device exclude = ['status'] +class ConfigurationForm(forms.ModelForm): + class Meta: + model = Configuration + fields = ['experiment', 'device'] + class DeviceTypeForm(forms.Form): device_type = forms.ChoiceField(choices=add_empty_choice(DeviceType.objects.all().order_by('name').values_list('id', 'name'))) diff --git a/apps/main/models.py b/apps/main/models.py index 6aac9ab..ba9e6d5 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -7,63 +7,89 @@ STATES = ( (1, 'Active'), ) -# Create your models here. +DEV_TYPES = ( + ('', 'Select a device type'), + ('rc', 'Radar Controller'), + ('dds', 'Direct Digital Synthesizer'), + ('jars', 'Jicamarca Radar System'), + ('usrp', 'Universal Software Radio Peripheral'), + ('cgs', 'Clock Generator System'), + ('abs', 'Automatic Beam Switching'), +) +# Create your models here. + class DeviceType(models.Model): - name = models.CharField(max_length=40) - alias = models.CharField(max_length=40) - info = models.TextField(blank=True, null=True) - status = models.PositiveSmallIntegerField(default=1, choices=STATES) + name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc') + + description = models.TextField(blank=True, null=True) + +# info = models.TextField(blank=True, null=True) +# status = models.PositiveSmallIntegerField(default=1, choices=STATES) class Meta: - db_table = 'device_types' + db_table = 'db_device_types' def __unicode__(self): - return u'%s' % self.alias + return u'%s' % self.name class Device(models.Model): device_type = models.ForeignKey(DeviceType) name = models.CharField(max_length=40, default='') - model = models.CharField(max_length=40, default='') - serial_number = models.CharField(max_length=40, default='') ip_address = models.GenericIPAddressField(protocol='IPv4', default='0.0.0.0') - mac_address = models.CharField(max_length = 20, null=True, blank=True) + port_address = models.PositiveSmallIntegerField(default=2000) description = models.TextField(blank=True, null=True) - status = models.PositiveSmallIntegerField(default=1, choices=STATES) + +# serial_number = models.CharField(max_length=40, default='') +# mac_address = models.CharField(max_length = 20, null=True, blank=True) +# status = models.PositiveSmallIntegerField(default=1, choices=STATES) class Meta: - db_table = 'devices' + db_table = 'db_devices' def __unicode__(self): - return u'%s - %s' % (self.device_type, self.ip_address) + return u'[%s]: %s | %s' % (self.device_type.name, self.name, self.ip_address) + +class Campaign(models.Model): + + name = models.CharField(max_length=40, unique=True) + start_date = models.DateTimeField(blank=True, null=True) + end_date = models.DateTimeField(blank=True, null=True) + tags = models.CharField(max_length=40) + description = models.TextField(blank=True, null=True) + template = models.BooleanField(default=False) + + class Meta: + db_table = 'db_campaigns' + + def __unicode__(self): + return u'%s: %s - %s' % (self.name, self.start_date.date(), self.end_date.date()) class Experiment(models.Model): - name = models.CharField(max_length=40) - alias = models.CharField(max_length=40) - start_date = models.DateTimeField() - end_date = models.DateTimeField() - template = models.BooleanField(default=False) - status = models.PositiveSmallIntegerField(default=1, choices=STATES) + campaign = models.ForeignKey(Campaign) + name = models.CharField(max_length=40, default='') + start_time = models.TimeField(default='00:00:00') + end_time = models.TimeField(default='23:59:59') class Meta: - db_table = 'experiments' + db_table = 'db_experiments' def __unicode__(self): - return u'%s: %s - %s' % (self.alias, self.start_date, self.end_date) + return u'[%s]: %s: %s - %s' % (self.campaign.name, self.name, self.start_time, self.end_time) class Configuration(PolymorphicModel): experiment = models.ForeignKey(Experiment) device = models.ForeignKey(Device) - parameters = models.TextField(default='{}') - status = models.PositiveSmallIntegerField(default=1, choices=STATES) +# parameters = models.TextField(default='{}') +# status = models.PositiveSmallIntegerField(default=1, choices=STATES) class Meta: - db_table = 'configurations' + db_table = 'db_configurations' def __unicode__(self): - return u'%s - %s' % (self.experiment.alias, self.device) + return u'%s [%s]' % (self.experiment.name, self.device.name) \ No newline at end of file diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index 83aebe3..a3ad338 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -36,10 +36,14 @@ {% endif %} @@ -16,7 +16,7 @@
{% for item in devices %} - {{item.device_type__alias}} + {{item.device_type__alias}} {% endfor %}
diff --git a/apps/main/urls.py b/apps/main/urls.py new file mode 100644 index 0000000..6515747 --- /dev/null +++ b/apps/main/urls.py @@ -0,0 +1,25 @@ +from django.conf.urls import url + +urlpatterns = ( + + url(r'^device/add/$', 'apps.main.views.add_device', name='url_add_device'), + url(r'^device/$', 'apps.main.views.devices', name='url_devices'), + url(r'^device/(?P-?\d+)/$', 'apps.main.views.device', name='url_device'), + url(r'^device/(?P-?\d+)/edit/$', 'apps.main.views.edit_device', name='url_edit_device'), + + url(r'^campaign/add/$', 'apps.main.views.add_campaign', name='url_add_campaign'), + url(r'^campaign/$', 'apps.main.views.campaigns', name='url_campaigns'), + url(r'^campaign/(?P-?\d+)/$', 'apps.main.views.campaign', name='url_campaign'), + url(r'^campaign/(?P-?\d+)/edit/$', 'apps.main.views.edit_campaign', name='url_edit_campaign'), + + url(r'^campaign/(?P-?\d+)/add_experiment/$', 'apps.main.views.add_experiment', name='url_add_experiment'), + url(r'^experiment/$', 'apps.main.views.experiments', name='url_experiments'), + url(r'^experiment/(?P-?\d+)/$', 'apps.main.views.experiment', name='url_experiment'), + url(r'^experiment/(?P-?\d+)/edit/$', 'apps.main.views.edit_experiment', name='url_edit_experiment'), + + url(r'^experiment/(?P-?\d+)/add_dev_conf/$', 'apps.main.views.add_dev_conf', name='url_add_dev_conf'), + url(r'^dev_conf/$', 'apps.main.views.dev_confs', name='url_dev_confs'), + url(r'^dev_conf/(?P-?\d+)/$', 'apps.main.views.dev_conf', name='url_dev_conf'), + url(r'^dev_conf/(?P-?\d+)/edit/$', 'apps.main.views.edit_dev_conf', name='url_edit_dev_conf'), + +) diff --git a/apps/main/views.py b/apps/main/views.py index 008280b..8f6708b 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -1,133 +1,494 @@ -from django.shortcuts import redirect, render_to_response -from django.template import RequestContext -from .forms import NewExperimentForm, NewDeviceForm, DeviceTypeForm +from django.shortcuts import render, redirect -from .models import Experiment, Device, Configuration +from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm +from apps.cgs.forms import CGSConfigurationForm +from apps.jars.forms import JARSConfigurationForm +from apps.usrp.forms import USRPConfigurationForm +from apps.abs.forms import ABSConfigurationForm +from apps.rc.forms import RCConfigurationForm +from apps.dds.forms import DDSConfigurationForm + +from .models import Campaign, Experiment, Device, Configuration from apps.cgs.models import CGSConfiguration from apps.jars.models import JARSConfiguration -#from apps.usrp.models import USRPConfiguration +from apps.usrp.models import USRPConfiguration from apps.abs.models import ABSConfiguration from apps.rc.models import RCConfiguration from apps.dds.models import DDSConfiguration # Create your views here. -MODELS = { +CONF_FORMS = { + 'rc': RCConfigurationForm, + 'dds': DDSConfigurationForm, + 'jars': JARSConfigurationForm, + 'cgs': CGSConfigurationForm, + 'abs': ABSConfigurationForm, + 'usrp': USRPConfigurationForm, +} + +CONF_MODELS = { 'rc': RCConfiguration, 'dds': DDSConfiguration, 'jars': JARSConfiguration, 'cgs': CGSConfiguration, 'abs': ABSConfiguration, + 'usrp': USRPConfiguration, } def index(request): kwargs = {} - return render_to_response("index.html", kwargs, context_instance=RequestContext(request)) + return render(request, 'index.html', kwargs) + +def devices(request): + + devices = Device.objects.all().order_by('device_type__name') + + keys = ['id', 'device_type__name', 'name', 'ip_address'] + + kwargs = {} + kwargs['device_keys'] = keys[1:] + kwargs['devices'] = devices.values(*keys) + kwargs['title'] = 'Device' + kwargs['suptitle'] = 'List' + kwargs['button'] = 'New Device' + + return render(request, 'devices.html', kwargs) -def experiment(request, id_exp=0, id_dev_type=0): +def device(request, id_dev): + + device = Device.objects.get(pk=id_dev) + +# form = DeviceForm(instance=device) + kwargs = {} - if id_exp: - experiment = Experiment.objects.get(pk=id_exp) - devices = Device.objects.filter(configuration__experiment=experiment) - kwargs['experiment'] = experiment - kwargs['experiment_keys'] = ['name', 'alias', 'start_date', 'end_date'] + kwargs['device'] = device + kwargs['device_keys'] = ['device_type', 'name', 'ip_address', 'port_address', 'description'] + + kwargs['title'] = 'Device' + kwargs['suptitle'] = 'Details' + +# kwargs['form'] = form + kwargs['button'] = 'Add Device' + + return render(request, 'device.html', kwargs) + +def add_device(request): + + if request.method == 'GET': + form = DeviceForm() + + if request.method == 'POST': + form = DeviceForm(request.POST) - form = NewExperimentForm(instance=experiment) + if form.is_valid(): + form.save() + return redirect('url_devices') - if id_dev_type: - subform = DeviceTypeForm(initial={'device_type':id_dev_type}) - kwargs['keys'] = ['model', 'ip_address', 'status'] - keys = ['id']+kwargs['keys'] - kwargs['items'] = Device.objects.filter(device_type=id_dev_type).values(*keys) - else: - subform = DeviceTypeForm() + kwargs = {} + kwargs['form'] = form + kwargs['title'] = 'Device' + kwargs['suptitle'] = 'New' + kwargs['button'] = 'Create' - kwargs['form'] = form - kwargs['subform'] = subform - kwargs['device_keys'] = ['device_type__name', 'model', 'ip_address', 'status'] - kwargs['devices'] = devices.values('device_type__name', 'model', 'ip_address', 'status', 'device_type__alias', 'configuration__id') - kwargs['suptitle'] = 'Detail' - else: - experiments = Experiment.objects.all().order_by('start_date') - kwargs['keys'] = ['name', 'start_date', 'end_date'] - keys = ['id']+kwargs['keys'] - kwargs['items'] = experiments.values(*keys) - kwargs['suptitle'] = 'List' - kwargs['button'] = 'Add Experiment' - - kwargs['id_dev_type'] = id_dev_type - kwargs['id_exp'] = id_exp - return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request)) + return render(request, 'device_edit.html', kwargs) -def edit_experiment(request, id_exp): +def edit_device(request, id_dev): + + device = Device.objects.get(pk=id_dev) + + if request.method=='GET': + form = DeviceForm(instance=device) + if request.method=='POST': - experiment = Experiment.objects.get(pk=id_exp) - form = NewExperimentForm(request.POST, instance=experiment) + form = DeviceForm(request.POST, instance=device) + if form.is_valid(): form.save() - return redirect('experiment', id_exp=id_exp) + return redirect('url_devices') + + kwargs = {} + kwargs['form'] = form + kwargs['title'] = 'Device' + kwargs['suptitle'] = 'Edit' + kwargs['button'] = 'Update' + + return render(request, 'device_edit.html', kwargs) -def experiment_add_device(request, id_exp): +def campaigns(request): + + campaigns = Campaign.objects.all().order_by('start_date') + + keys = ['id', 'name', 'start_date', 'end_date'] + + kwargs = {} + kwargs['campaign_keys'] = keys[1:] + kwargs['campaigns'] = campaigns.values(*keys) + kwargs['title'] = 'Campaign' + kwargs['suptitle'] = 'List' + kwargs['button'] = 'New Campaign' + + return render(request, 'campaigns.html', kwargs) + +def campaign(request, id_camp): + + campaign = Campaign.objects.get(pk=id_camp) + experiments = Experiment.objects.filter(campaign=campaign) + + form = CampaignForm(instance=campaign) + + kwargs = {} + kwargs['campaign'] = campaign + kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description'] + + keys = ['id', 'name', 'start_time', 'end_time'] + + kwargs['experiment_keys'] = keys[1:] + kwargs['experiments'] = experiments.values(*keys) + + kwargs['title'] = 'Campaign' + kwargs['suptitle'] = 'Details' + + kwargs['form'] = form + kwargs['button'] = 'Add Experiment' + + return render(request, 'campaign.html', kwargs) + +def add_campaign(request): + + if request.method == 'GET': + form = CampaignForm() + + if request.method == 'POST': + form = CampaignForm(request.POST) + + if form.is_valid(): + campaign = form.save() + return redirect('url_campaign', id_camp=campaign.id) + + kwargs = {} + kwargs['form'] = form + kwargs['title'] = 'Campaign' + kwargs['suptitle'] = 'New' + kwargs['button'] = 'Create' + + return render(request, 'campaign_edit.html', kwargs) + +def edit_campaign(request, id_camp): + + campaign = Campaign.objects.get(pk=id_camp) + + if request.method=='GET': + form = CampaignForm(instance=campaign) + if request.method=='POST': - experiment = Experiment.objects.get(pk=id_exp) - device = Device.objects.get(pk=request.POST['device']) - model = MODELS[device.device_type.alias] - conf = model(experiment=experiment, device=device) - conf.save() - return redirect('experiment', id_exp=id_exp) + form = CampaignForm(request.POST, instance=campaign) + + if form.is_valid(): + form.save() + return redirect('url_campaign', id_camp=id_camp) + + kwargs = {} + kwargs['form'] = form + kwargs['title'] = 'Campaign' + kwargs['suptitle'] = 'Edit' + kwargs['button'] = 'Update' + + return render(request, 'campaign_edit.html', kwargs) -def add_experiment(request): +def experiments(request): + + campaigns = Experiment.objects.all().order_by('start_time') + + keys = ['id', 'campaign__name', 'name', 'start_time', 'end_time'] + kwargs = {} + + kwargs['experiment_keys'] = keys[1:] + kwargs['experiments'] = campaigns.values(*keys) + + kwargs['title'] = 'Experiment' + kwargs['suptitle'] = 'List' + kwargs['button'] = 'New Experiment' + + return render(request, 'experiments.html', kwargs) + +def experiment(request, id_exp): + + experiment = Experiment.objects.get(pk=id_exp) + campaign = Campaign.objects.get(pk = experiment.campaign.id) + configurations = Configuration.objects.filter(experiment=experiment) + +# form = ExperimentForm(instance=experiment) + + kwargs = {} + + kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description'] + kwargs['campaign'] = campaign + + kwargs['experiment_keys'] = ['campaign', 'name', 'start_time', 'end_time'] + kwargs['experiment'] = experiment + + keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address'] + + kwargs['configuration_keys'] = keys[1:] + kwargs['configurations'] = configurations.values(*keys) + + kwargs['title'] = 'Experiment' + kwargs['suptitle'] = 'Details' + +# kwargs['form'] = form + kwargs['button'] = 'Add Device' + + return render(request, 'experiment.html', kwargs) + +def add_experiment(request, id_camp=0): + + if request.method == 'GET': + form = ExperimentForm(initial={'campaign':id_camp}) + if request.method == 'POST': - form = NewExperimentForm(request.POST) + form = ExperimentForm(request.POST, initial={'campaign':id_camp}) + if form.is_valid(): experiment = form.save() - return redirect('experiment', id_exp=experiment.id) - else: - form = NewExperimentForm() - kwargs['form_new'] = form + return redirect('url_experiment', id_exp=experiment.id) + + kwargs = {} + kwargs['form'] = form kwargs['title'] = 'Experiment' kwargs['suptitle'] = 'New' - kwargs['id_exp'] = 0 - return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request)) - -def device(request, id_dev=0): - kwargs = {} - if id_dev: - device = Device.objects.get(pk=id_dev) - kwargs['form'] = NewDeviceForm(instance=device) - kwargs['action'] = 'edit/' - kwargs['button'] = 'Update' - kwargs['suptitle'] = 'Detail' - else: - devices = Device.objects.all() - kwargs['keys'] = ['device_type__name', 'model', 'serial_number', 'ip_address', 'status'] - keys = ['id']+kwargs['keys'] - kwargs['items'] = devices.values(*keys) - kwargs['suptitle'] = 'List' - kwargs['button'] = 'Add Device' - return render_to_response("device.html", kwargs, context_instance=RequestContext(request)) + kwargs['button'] = 'Create' + + return render(request, 'experiment_edit.html', kwargs) -def edit_device(request, id_dev): +def edit_experiment(request, id_exp): + + experiment = Experiment.objects.get(pk=id_exp) + + if request.method == 'GET': + form = ExperimentForm(instance=experiment) + if request.method=='POST': - device = Device.objects.get(pk=id_dev) - form = NewDeviceForm(request.POST, instance=device) + form = ExperimentForm(request.POST, instance=experiment) + if form.is_valid(): - form.save() - return redirect('devices') + experiment = form.save() + return redirect('url_experiment', id_exp=experiment.id) + + kwargs = {} + kwargs['form'] = form + kwargs['title'] = 'Experiment' + kwargs['suptitle'] = 'Edit' + kwargs['button'] = 'Update' + + return render(request, 'experiment_edit.html', kwargs) -def add_device(request): +def dev_confs(request): + + configurations = Configuration.objects.all().order_by('device__device_type') + + keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name'] + + kwargs = {} + + kwargs['configuration_keys'] = keys[1:] + kwargs['configurations'] = configurations.values(*keys) + + kwargs['title'] = 'Configurations' + kwargs['suptitle'] = 'List' + kwargs['button'] = 'New Configuration' + + return render(request, 'dev_confs.html', kwargs) + +def dev_conf(request, id_conf): + + conf = Configuration.objects.get(pk=id_conf) + + DevConfModel = CONF_MODELS[conf.device.device_type.name] + dev_conf = DevConfModel.objects.get(pk=id_conf) + kwargs = {} + kwargs['dev_conf'] = dev_conf + kwargs['dev_conf_keys'] = ['experiment', 'device'] + + kwargs['title'] = 'Configuration' + kwargs['suptitle'] = 'Details' + + kwargs['button'] = 'Edit Configuration' + + return render(request, 'dev_conf.html', kwargs) + +def add_dev_conf(request, id_exp=0): + + if request.method == 'GET': + form = ConfigurationForm(initial={'experiment':id_exp}) + if request.method == 'POST': - form = NewDeviceForm(request.POST) + form = ConfigurationForm(request.POST) + if form.is_valid(): - form.save() - return redirect('devices') - else: - form = NewDeviceForm() + experiment = Experiment.objects.get(pk=request.POST['experiment']) + device = Device.objects.get(pk=request.POST['device']) + + exp_devices = Device.objects.filter(configuration__experiment=experiment) + + if device.id not in exp_devices.values('id',): + + DevConfModel = CONF_MODELS[device.device_type.name] + conf = DevConfModel(experiment=experiment, device=device) + conf.save() + + return redirect('url_experiment', id_exp=experiment.id) + + kwargs = {} kwargs['form'] = form - kwargs['button'] = 'Create' + kwargs['title'] = 'Configuration' kwargs['suptitle'] = 'New' - return render_to_response("device.html", kwargs, context_instance=RequestContext(request)) + kwargs['button'] = 'Create' + + return render(request, 'dev_conf_edit.html', kwargs) + +def edit_dev_conf(request, id_conf): + + conf = Configuration.objects.get(pk=id_conf) + + DevConfModel = CONF_MODELS[conf.device.device_type.name] + DevConfForm = CONF_FORMS[conf.device.device_type.name] + + dev_conf = DevConfModel.objects.get(pk=id_conf) + + if request.method=='GET': + form = DevConfForm(instance=dev_conf) + + if request.method=='POST': + form = DevConfForm(request.POST, instance=dev_conf) + + if form.is_valid(): + form.save() + return redirect('url_dev_conf', id_conf=id_conf) + + kwargs = {} + kwargs['form'] = form + kwargs['title'] = 'Device Configuration' + kwargs['suptitle'] = 'Edit' + kwargs['button'] = 'Update' + + return render(request, 'dev_conf_edit.html', kwargs) + + +# def experiment(request, id_exp=0, id_dev_type=0): +# kwargs = {} +# if id_exp: +# experiment = Experiment.objects.get(pk=id_exp) +# devices = Configuration.objects.filter(configuration__experiment=experiment) +# kwargs['experiment'] = experiment +# kwargs['experiment_keys'] = ['campaign', 'name', 'start_time', 'end_time'] +# +# form = ExperimentForm(instance=experiment) +# +# if id_dev_type: +# subform = DeviceTypeForm(initial={'device_type':id_dev_type}) +# kwargs['keys'] = ['ip_address'] +# keys = ['id']+kwargs['keys'] +# kwargs['items'] = Device.objects.filter(device_type=id_dev_type).values(*keys) +# else: +# subform = DeviceTypeForm() +# +# kwargs['form'] = form +# kwargs['subform'] = subform +# kwargs['device_keys'] = ['device_type__name', 'ip_address'] +# kwargs['devices'] = devices.values('device_type__name', 'ip_address', 'configuration__id') +# kwargs['suptitle'] = 'Detail' +# else: +# experiments = Experiment.objects.all().order_by('start_time') +# kwargs['keys'] = ['name', 'start_time', 'end_time'] +# keys = ['id']+kwargs['keys'] +# kwargs['items'] = experiments.values(*keys) +# kwargs['suptitle'] = 'List' +# kwargs['button'] = 'Add Experiment' +# +# kwargs['id_dev_type'] = id_dev_type +# kwargs['id_exp'] = id_exp +# return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request)) + +# def edit_experiment(request, id_exp): +# if request.method=='POST': +# experiment = Experiment.objects.get(pk=id_exp) +# form = ExperimentForm(request.POST, instance=experiment) +# if form.is_valid(): +# form.save() +# return redirect('experiment', id_exp=id_exp) + +# def experiment_add_device(request, id_exp): +# if request.method=='POST': +# experiment = Experiment.objects.get(pk=id_exp) +# +# exp_devices = Device.objects.filter(configuration__experiment=experiment) +# +# device = Device.objects.get(pk=request.POST['device']) +# +# if device.id in exp_devices.values('id',): +# return redirect('experiment', id_exp=id_exp) +# +# model = MODELS[device.device_type.alias] +# conf = model(experiment=experiment, device=device) +# conf.save() +# return redirect('experiment', id_exp=id_exp) + +# def add_experiment(request): +# +# kwargs = {} +# if request.method == 'POST': +# form = ExperimentForm(request.POST) +# if form.is_valid(): +# experiment = form.save() +# return redirect('experiment', id_exp=experiment.id) +# else: +# form = ExperimentForm() +# kwargs['form_new'] = form +# kwargs['title'] = 'Experiment' +# kwargs['suptitle'] = 'New' +# kwargs['id_exp'] = 0 +# return render_to_response("experiment.html", kwargs, context_instance=RequestContext(request)) + +# def device(request, id_dev=0): +# kwargs = {} +# if id_dev: +# device = Device.objects.get(pk=id_dev) +# kwargs['form'] = DeviceForm(instance=device) +# kwargs['action'] = 'edit/' +# kwargs['button'] = 'Update' +# kwargs['suptitle'] = 'Detail' +# else: +# devices = Device.objects.all() +# kwargs['keys'] = ['device_type__name', 'ip_address'] +# keys = ['id']+kwargs['keys'] +# kwargs['items'] = devices.values(*keys) +# kwargs['suptitle'] = 'List' +# kwargs['button'] = 'Add Device' +# return render_to_response("device.html", kwargs, context_instance=RequestContext(request)) +# +# def edit_device(request, id_dev): +# if request.method=='POST': +# device = Device.objects.get(pk=id_dev) +# form = DeviceForm(request.POST, instance=device) +# if form.is_valid(): +# form.save() +# return redirect('devices') +# +# def add_device(request): +# kwargs = {} +# if request.method == 'POST': +# form = DeviceForm(request.POST) +# if form.is_valid(): +# form.save() +# return redirect('devices') +# else: +# form = DeviceForm() +# kwargs['form'] = form +# kwargs['button'] = 'Create' +# kwargs['suptitle'] = 'New' +# return render_to_response("device.html", kwargs, context_instance=RequestContext(request)) diff --git a/apps/rc/forms.py b/apps/rc/forms.py new file mode 100644 index 0000000..5e7c50f --- /dev/null +++ b/apps/rc/forms.py @@ -0,0 +1,8 @@ +from django import forms +from .models import RCConfiguration + +class RCConfigurationForm(forms.ModelForm): + + class Meta: + model = RCConfiguration + fields = ('experiment',) diff --git a/apps/rc/urls.py b/apps/rc/urls.py index 959712f..8d43dc7 100644 --- a/apps/rc/urls.py +++ b/apps/rc/urls.py @@ -1,5 +1,6 @@ from django.conf.urls import url urlpatterns = ( - + url(r'^(?P-?\d+)/$', 'apps.main.views.dev_conf', name='url_rc_conf'), + url(r'^(?P-?\d+)/edit/$', 'apps.main.views.edit_dev_conf', name='url_edit_rc_conf'), ) diff --git a/apps/usrp/forms.py b/apps/usrp/forms.py new file mode 100644 index 0000000..1687a67 --- /dev/null +++ b/apps/usrp/forms.py @@ -0,0 +1,8 @@ +from django import forms +from .models import USRPConfiguration + +class USRPConfigurationForm(forms.ModelForm): + + class Meta: + model = USRPConfiguration + fields = ('device',) diff --git a/apps/usrp/models.py b/apps/usrp/models.py index 71a8362..3955182 100644 --- a/apps/usrp/models.py +++ b/apps/usrp/models.py @@ -1,3 +1,9 @@ from django.db import models - +from apps.main.models import Configuration # Create your models here. + +class USRPConfiguration(Configuration): + + + class Meta: + db_table = 'usrp_configurations' \ No newline at end of file diff --git a/apps/usrp/urls.py b/apps/usrp/urls.py index 959712f..26ff70e 100644 --- a/apps/usrp/urls.py +++ b/apps/usrp/urls.py @@ -1,5 +1,6 @@ from django.conf.urls import url urlpatterns = ( - + url(r'^(?P-?\d+)/$', 'apps.main.views.dev_conf', name='url_usrp_conf'), + url(r'^(?P-?\d+)/edit/$', 'apps.main.views.edit_dev_conf', name='url_edit_usrp_conf'), ) diff --git a/radarsys/urls.py b/radarsys/urls.py index 949e2fb..29cab2a 100644 --- a/radarsys/urls.py +++ b/radarsys/urls.py @@ -18,18 +18,9 @@ from django.contrib import admin urlpatterns = [ url(r'^$', 'apps.main.views.index', name='index'), - url(r'^experiment/$', 'apps.main.views.experiment', name='experiments'), - url(r'^experiment/add/$', 'apps.main.views.add_experiment', name='add_experiment'), - url(r'^experiment/(?P-?\d+)/$', 'apps.main.views.experiment', name='experiment'), - url(r'^experiment/(?P-?\d+)/edit/$', 'apps.main.views.edit_experiment', name='edit_experiment'), - url(r'^experiment/(?P-?\d+)/device/(?P-?\d+)/$', 'apps.main.views.experiment', name='experiment_device'), - url(r'^experiment/(?P-?\d+)/add_device/$', 'apps.main.views.experiment_add_device', name='experiment_add_device'), - url(r'^device/$', 'apps.main.views.device', name='devices'), - url(r'^device/(?P-?\d+)/$', 'apps.main.views.device'), - url(r'^device/(?P-?\d+)/edit/$', 'apps.main.views.edit_device', name='edit_device'), - url(r'^device/add/$', 'apps.main.views.add_device', name='add_device'), url(r'^admin/', include(admin.site.urls)), - url(r'^accounts/', include('apps.accounts.urls')), + url(r'^accounts/', include('apps.accounts.urls')), + url(r'^', include('apps.main.urls')), url(r'^rc/', include('apps.rc.urls')), url(r'^dds/', include('apps.dds.urls')), url(r'^cgs/', include('apps.cgs.urls')),