From 6e4f63bb521e2bf722c6b87719316379f878db12 Mon Sep 17 00:00:00 2001 From: Stefano Alberto Russo <stefano.russo@gmail.com> Date: Fri, 1 May 2020 18:21:11 +0200 Subject: [PATCH] Added support for editing computing confs. --- .../templates/components/computing.html | 6 +- .../base_app/templates/computings.html | 4 +- .../templates/edit_computing_conf.html | 70 ++++++++++ .../webapp/code/rosetta/base_app/views.py | 121 +++++++++++++++++- services/webapp/code/rosetta/urls.py | 1 + 5 files changed, 195 insertions(+), 7 deletions(-) create mode 100644 services/webapp/code/rosetta/base_app/templates/edit_computing_conf.html diff --git a/services/webapp/code/rosetta/base_app/templates/components/computing.html b/services/webapp/code/rosetta/base_app/templates/components/computing.html index e918725..c3f29ee 100644 --- a/services/webapp/code/rosetta/base_app/templates/components/computing.html +++ b/services/webapp/code/rosetta/base_app/templates/components/computing.html @@ -1,4 +1,4 @@ - <table class="dashboard"> + <table class="dashboard" style="max-width:500px"> <tr> <td><b>ID</b></td> @@ -22,12 +22,12 @@ <tr> <td><b>Sys Conf</b></td> - <td>{{ computing.sys_conf_data }}</td> + <td>{{ computing.sys_conf_data }} {% if request.user.is_superuser %} [<a href="/edit_computing_conf?type=sys&computing_uuid={{ computing.uuid}}">Edit</a>] {% endif %}</td> </tr> <tr> <td><b>User Conf</b></td> - <td>{{ computing.user_conf_data }}</td> + <td>{{ computing.user_conf_data }} [<a href="/edit_computing_conf?type=user&computing_uuid={{ computing.uuid}}">Edit</a>]</td> </tr> diff --git a/services/webapp/code/rosetta/base_app/templates/computings.html b/services/webapp/code/rosetta/base_app/templates/computings.html index b6dbb3f..56271a1 100644 --- a/services/webapp/code/rosetta/base_app/templates/computings.html +++ b/services/webapp/code/rosetta/base_app/templates/computings.html @@ -27,8 +27,8 @@ {% endfor %} - <br /> - <a href="/add_computing">Add new...</a> + <!-- <br /> + <a href="/add_computing">Add new...</a> --> {% endif %} <br /> diff --git a/services/webapp/code/rosetta/base_app/templates/edit_computing_conf.html b/services/webapp/code/rosetta/base_app/templates/edit_computing_conf.html new file mode 100644 index 0000000..67032cb --- /dev/null +++ b/services/webapp/code/rosetta/base_app/templates/edit_computing_conf.html @@ -0,0 +1,70 @@ +{% load static %} +{% include "header.html" %} +{% include "navigation.html" with main_path='/main/' %} + +<br/> +<br/> + +<div class="container"> + <div class="dashboard"> + <div class="span8 offset2"> + <h1>Edit computing conf</h1> + <hr> + + + <h4>Edit the configuration in JSON format for {{ data.computing }}</h4> + + <br/> + + <form action="/edit_computing_conf/" method="POST"> + {% csrf_token %} + <input type="hidden" name="type" value="{{ data.type }}"> + <input type="hidden" name="computing_uuid" value="{{ data.computing.uuid }}"> + <table class="dashboard" style="max-width:430px"> + + <tr> + <td> + <textarea name="new_conf" style="height:300px; width:500px"> +{{ data.computing_conf_data}} + </textarea> + </td> + </tr> + + {% if data.saved %} + <tr> + <td colspan=2 align=center style="padding:0px"> + <font color="green">Saved</font> + </td> + </tr> + {% endif %} + + <tr> + <td colspan=2 align=center style="padding:20px"> + <input type="submit" value="Save"> + </td> + </tr> + + </table> + </form> + + <br/> + <br/> + <br/> + <br/> + <br/> + <br/> + <br/> + <br/> + <br/> + + </div> + </div> +</div> + +{% include "footer.html" %} + + + + + + diff --git a/services/webapp/code/rosetta/base_app/views.py b/services/webapp/code/rosetta/base_app/views.py index af2fd9d..8ae2bce 100644 --- a/services/webapp/code/rosetta/base_app/views.py +++ b/services/webapp/code/rosetta/base_app/views.py @@ -1,4 +1,5 @@ import uuid +import json import subprocess from django.conf import settings from django.shortcuts import render @@ -6,7 +7,7 @@ from django.contrib.auth import authenticate, login, logout from django.http import HttpResponse, HttpResponseRedirect from django.contrib.auth.models import User from django.shortcuts import redirect -from .models import Profile, LoginToken, Task, TaskStatuses, Container, Computing, Keys +from .models import Profile, LoginToken, Task, TaskStatuses, Container, Computing, Keys, ComputingSysConf, ComputingUserConf from .utils import send_email, format_exception, timezonize, os_shell, booleanize, debug_param from .decorators import public_view, private_view from .exceptions import ErrorMessage @@ -715,7 +716,7 @@ def computings(request): #========================= -# Add Compute view +# Add Computing view #========================= @private_view @@ -730,3 +731,119 @@ def add_computing(request): return render(request, 'add_computing.html', {'data': data}) + + + +#========================= +# Edit Computing conf view +#========================= + +@private_view +def edit_computing_conf(request): + + # Init data + data={} + data['user'] = request.user + data['profile'] = Profile.objects.get(user=request.user) + data['title'] = 'Add computing' + + # Get computing conf type + computing_conf_type = request.GET.get('type', request.POST.get('type', None)) + if not computing_conf_type: + raise Exception('Missing type') + + # Get computing uuid + computing_uuid = request.GET.get('computing_uuid', request.POST.get('computing_uuid', None)) + if not computing_uuid: + raise Exception('Missing computing_uuid') + + new_conf = request.POST.get('new_conf', None) + + + if computing_conf_type == 'sys': + + data['type'] = 'sys' + + if not request.user.is_superuser: + raise Exception('Cannot edit sys conf as not superuser') + + # Get computing + try: + computing = Computing.objects.get(uuid=computing_uuid) + data['computing'] = computing + except ComputingSysConf.DoesNotExist: + raise Exception('Unknown computing "{}"'.format(computing_uuid)) + + # Get computing conf + computingSysConf = ComputingSysConf.objects.get(computing=computing) + + # Edit conf? + if new_conf: + new_conf_data = json.loads(new_conf) + logger.debug('Setting new conf data for sys conf "{}": "{}"'.format(computingSysConf.uuid, new_conf_data)) + computingSysConf.data = new_conf_data + computingSysConf.save() + data['saved'] = True + + # Dump conf data for the webpage + data['computing_conf_data'] = json.dumps(computingSysConf.data) + + elif computing_conf_type == 'user': + + data['type'] = 'user' + + # Get computing + try: + computing = Computing.objects.get(uuid=computing_uuid) + data['computing'] = computing + except ComputingUserConf.DoesNotExist: + raise Exception('Unknown computing "{}"'.format(computing_uuid)) + + # Get computing conf + computingUserConf = ComputingUserConf.objects.get(computing=computing) + + # Edit conf? + if new_conf: + new_conf_data = json.loads(new_conf) + logger.debug('Setting new conf data for user conf "{}": "{}"'.format(computingUserConf.uuid, new_conf_data)) + computingUserConf.data = new_conf_data + computingUserConf.save() + data['saved'] = True + + # Dump conf data for the webpage + data['computing_conf_data'] = json.dumps(computingUserConf.data) + + + else: + raise Exception('Unknown computing conf type "{}"'.format(computing_conf_type)) + + + return render(request, 'edit_computing_conf.html', {'data': data}) + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/services/webapp/code/rosetta/urls.py b/services/webapp/code/rosetta/urls.py index 25b14bf..26ca460 100644 --- a/services/webapp/code/rosetta/urls.py +++ b/services/webapp/code/rosetta/urls.py @@ -45,6 +45,7 @@ urlpatterns = [ url(r'^task_log/$', base_app_views.task_log), url(r'^computings/$', base_app_views.computings), url(r'^add_computing/$', base_app_views.add_computing), + url(r'^edit_computing_conf/$', base_app_views.edit_computing_conf), url(r'^containers/$', base_app_views.containers), url(r'^add_container/$', base_app_views.add_container), -- GitLab