views.py
131 lines
| 3.9 KiB
| text/x-python
|
PythonLexer
|
r79 | ||
|
r23 | import json | |
from django.contrib import messages | |||
|
r45 | from django.utils.safestring import mark_safe | |
|
r25 | from django.shortcuts import render, redirect, get_object_or_404, HttpResponse | |
|
r316 | from django.contrib.auth.decorators import login_required | |
|
r23 | ||
|
r172 | from apps.main.models import Experiment, Device | |
|
r25 | from apps.main.views import sidebar | |
|
r23 | ||
r346 | from .models import PedestalConfiguration | ||
from .forms import PedestalConfigurationForm, PedestalImportForm | |||
|
r23 | ||
|
r45 | def conf(request, conf_id): | |
|
r23 | ||
r346 | conf = get_object_or_404(PedestalConfiguration, pk=conf_id) | ||
|
r172 | ||
|
r23 | kwargs = {} | |
kwargs['dev_conf'] = conf | |||
r369 | |||
if conf.mode == 'position': | |||
kwargs['dev_conf_keys'] = ['mode', 'axis', 'angle'] | |||
elif conf.mode == 'speed': | |||
kwargs['dev_conf_keys'] = ['mode', 'axis', 'speed'] | |||
else: | |||
kwargs['dev_conf_keys'] = ['mode', 'axis', 'speed', 'angle', 'min_value', 'max_value'] | |||
|
r172 | ||
|
r316 | kwargs['title'] = 'Configuration' | |
kwargs['suptitle'] = 'Detail' | |||
|
r172 | ||
|
r23 | kwargs['button'] = 'Edit Configuration' | |
r350 | |||
conf.status_device() | |||
|
r23 | ###### SIDEBAR ###### | |
|
r85 | kwargs.update(sidebar(conf=conf)) | |
|
r172 | ||
r346 | return render(request, 'pedestal_conf.html', kwargs) | ||
|
r23 | ||
|
r316 | @login_required | |
|
r45 | def conf_edit(request, conf_id): | |
r360 | |||
r346 | conf = get_object_or_404(PedestalConfiguration, pk=conf_id) | ||
r368 | |||
|
r23 | if request.method=='GET': | |
r368 | |||
r346 | form = PedestalConfigurationForm(instance=conf) | ||
r369 | if conf.mode == 'position': | ||
form.fields['speed'].disabled = True | |||
form.fields['max_value'].disabled = True | |||
form.fields['min_value'].disabled = True | |||
elif conf.mode == 'speed': | |||
form.fields['angle'].disabled = True | |||
form.fields['max_value'].disabled = True | |||
form.fields['min_value'].disabled = True | |||
|
r172 | ||
|
r45 | elif request.method=='POST': | |
r368 | |||
|
r45 | line_data = {} | |
conf_data = {} | |||
|
r328 | clock_data = {} | |
|
r45 | extras = [] | |
r368 | |||
|
r45 | #classified post fields | |
r368 | |||
r369 | form = PedestalConfigurationForm(request.POST, instance=conf) | ||
|
r45 | ||
r346 | if form.is_valid(): | ||
|
r23 | form.save() | |
|
r172 | ||
r348 | messages.success(request, 'Pedestal configuration successfully updated') | ||
|
r172 | ||
return redirect(conf.get_absolute_url()) | |||
|
r23 | kwargs = {} | |
|
r25 | kwargs['dev_conf'] = conf | |
|
r23 | kwargs['form'] = form | |
|
r45 | kwargs['edit'] = True | |
|
r172 | ||
r346 | kwargs['title'] = 'Pedestal Configuration' | ||
|
r172 | kwargs['suptitle'] = 'Edit' | |
|
r23 | kwargs['button'] = 'Update' | |
|
r172 | ||
r346 | return render(request, 'pedestal_conf_edit.html', kwargs) | ||
|
r172 | ||
|
r45 | def import_file(request, conf_id): | |
|
r172 | ||
r346 | conf = get_object_or_404(PedestalConfiguration, pk=conf_id) | ||
|
r45 | if request.method=='POST': | |
r346 | form = PedestalImportForm(request.POST, request.FILES) | ||
|
r172 | if form.is_valid(): | |
|
r121 | try: | |
|
r264 | data = conf.import_from_file(request.FILES['file_name']) | |
conf.dict_to_parms(data) | |||
|
r45 | messages.success(request, 'Configuration "%s" loaded succesfully' % request.FILES['file_name']) | |
|
r111 | return redirect(conf.get_absolute_url_edit()) | |
|
r172 | ||
except Exception as e: | |||
|
r264 | messages.error(request, 'Error parsing file: "%s" - %s' % (request.FILES['file_name'], repr(e))) | |
|
r45 | else: | |
messages.warning(request, 'Your current configuration will be replaced') | |||
r346 | form = PedestalImportForm() | ||
|
r172 | ||
|
r45 | kwargs = {} | |
kwargs['form'] = form | |||
r346 | kwargs['title'] = 'Pedestal Configuration' | ||
|
r45 | kwargs['suptitle'] = 'Import file' | |
kwargs['button'] = 'Upload' | |||
kwargs['previous'] = conf.get_absolute_url() | |||
|
r172 | ||
r346 | return render(request, 'pedestal_import.html', kwargs) | ||
|
r316 | ||
r444 | @login_required | ||
def conf_reset(request, conf_id): | |||
conf = get_object_or_404(PedestalConfiguration, pk=conf_id) | |||
if conf.reset_device(): | |||
messages.success(request, conf.message) | |||
else: | |||
messages.error(request, conf.message) | |||
return redirect(conf.get_absolute_url()) | |||
|
r316 | def conf_raw(request, conf_id): | |
r346 | conf = get_object_or_404(PedestalConfiguration, pk=conf_id) | ||
|
r316 | raw = conf.write_device(raw=True) | |
return HttpResponse(raw, content_type='application/json') |