diff --git a/apps/abs/urls.py b/apps/abs/urls.py index 4824c3c..7e9b14f 100644 --- a/apps/abs/urls.py +++ b/apps/abs/urls.py @@ -3,4 +3,8 @@ 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.dev_conf_edit', name='url_edit_abs_conf'), -) + url(r'^(?P-?\d+)/write/$', 'apps.main.views.dev_conf_write', name='url_write_abs_conf'), + url(r'^(?P-?\d+)/read/$', 'apps.main.views.dev_conf_read', name='url_read_abs_conf'), + url(r'^(?P-?\d+)/import/$', 'apps.main.views.dev_conf_import', name='url_import_abs_conf'), + url(r'^(?P-?\d+)/export/$', 'apps.main.views.dev_conf_export', name='url_export_abs_conf'), +) \ No newline at end of file diff --git a/apps/cgs/urls.py b/apps/cgs/urls.py index 9d1d5a0..80fd729 100644 --- a/apps/cgs/urls.py +++ b/apps/cgs/urls.py @@ -5,5 +5,9 @@ urlpatterns = ( # url(r'^(?P-?\d+)/$', 'apps.cgs.views.configurate_frequencies', name='new_device'), url(r'^(?P-?\d+)/$', 'apps.main.views.dev_conf', name='url_cgs_conf'), url(r'^(?P-?\d+)/edit/$', 'apps.main.views.dev_conf_edit', name='url_edit_cgs_conf'), + url(r'^(?P-?\d+)/write/$', 'apps.main.views.dev_conf_write', name='url_write_cgs_conf'), + url(r'^(?P-?\d+)/read/$', 'apps.main.views.dev_conf_read', name='url_read_cgs_conf'), + url(r'^(?P-?\d+)/import/$', 'apps.main.views.dev_conf_import', name='url_import_cgs_conf'), + url(r'^(?P-?\d+)/export/$', 'apps.main.views.dev_conf_export', name='url_export_cgs_conf'), ) diff --git a/apps/dds/models.py b/apps/dds/models.py index fa9ff13..82da477 100644 --- a/apps/dds/models.py +++ b/apps/dds/models.py @@ -6,7 +6,6 @@ from django.core.validators import MinValueValidator, MaxValueValidator from django.core.exceptions import ValidationError MOD_TYPES = ( - (None, 'Select a modulation type'), (0, 'Single Tone'), (1, 'FSK'), (2, 'Ramped FSK'), @@ -18,24 +17,24 @@ class DDSConfiguration(Configuration): DDS_NBITS = 48 - clock = models.FloatField(verbose_name='Clock Master (MHz)',validators=[MinValueValidator(5), MaxValueValidator(75)]) + clock = models.FloatField(verbose_name='Clock Master (MHz)',validators=[MinValueValidator(5), MaxValueValidator(75)], null=True) multiplier = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(1), MaxValueValidator(20)], default=4) - frequency = models.DecimalField(verbose_name='Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=17, decimal_places=15) + frequency = models.DecimalField(verbose_name='Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=18, decimal_places=16) frequency_bin = models.BigIntegerField(verbose_name='Frequency (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**DDS_NBITS-1)]) - phase = models.FloatField(verbose_name='Phase (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)]) + phase = models.FloatField(verbose_name='Phase (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], default=0) # phase_binary = models.PositiveIntegerField(verbose_name='Phase (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)]) - amplitude_ch_A = models.PositiveIntegerField(verbose_name='Amplitude CHA',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True) - amplitude_ch_B = models.PositiveIntegerField(verbose_name='Amplitude CHB',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True) + amplitude_ch_A = models.PositiveIntegerField(verbose_name='Amplitude CH A',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True) + amplitude_ch_B = models.PositiveIntegerField(verbose_name='Amplitude CH B',validators=[MinValueValidator(0), MaxValueValidator(2**10-1)], blank=True, null=True) - modulation = models.PositiveIntegerField(choices = MOD_TYPES, default = 0) + modulation = models.PositiveIntegerField(verbose_name='Modulation Type', choices = MOD_TYPES, default = 0) - frequency_mod = models.DecimalField(verbose_name='Frequency Mod. (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=17, decimal_places=15, blank=True, null=True) - frequency_mod_bin = models.BigIntegerField(verbose_name='Frequency Mod. (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**DDS_NBITS-1)], blank=True, null=True) + frequency_mod = models.DecimalField(verbose_name='Mod: Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=18, decimal_places=16, blank=True, null=True) + frequency_mod_bin = models.BigIntegerField(verbose_name='Mod: Frequency (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**DDS_NBITS-1)], blank=True, null=True) - phase_mod = models.FloatField(verbose_name='Phase Mod. (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], blank=True, null=True) + phase_mod = models.FloatField(verbose_name='Mod: Phase (Degrees)', validators=[MinValueValidator(0), MaxValueValidator(360)], blank=True, null=True) # phase_binary_mod = models.PositiveIntegerField(verbose_name='Phase Mod (Binary)',validators=[MinValueValidator(0), MaxValueValidator(2**14-1)], blank=True, null=True) def get_nbits(self): diff --git a/apps/dds/static/js/dds_conversion.js b/apps/dds/static/js/dds_conversion.js new file mode 100644 index 0000000..520c7d6 --- /dev/null +++ b/apps/dds/static/js/dds_conversion.js @@ -0,0 +1,13 @@ + + function freq2Binary(mclock, frequency) { + + var freq_bin = parseInt(frequency * (Math.pow(2,48)/mclock)); + return freq_bin; + + } + + function binary2Freq(mclock, binary) { + + var frequency = (1.0*binary) / (Math.pow(2,48)/mclock); + return frequency; + } \ No newline at end of file diff --git a/apps/dds/templates/dds_conf.html b/apps/dds/templates/dds_conf.html index 294944b..99944d7 100644 --- a/apps/dds/templates/dds_conf.html +++ b/apps/dds/templates/dds_conf.html @@ -1,68 +1 @@ -{% extends "base.html" %} -{% load bootstrap3 %} -{% load static %} -{% load main_tags %} - -{% block conf-active %}active{% endblock %} - -{% block content-title %}{{title}}{% endblock %} -{% block content-suptitle %}{{suptitle}}{% endblock %} - -{% block content %} - - - - {% for item in dev_conf_keys %} - - {% endfor %} - - - - {% if form.modulation.value == 0 %} - {% endif %} - - {% if form.modulation.value == 1 %} - - {% endif %} - - {% if form.modulation.value == 2 %} - - {% endif %} - - {% if form.modulation.value == 3 %} - - {% endif %} - - {% if form.modulation.value == 4 %} - - {% endif %} -
Status{%if connected == True %} ☘ Connected {% else %} ⛔ Disconnected {% endif %}
{{item|title}}{{dev_conf|attr:item}}
{{form.modulation.label}}{{form.modulation}}
{{form.frequency_mod.label}}{{form.frequency_mod.value}}
{{form.frequency_mod.label}}{{form.frequency_mod.value}}
{{form.frequency_mod.label}}{{form.frequency_mod.value}}
{{form.phase_mod.label}}{{form.phase_mod.value}}
- - - - - -

