Add delete functions for jobs and users.

This commit is contained in:
Stephan Porada
2019-09-17 14:36:15 +02:00
parent 683b59bb47
commit 09f7d7ac68
4 changed files with 67 additions and 25 deletions

View File

@ -1,10 +1,14 @@
from flask import flash, redirect, render_template, request, url_for
from flask import (flash, redirect, render_template, request, url_for,
current_app)
from flask_login import current_user, login_required, login_user, logout_user
from . import auth
from .. import db
from .forms import ChangePasswordForm, LoginForm, PasswordResetForm, PasswordResetRequestForm, RegistrationForm, EditProfileForm
from .forms import (ChangePasswordForm, LoginForm, PasswordResetForm,
PasswordResetRequestForm, RegistrationForm, EditProfileForm)
from ..email import send_email
from ..models import User, Job
import logging
import threading
@auth.route('/login', methods=['GET', 'POST'])
@ -165,8 +169,30 @@ def settings():
@auth.route('/settings/delete_self', methods=['GET', 'POST'])
@login_required
def delete_self():
user = current_user
db.session.delete(user)
logger = logging.getLogger(__name__)
def background_delete(app, current_user_id):
with app.app_context():
logger.warning('Called by delete_thread.')
logger.warning('User id is: {}.'.format(current_user_id))
jobs = Job.query.join(User).filter_by(id=current_user_id).all()
logger.warning('Jobs to delete are: {}'.format(jobs))
for job in jobs:
job.flag_for_stop()
logger.warning('Job status: {}'.format(job.status))
deleted = False
while deleted is False:
db.session.refresh(job)
if job.status == 'deleted':
logger.warning('Job status is deleted.')
job.delete_job()
deleted = True
delete_thread = threading.Thread(target=background_delete,
args=(current_app._get_current_object(),
current_user.id))
delete_thread.start()
db.session.delete(current_user)
db.session.commit()
flash('Your account has been deleted!')
return redirect(url_for('main.index'))