From c7337a52775692023862d0dfbf5f4649d28fbb70 Mon Sep 17 00:00:00 2001 From: Stephan Porada <sporada@uni-bielefeld.de> Date: Wed, 11 Sep 2019 14:51:59 +0200 Subject: [PATCH] Add first stopping and deletion functions etc. --- app/auth/views.py | 10 +++++----- app/models.py | 25 +++++++++++++++++++++++++ app/templates/main/jobs/job.html.j2 | 16 ++++++++++++++++ 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/app/auth/views.py b/app/auth/views.py index 69d3570f..3e453ecd 100644 --- a/app/auth/views.py +++ b/app/auth/views.py @@ -4,7 +4,7 @@ from . import auth from .. import db from .forms import ChangePasswordForm, LoginForm, PasswordResetForm, PasswordResetRequestForm, RegistrationForm, EditProfileForm from ..email import send_email -from ..models import User +from ..models import User, Job @auth.route('/login', methods=['GET', 'POST']) @@ -162,11 +162,11 @@ def edit_profile(): ) -@auth.route('/edit_profile/delete_self/<int:user_id>', methods=['GET', 'POST']) +@auth.route('/edit_profile/delete_self', methods=['GET', 'POST']) @login_required -def delete_self(user_id): - selected_user = User.query.filter_by(id=user_id).first() - db.session.delete(selected_user) +def delete_self(): + user = current_user + db.session.delete(user) db.session.commit() flash('Your account has been deleted!') return redirect(url_for('main.index')) diff --git a/app/models.py b/app/models.py index 59f2bcd3..a59a6a95 100644 --- a/app/models.py +++ b/app/models.py @@ -216,6 +216,15 @@ class User(UserMixin, db.Model): jobs[str(job.id)] = job.to_dict() return jobs + def delete_user(self, user_id): + """ + Delete user from database. Also delete all associated jobs and corpora + files. + """ + user = User.query.filter_by(user_id=user_id) + db.session.delete(user) + db.session.commit() + class AnonymousUser(AnonymousUserMixin): """ @@ -276,6 +285,22 @@ class Job(db.Model): 'title': self.title, 'user_id': self.user_id} + def flag_for_stop(self): + """ + Flag running or failed job (anything that is not completed) with + stopping. Opaque daemon will end services flaged with 'stopping'. + """ + self.status = 'stopping' + db.session.commit() + + def delete_job(self, job_id): + """ + Delete job with given job id from database. Also delete associated job + files + """ + # TODO + pass + class Corpus(db.Model): """ diff --git a/app/templates/main/jobs/job.html.j2 b/app/templates/main/jobs/job.html.j2 index 2c582a75..63110075 100644 --- a/app/templates/main/jobs/job.html.j2 +++ b/app/templates/main/jobs/job.html.j2 @@ -99,11 +99,27 @@ </script> <div class="col s12 m4"> + <h2>Status:</h2> <h3 id="title"></h3> <p id="description"></p> <a class="waves-effect waves-light btn" id="status"></a> + <h2>Actions:</h2> + <!-- Confirm deletion of selected user with modal dialogue + Modal Trigger--> + <a href="#modal-confirm-delete" class="waves-effect waves-light btn red modal-trigger"><i class="material-icons left">delete</i>Delete Job</a> + <!-- Modal Strucutre --> + <div id="modal-confirm-delete" class="modal"> + <div class="modal-content"> + <h4>Confirm deletion</h4> + <p>Do you really want to delete the job {{job.title}}?</p> + </div> + <div class="modal-footer"> + <a href="{{ url_for('main.delete_job', job_id=job.id) }}" class="modal-close waves-effect waves-green btn red"><i class="material-icons left">delete</i>Delete Job</a></a> + </div> + </div> </div> + <div class="col s12 m8"> <div class="card"> <div class="card-content"> -- GitLab