-{% endblock %} - -{% block sidebar%} -{% include "sidebar_devices.html" %} -{% endblock %} - -{% block extra-js%} - -{% endblock %} \ No newline at end of file +{% extends "dev_conf.html" %} \ No newline at end of file diff --git a/apps/dds/templates/dds_conf_edit.html b/apps/dds/templates/dds_conf_edit.html index efd91eb..ae0e31c 100644 --- a/apps/dds/templates/dds_conf_edit.html +++ b/apps/dds/templates/dds_conf_edit.html @@ -4,6 +4,7 @@ {% load main_tags %} {% block extra-js%} + diff --git a/apps/dds/urls.py b/apps/dds/urls.py index 3b29afb..ac264cb 100644 --- a/apps/dds/urls.py +++ b/apps/dds/urls.py @@ -4,6 +4,8 @@ urlpatterns = ( url(r'^(?P-?\d+)/$', 'apps.dds.views.dds_conf', name='url_dds_conf'), url(r'^(?P-?\d+)/(?P-?\d+)/$', 'apps.dds.views.dds_conf', name='url_dds_conf'), url(r'^(?P-?\d+)/edit/$', 'apps.dds.views.dds_conf_edit', name='url_edit_dds_conf'), - url(r'^(?P-?\d+)/write/$', 'apps.dds.views.dds_conf_write', name='url_dds_conf_write'), - url(r'^(?P-?\d+)/read/$', 'apps.dds.views.dds_conf_read', name='url_dds_conf_read'), + url(r'^(?P-?\d+)/write/$', 'apps.dds.views.dds_conf_write', name='url_write_dds_conf'), + url(r'^(?P-?\d+)/read/$', 'apps.dds.views.dds_conf_read', name='url_read_dds_conf'), + url(r'^(?P-?\d+)/import/$', 'apps.main.views.dev_conf_import', name='url_import_dds_conf'), + url(r'^(?P-?\d+)/export/$', 'apps.main.views.dev_conf_export', name='url_export_dds_conf'), ) diff --git a/apps/dds/views.py b/apps/dds/views.py index eab23af..7f14c25 100644 --- a/apps/dds/views.py +++ b/apps/dds/views.py @@ -2,40 +2,36 @@ from django.contrib import messages from django.shortcuts import redirect, render, get_object_or_404 -from apps.main.models import Experiment, Configuration +# from apps.main.models import Experiment, Configuration from apps.main.views import sidebar from .models import DDSConfiguration from .forms import DDSConfigurationForm # Create your views here. -from radarsys_api import jro_device, dds +from radarsys_api import dds def dds_conf(request, id_conf): conf = get_object_or_404(DDSConfiguration, pk=id_conf) - if request.method=='GET': - form = DDSConfigurationForm(instance=conf) - answer = dds.echo(ip=str(conf.device.ip_address), port=conf.device.port_address) kwargs = {} - kwargs['connected'] = (answer[0] == "1") - kwargs['form'] = form + kwargs['connected'] = (answer[0] == "1") kwargs['dev_conf'] = conf kwargs['dev_conf_keys'] = ['experiment', 'device', 'clock', 'multiplier', 'frequency', -# 'frequency_bin', + 'frequency_bin', 'phase', # 'phase_binary', - 'amplitude_ch_A', 'amplitude_ch_B'] -# 'modulation', -# 'frequency_mod', -# 'frequency_mod_bin', -# 'phase_mod'] + 'amplitude_ch_A', 'amplitude_ch_B', + 'modulation', + 'frequency_mod', + 'frequency_mod_bin', + 'phase_mod'] # 'phase_binary_mod'] kwargs['title'] = 'DDS Configuration' @@ -74,7 +70,6 @@ def dds_conf_edit(request, id_conf): kwargs['title'] = 'Device Configuration' kwargs['suptitle'] = 'Edit' kwargs['button'] = 'Save' - kwargs['dds_nbits'] = conf.get_nbits() ###### SIDEBAR ###### kwargs.update(sidebar(conf)) @@ -99,6 +94,12 @@ def dds_conf_write(request, id_conf): if answer[0] == "1": messages.success(request, answer[2:]) + + conf.pk = None + conf.id = None + conf.type = 1 + conf.save() + else: messages.error(request, answer) @@ -107,7 +108,7 @@ def dds_conf_write(request, id_conf): def dds_conf_read(request, id_conf): conf = get_object_or_404(DDSConfiguration, pk=id_conf) - + if request.method=='POST': form = DDSConfigurationForm(request.POST, instance=conf) @@ -118,32 +119,34 @@ def dds_conf_read(request, id_conf): dds_model.save() return redirect('url_dds_conf', id_conf=conf.id) - - parms = None + + messages.error(request, "Parameters could not be saved. Invalid parameters") + + data = {} if request.method=='GET': - #mult, freqA, freqB, modulation, phaseA, phaseB, amp0, amp1 parms = dds.read_config(ip=conf.device.ip_address, port=conf.device.port_address) - - if parms is None: - return redirect('url_dds_conf', id_conf=conf.id) - data = {'experiment' : conf.experiment.id, - 'device' : conf.device.id, - 'clock' : conf.clock, - 'multiplier' : parms[0], - 'frequency' : conf.binary2freq(parms[1], parms[0]*conf.clock), - 'frequency_bin' : parms[1], - 'phase' : parms[4], - 'amplitude_ch_A' : parms[6], - 'amplitude_ch_B' : parms[7], - 'modulation' : parms[3], - 'frequency_mod' : conf.binary2freq(parms[2], parms[0]*conf.clock), - 'frequency_mod_bin' : parms[2], - 'phase_mod' : parms[5], - } + if not parms: + messages.error(request, "Could not read parameters from Device") + return redirect('url_dds_conf', id_conf=conf.id) + + data = {'experiment' : conf.experiment.id, + 'device' : conf.device.id, + 'clock' : conf.clock, + 'multiplier' : parms[0], + 'frequency' : conf.binary2freq(parms[1], parms[0]*conf.clock), + 'frequency_bin' : parms[1], + 'phase' : parms[4], + 'amplitude_ch_A' : parms[6], + 'amplitude_ch_B' : parms[7], + 'modulation' : parms[3], + 'frequency_mod' : conf.binary2freq(parms[2], parms[0]*conf.clock), + 'frequency_mod_bin' : parms[2], + 'phase_mod' : parms[5], + } form = DDSConfigurationForm(data) @@ -153,7 +156,6 @@ def dds_conf_read(request, id_conf): kwargs['title'] = 'Device Configuration' kwargs['suptitle'] = 'Parameters read from device' kwargs['button'] = 'Save' - kwargs['dds_nbits'] = conf.get_nbits() ###### SIDEBAR ###### kwargs.update(sidebar(conf)) diff --git a/apps/jars/urls.py b/apps/jars/urls.py index 464d8c0..de5c98d 100644 --- a/apps/jars/urls.py +++ b/apps/jars/urls.py @@ -4,4 +4,8 @@ urlpatterns = ( # url(r'^(?P-?\d+)/$', 'apps.jars.views.jars_config', name='jars'), url(r'^(?P-?\d+)/$', 'apps.main.views.dev_conf', name='url_jars_conf'), url(r'^(?P-?\d+)/edit/$', 'apps.main.views.dev_conf_edit', name='url_edit_jars_conf'), + url(r'^(?P-?\d+)/write/$', 'apps.main.views.dev_conf_write', name='url_write_jars_conf'), + url(r'^(?P-?\d+)/read/$', 'apps.main.views.dev_conf_read', name='url_read_jars_conf'), + url(r'^(?P-?\d+)/import/$', 'apps.main.views.dev_conf_import', name='url_import_jars_conf'), + url(r'^(?P-?\d+)/export/$', 'apps.main.views.dev_conf_export', name='url_export_jars_conf'), ) diff --git a/apps/jars/views.py b/apps/jars/views.py index 3d7daba..bf56089 100644 --- a/apps/jars/views.py +++ b/apps/jars/views.py @@ -2,6 +2,8 @@ from django.shortcuts import render_to_response from django.template import RequestContext from apps.main.models import Device +from apps.main.views import sidebar + from .models import JARSConfiguration from .forms import JARSConfigurationForm # Create your views here. @@ -15,16 +17,17 @@ def jars_config(request, id): for device in devices: if device['device_type__name']=='jars': device['active'] = 'active' - form = JARSConfigurationForm(instance=conf) - else: - form = JARSConfigurationForm() +# form = JARSConfigurationForm(instance=conf) +# else: +# form = JARSConfigurationForm() kwargs = { - 'form': form, - 'devices':devices, 'dev_conf': conf } + ###### SIDEBAR ###### + kwargs.update(sidebar(conf)) + return render_to_response('jars.html', kwargs, context_instance=RequestContext(request)) diff --git a/apps/main/models.py b/apps/main/models.py index 4b05b63..f276cd3 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -109,4 +109,23 @@ class Configuration(PolymorphicModel): def get_absolute_url(self): from django.core.urlresolvers import reverse return reverse('url_%s_conf' % self.device.device_type.name, args=[str(self.id)]) - \ No newline at end of file + + def get_absolute_url_edit(self): + from django.core.urlresolvers import reverse + return reverse('url_edit_%s_conf' % self.device.device_type.name, args=[str(self.id)]) + + def get_absolute_url_import(self): + from django.core.urlresolvers import reverse + return reverse('url_import_%s_conf' % self.device.device_type.name, args=[str(self.id)]) + + def get_absolute_url_export(self): + from django.core.urlresolvers import reverse + return reverse('url_export_%s_conf' % self.device.device_type.name, args=[str(self.id)]) + + def get_absolute_url_write(self): + from django.core.urlresolvers import reverse + return reverse('url_write_%s_conf' % self.device.device_type.name, args=[str(self.id)]) + + def get_absolute_url_read(self): + from django.core.urlresolvers import reverse + return reverse('url_read_%s_conf' % self.device.device_type.name, args=[str(self.id)]) \ No newline at end of file diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index 52c0537..6490546 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -83,16 +83,17 @@
{% block messages %} - {% if messages %} - {% for message in messages %} - - {% endfor %} - {% endif %} + {% if messages %} + {% for message in messages %} + + {% endfor %} +
+ {% endif %} {% endblock %} -
+ {% block content %} {% endblock %}
diff --git a/apps/main/templates/dev_conf.html b/apps/main/templates/dev_conf.html index 2b5a9ad..7d2912f 100644 --- a/apps/main/templates/dev_conf.html +++ b/apps/main/templates/dev_conf.html @@ -11,16 +11,26 @@ {% block content %} - -{% for key in dev_conf_keys %} - -{% endfor %} + + + + + + {% for key in dev_conf_keys %} + + + + + {% endfor %}
Status{%if connected == True %} ☘ Connected {% else %} ⛔ Disconnected {% endif %}
{{key|title}}{{dev_conf|attr:key}}
Status{%if connected == True %} ☘ Connected {% else %} ⛔ Disconnected {% endif %}
{% get_verbose_field_name dev_conf key %}{{dev_conf|attr:key}}
- + -

