diff --git a/apps/main/forms.py b/apps/main/forms.py
index 42446bc..5371bf8 100644
--- a/apps/main/forms.py
+++ b/apps/main/forms.py
@@ -63,7 +63,7 @@ class ExperimentForm(forms.ModelForm):
class Meta:
model = Experiment
- exclude = ['']
+ exclude = ['status']
class LocationForm(forms.ModelForm):
class Meta:
diff --git a/apps/main/models.py b/apps/main/models.py
index fe7d81e..29294b8 100644
--- a/apps/main/models.py
+++ b/apps/main/models.py
@@ -71,6 +71,10 @@ class Location(models.Model):
def __unicode__(self):
return u'%s' % self.name
+ def get_absolute_url(self):
+ return reverse('url_device', args=[str(self.id)])
+
+
class DeviceType(models.Model):
name = models.CharField(max_length = 10, choices = DEV_TYPES, default = 'rc')
@@ -99,10 +103,12 @@ class Device(models.Model):
def __unicode__(self):
return u'%s | %s' % (self.name, self.ip_address)
- def get_status(self):
-
+ def get_status(self):
return self.status
+ def get_absolute_url(self):
+ return reverse('url_device', args=[str(self.id)])
+
class Campaign(models.Model):
@@ -121,6 +127,9 @@ class Campaign(models.Model):
def __unicode__(self):
return u'%s' % (self.name)
+ def get_absolute_url(self):
+ return reverse('url_campaign', args=[str(self.id)])
+
class RunningExperiment(models.Model):
radar = models.OneToOneField('Location', on_delete=models.CASCADE)
@@ -145,6 +154,10 @@ class Experiment(models.Model):
def __unicode__(self):
return u'%s' % (self.name)
+ @property
+ def radar(self):
+ return self.location
+
def clone(self, **kwargs):
confs = Configuration.objects.filter(experiment=self, type=0)
@@ -201,6 +214,9 @@ class Experiment(models.Model):
return color
+ def get_absolute_url(self):
+ return reverse('url_experiment', args=[str(self.id)])
+
class Configuration(PolymorphicModel):
diff --git a/apps/main/templates/base_edit.html b/apps/main/templates/base_edit.html
new file mode 100644
index 0000000..ee4ed38
--- /dev/null
+++ b/apps/main/templates/base_edit.html
@@ -0,0 +1,35 @@
+{% extends "base.html" %}
+{% load bootstrap3 %}
+{% load static %}
+{% load main_tags %}
+
+{% block content-title %}{{title}}{% endblock %}
+{% block content-suptitle %}{{suptitle}}{% endblock %}
+
+{% block content %}
+ {% if form.is_multipart %}
+
+{% endblock %}
+
+{% block sidebar%}
+ {% include "sidebar_devices.html" %}
+{% endblock %}
diff --git a/apps/main/templates/campaign_edit.html b/apps/main/templates/campaign_edit.html
index 6252d7c..168de14 100644
--- a/apps/main/templates/campaign_edit.html
+++ b/apps/main/templates/campaign_edit.html
@@ -1,32 +1,12 @@
-{% extends "base.html" %}
+{% extends "base_edit.html" %}
{% load bootstrap3 %}
{% load static %}
{% load main_tags %}
+
{% block extra-head %}
{% endblock %}
-{% block camp-active %}active{% endblock %}
-
-{% block content-title %}{{title}}{% endblock %}
-{% block content-suptitle %}{{suptitle}}{% endblock %}
-
-{% block content %}
-
-{% endblock %}
-
-{% block sidebar%}
- {% include "sidebar_devices.html" %}
-{% endblock %}
-
{% block extra-js%}
diff --git a/apps/main/templates/confirm.html b/apps/main/templates/confirm.html
index 504a110..d176cda 100644
--- a/apps/main/templates/confirm.html
+++ b/apps/main/templates/confirm.html
@@ -6,25 +6,21 @@
{% block content %}
+
{% endblock %}
diff --git a/apps/main/templates/device_edit.html b/apps/main/templates/device_edit.html
index 97dc756..16ebf08 100644
--- a/apps/main/templates/device_edit.html
+++ b/apps/main/templates/device_edit.html
@@ -1,29 +1 @@
-{% extends "base.html" %}
-{% load bootstrap3 %}
-{% load static %}
-{% load main_tags %}
-{% block extra-head %}
-
-{% endblock %}
-
-{% block dev-active %}active{% endblock %}
-
-{% block content-title %}{{title}}{% endblock %}
-{% block content-suptitle %}{{suptitle}}{% endblock %}
-
-{% block content %}
-
-{% endblock %}
-
-{% block sidebar%}
- {% include "sidebar_devices.html" %}
-{% endblock %}
-
-{% block extra-js%}
-{% endblock %}
\ No newline at end of file
+{% extends "base_edit.html" %}
\ No newline at end of file
diff --git a/apps/main/templates/experiment_edit.html b/apps/main/templates/experiment_edit.html
index b9822c6..5e630cf 100644
--- a/apps/main/templates/experiment_edit.html
+++ b/apps/main/templates/experiment_edit.html
@@ -17,40 +17,6 @@
{% bootstrap_form form layout='horizontal' size='medium' %}
- {% if configurations %}
-
-
-
-
-
-
-
- # |
- {% for key in configuration_keys %}
- {{ key|title }} |
- {% endfor%}
-
- {% for item in configurations %}
-
- {{ forloop.counter }} |
- {% for key in configuration_keys %}
- {{ item|value:key }} |
- {% endfor %}
-
- {% endfor %}
-
-
-
-
-
- {% endif %}
-
{% if button %}
diff --git a/apps/main/views.py b/apps/main/views.py
index e6144a9..ae27307 100644
--- a/apps/main/views.py
+++ b/apps/main/views.py
@@ -41,11 +41,13 @@ CONF_MODELS = {
'usrp': USRPConfiguration,
}
+
def index(request):
kwargs = {}
return render(request, 'index.html', kwargs)
+
def locations(request):
locations = Location.objects.all().order_by('name')
@@ -61,6 +63,7 @@ def locations(request):
return render(request, 'locations.html', kwargs)
+
def location(request, id_loc):
location = get_object_or_404(Location, pk=id_loc)
@@ -95,6 +98,7 @@ def location_new(request):
return render(request, 'location_edit.html', kwargs)
+
def location_edit(request, id_loc):
location = get_object_or_404(Location, pk=id_loc)
@@ -117,6 +121,7 @@ def location_edit(request, id_loc):
return render(request, 'location_edit.html', kwargs)
+
def location_delete(request, id_loc):
location = get_object_or_404(Location, pk=id_loc)
@@ -127,12 +132,19 @@ def location_delete(request, id_loc):
location.delete()
return redirect('url_locations')
- return HttpResponse("Not enough permission to delete this object")
+ messages.error(request, 'Not enough permission to delete this object')
+ return redirect(location.get_absolute_url())
- kwargs = {'object':location, 'loc_active':'active',
- 'url_cancel':'url_location', 'id_item':id_loc}
+ kwargs = {
+ 'title': 'Delete',
+ 'suptitle': 'Location',
+ 'object': location,
+ 'previous': location.get_absolute_url(),
+ 'delete': True
+ }
- return render(request, 'item_delete.html', kwargs)
+ return render(request, 'confirm.html', kwargs)
+
def devices(request):
@@ -150,6 +162,7 @@ def devices(request):
return render(request, 'devices.html', kwargs)
+
def device(request, id_dev):
device = get_object_or_404(Device, pk=id_dev)
@@ -163,6 +176,7 @@ def device(request, id_dev):
return render(request, 'device.html', kwargs)
+
def device_new(request):
if request.method == 'GET':
@@ -183,6 +197,7 @@ def device_new(request):
return render(request, 'device_edit.html', kwargs)
+
def device_edit(request, id_dev):
device = get_object_or_404(Device, pk=id_dev)
@@ -195,7 +210,7 @@ def device_edit(request, id_dev):
if form.is_valid():
form.save()
- return redirect('url_devices')
+ return redirect(device.get_absolute_url())
kwargs = {}
kwargs['form'] = form
@@ -205,6 +220,7 @@ def device_edit(request, id_dev):
return render(request, 'device_edit.html', kwargs)
+
def device_delete(request, id_dev):
device = get_object_or_404(Device, pk=id_dev)
@@ -215,12 +231,19 @@ def device_delete(request, id_dev):
device.delete()
return redirect('url_devices')
- return HttpResponse("Not enough permission to delete this object")
+ messages.error(request, 'Not enough permission to delete this object')
+ return redirect(device.get_absolute_url())
- kwargs = {'object':device, 'dev_active':'active',
- 'url_cancel':'url_device', 'id_item':id_dev}
+ kwargs = {
+ 'title': 'Delete',
+ 'suptitle': 'Device',
+ 'object': device,
+ 'previous': device.get_absolute_url(),
+ 'delete': True
+ }
- return render(request, 'item_delete.html', kwargs)
+ return render(request, 'confirm.html', kwargs)
+
def campaigns(request):
@@ -237,6 +260,7 @@ def campaigns(request):
return render(request, 'campaigns.html', kwargs)
+
def campaign(request, id_camp):
campaign = get_object_or_404(Campaign, pk=id_camp)
@@ -246,12 +270,10 @@ def campaign(request, id_camp):
kwargs = {}
kwargs['campaign'] = campaign
- kwargs['campaign_keys'] = ['name', 'start_date', 'end_date', 'tags', 'description']
-
- keys = ['id', 'name', 'start_time', 'end_time']
+ kwargs['campaign_keys'] = ['template', 'name', 'start_date', 'end_date', 'tags', 'description']
- kwargs['experiment_keys'] = keys[1:]
- kwargs['experiments'] = experiments.values(*keys)
+ kwargs['experiments'] = experiments
+ kwargs['experiment_keys'] = ['name', 'radar', 'start_time', 'end_time']
kwargs['title'] = 'Campaign'
kwargs['suptitle'] = 'Details'
@@ -261,6 +283,7 @@ def campaign(request, id_camp):
return render(request, 'campaign.html', kwargs)
+
def campaign_new(request):
kwargs = {}
@@ -310,6 +333,7 @@ def campaign_new(request):
return render(request, 'campaign_edit.html', kwargs)
+
def campaign_edit(request, id_camp):
campaign = get_object_or_404(Campaign, pk=id_camp)
@@ -332,6 +356,7 @@ def campaign_edit(request, id_camp):
return render(request, 'campaign_edit.html', kwargs)
+
def campaign_delete(request, id_camp):
campaign = get_object_or_404(Campaign, pk=id_camp)
@@ -347,12 +372,19 @@ def campaign_delete(request, id_camp):
return redirect('url_campaigns')
- return HttpResponse("Not enough permission to delete this object")
+ messages.error(request, 'Not enough permission to delete this object')
+ return redirect(campaign.get_absolute_url())
- kwargs = {'object':campaign, 'camp_active':'active',
- 'url_cancel':'url_campaign', 'id_item':id_camp}
+ kwargs = {
+ 'title': 'Delete',
+ 'suptitle': 'Campaign',
+ 'object': campaign,
+ 'previous': campaign.get_absolute_url(),
+ 'delete': True
+ }
- return render(request, 'item_delete.html', kwargs)
+ return render(request, 'confirm.html', kwargs)
+
def experiments(request):
@@ -371,6 +403,7 @@ def experiments(request):
return render(request, 'experiments.html', kwargs)
+
def experiment(request, id_exp):
experiment = get_object_or_404(Experiment, pk=id_exp)
@@ -441,6 +474,7 @@ def experiment_new(request, id_camp=None):
return render(request, 'experiment_edit.html', kwargs)
+
def experiment_edit(request, id_exp):
experiment = get_object_or_404(Experiment, pk=id_exp)
@@ -463,6 +497,7 @@ def experiment_edit(request, id_exp):
return render(request, 'experiment_edit.html', kwargs)
+
def experiment_delete(request, id_exp):
experiment = get_object_or_404(Experiment, pk=id_exp)
@@ -479,6 +514,7 @@ def experiment_delete(request, id_exp):
return render(request, 'item_delete.html', kwargs)
+
def dev_confs(request):
configurations = Configuration.objects.all().order_by('type', 'device__device_type', 'experiment')
@@ -498,6 +534,7 @@ def dev_confs(request):
return render(request, 'dev_confs.html', kwargs)
+
def dev_conf(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
@@ -544,7 +581,8 @@ def dev_conf_new(request, id_exp=0, id_dev=0):
kwargs['button'] = 'Create'
return render(request, 'dev_conf_edit.html', kwargs)
-
+
+
def dev_conf_edit(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
@@ -575,6 +613,7 @@ def dev_conf_edit(request, id_conf):
return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
+
def dev_conf_start(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
@@ -592,6 +631,7 @@ def dev_conf_start(request, id_conf):
return redirect(conf.get_absolute_url())
+
def dev_conf_stop(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
@@ -609,6 +649,7 @@ def dev_conf_stop(request, id_conf):
return redirect(conf.get_absolute_url())
+
def dev_conf_status(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
@@ -649,6 +690,7 @@ def dev_conf_write(request, id_conf):
return redirect(conf.get_absolute_url())
+
def dev_conf_read(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
@@ -690,6 +732,7 @@ def dev_conf_read(request, id_conf):
return render(request, '%s_conf_edit.html' %conf.device.device_type.name, kwargs)
+
def dev_conf_import(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
@@ -739,6 +782,7 @@ def dev_conf_import(request, id_conf):
return render(request, 'dev_conf_import.html', kwargs)
+
def dev_conf_export(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
@@ -773,6 +817,7 @@ def dev_conf_export(request, id_conf):
return render(request, 'dev_conf_export.html', kwargs)
+
def dev_conf_delete(request, id_conf):
conf = get_object_or_404(Configuration, pk=id_conf)
@@ -865,6 +910,7 @@ def operation(request, id_camp=None):
return render(request, 'operation.html', kwargs)
+
def operation_search(request, id_camp=None):