+ + + + {% endblock %} {% block sidebar%} @@ -31,7 +41,23 @@ diff --git a/apps/main/templates/dev_confs.html b/apps/main/templates/dev_confs.html index c826134..fff7773 100644 --- a/apps/main/templates/dev_confs.html +++ b/apps/main/templates/dev_confs.html @@ -20,7 +20,7 @@ {% endfor%} {% for item in configurations %} - + {{ forloop.counter }} {% for key in configuration_keys %} {{ item|attr:key }} diff --git a/apps/main/templatetags/main_tags.py b/apps/main/templatetags/main_tags.py index 6d5977b..b663cbb 100644 --- a/apps/main/templatetags/main_tags.py +++ b/apps/main/templatetags/main_tags.py @@ -1,11 +1,25 @@ from django.template.defaulttags import register @register.filter -def attr(object, key): - if hasattr(object, key): - return getattr(object, key) - return object.get(key) +def attr(instance, key): + + display_key = "get_" + key + "_display" + + if hasattr(instance, display_key): + return getattr(instance, display_key)() + + if hasattr(instance, key): + return getattr(instance, key) + + return instance.get(key) @register.filter def title(s): - return s.replace('_', ' ').title() \ No newline at end of file + return s.replace('_', ' ').title() + +@register.simple_tag +def get_verbose_field_name(instance, field_name): + """ + Returns verbose_name for a field. + """ + return instance._meta.get_field(field_name).verbose_name.title() \ No newline at end of file diff --git a/apps/main/views.py b/apps/main/views.py index 878560a..73781f8 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -1,4 +1,5 @@ from django.shortcuts import render, redirect, get_object_or_404, HttpResponse +from django.contrib import messages from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm from apps.cgs.forms import CGSConfigurationForm @@ -338,7 +339,7 @@ def dev_confs(request): # keys = ['id', 'device__device_type__name', 'device__name', 'experiment__campaign__name', 'experiment__name'] - keys = ['id', 'device', 'experiment'] + keys = ['id', 'device', 'experiment', 'type', 'programmed_date'] kwargs = {} @@ -368,17 +369,7 @@ def dev_conf(request, id_conf): kwargs['button'] = 'Edit Configuration' ###### SIDEBAR ###### - experiments = Experiment.objects.filter(campaign=conf.experiment.campaign) - configurations = Configuration.objects.filter(experiment=conf.experiment) - - exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time'] - conf_keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address'] - - kwargs['experiment_keys'] = exp_keys[1:] - kwargs['experiments'] = experiments.values(*exp_keys) - - kwargs['configuration_keys'] = conf_keys[1:] - kwargs['configurations'] = configurations.values(*conf_keys) + kwargs.update(sidebar(conf)) return render(request, 'dev_conf.html', kwargs) @@ -410,6 +401,9 @@ def dev_conf_new(request, id_exp=0): kwargs['suptitle'] = 'New' kwargs['button'] = 'Create' + ###### SIDEBAR ###### + kwargs.update(sidebar(conf)) + return render(request, 'dev_conf_edit.html', kwargs) def dev_conf_edit(request, id_conf): @@ -437,8 +431,103 @@ def dev_conf_edit(request, id_conf): kwargs['suptitle'] = 'Edit' kwargs['button'] = 'Update' + ###### SIDEBAR ###### + kwargs.update(sidebar(conf)) + return render(request, 'dev_conf_edit.html', kwargs) +def dev_conf_read(request, id_conf): + + conf = get_object_or_404(Configuration, 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' + + ###### SIDEBAR ###### + kwargs.update(sidebar(conf)) + + messages.error(request, "Read View not implemented yet for this configuration") + + return render(request, 'dev_conf.html', kwargs) + +def dev_conf_write(request, id_conf): + + conf = get_object_or_404(Configuration, 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' + + ###### SIDEBAR ###### + kwargs.update(sidebar(conf)) + + messages.error(request, "Write View not implemented yet for this configuration") + + return render(request, 'dev_conf.html', kwargs) + +def dev_conf_import(request, id_conf): + + conf = get_object_or_404(Configuration, 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' + + ###### SIDEBAR ###### + kwargs.update(sidebar(conf)) + + messages.error(request, "Import View not implemented yet for this configuration") + + return render(request, 'dev_conf.html', kwargs) + +def dev_conf_export(request, id_conf): + + conf = get_object_or_404(Configuration, 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' + + ###### SIDEBAR ###### + kwargs.update(sidebar(conf)) + + messages.error(request, "Export View not implemented yet for this configuration") + + return render(request, 'dev_conf.html', kwargs) + def dev_conf_delete(request, id_conf): conf = get_object_or_404(Configuration, pk=id_conf) @@ -454,12 +543,15 @@ def dev_conf_delete(request, id_conf): kwargs = {'object':conf, 'conf_active':'active', 'url_cancel':'url_dev_conf', 'id_item':id_conf} + ###### SIDEBAR ###### + kwargs.update(sidebar(conf)) + return render(request, 'item_delete.html', kwargs) def sidebar(conf): experiments = Experiment.objects.filter(campaign=conf.experiment.campaign) - configurations = Configuration.objects.filter(experiment=conf.experiment) + configurations = Configuration.objects.filter(experiment=conf.experiment, type=0) exp_keys = ['id', 'campaign', 'name', 'start_time', 'end_time'] conf_keys = ['id', 'device__name', 'device__device_type__name', 'device__ip_address'] diff --git a/apps/rc/urls.py b/apps/rc/urls.py index fe6d5dd..30caf5d 100644 --- a/apps/rc/urls.py +++ b/apps/rc/urls.py @@ -3,6 +3,11 @@ from django.conf.urls import url urlpatterns = ( url(r'^(?P-?\d+)/$', 'apps.rc.views.conf', name='url_rc_conf'), url(r'^(?P-?\d+)/edit/$', 'apps.rc.views.conf_edit', name='url_edit_rc_conf'), + url(r'^(?P-?\d+)/write/$', 'apps.main.views.dev_conf_write', name='url_write_rc_conf'), + url(r'^(?P-?\d+)/read/$', 'apps.main.views.dev_conf_read', name='url_read_rc_conf'), + url(r'^(?P-?\d+)/import/$', 'apps.main.views.dev_conf_import', name='url_import_rc_conf'), + url(r'^(?P-?\d+)/export/$', 'apps.main.views.dev_conf_export', name='url_export_rc_conf'), + url(r'^(?P-?\d+)/add_line/$', 'apps.rc.views.add_line', name='url_add_rc_line'), url(r'^(?P-?\d+)/update_lines/$', 'apps.rc.views.update_lines', name='url_update_rc_lines'), url(r'^(?P-?\d+)/edit_lines/$', 'apps.rc.views.edit_lines', name='url_edit_rc_lines'), diff --git a/apps/usrp/urls.py b/apps/usrp/urls.py index df8ba74..5318fb6 100644 --- a/apps/usrp/urls.py +++ b/apps/usrp/urls.py @@ -3,4 +3,8 @@ 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.dev_conf_edit', name='url_edit_usrp_conf'), + url(r'^(?P-?\d+)/write/$', 'apps.main.views.dev_conf_write', name='url_write_usrp_conf'), + url(r'^(?P-?\d+)/read/$', 'apps.main.views.dev_conf_read', name='url_read_usrp_conf'), + url(r'^(?P-?\d+)/import/$', 'apps.main.views.dev_conf_import', name='url_import_usrp_conf'), + url(r'^(?P-?\d+)/export/$', 'apps.main.views.dev_conf_export', name='url_export_usrp_conf'), )