mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-03 20:02:47 +00:00 
			
		
		
		
	Make delete user function a background task
This commit is contained in:
		@@ -1,13 +1,12 @@
 | 
			
		||||
from flask import current_app, flash, redirect, render_template, url_for
 | 
			
		||||
from flask import flash, redirect, render_template, url_for
 | 
			
		||||
from flask_login import login_required
 | 
			
		||||
from threading import Thread
 | 
			
		||||
from . import admin
 | 
			
		||||
from .forms import EditUserForm
 | 
			
		||||
from .tables import AdminUserItem, AdminUserTable
 | 
			
		||||
from .. import db
 | 
			
		||||
from ..decorators import admin_required
 | 
			
		||||
from ..models import Role, User
 | 
			
		||||
from ..profile.background_functions import delete_user_
 | 
			
		||||
from ..profile import tasks as profile_tasks
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@admin.route('/')
 | 
			
		||||
@@ -39,9 +38,7 @@ def user(user_id):
 | 
			
		||||
@admin_required
 | 
			
		||||
def delete_user(user_id):
 | 
			
		||||
    user = User.query.get_or_404(user_id)
 | 
			
		||||
    thread = Thread(target=delete_user_,
 | 
			
		||||
                    args=(current_app._get_current_object(), user.id))
 | 
			
		||||
    thread.start()
 | 
			
		||||
    profile_tasks.delete_user(user_id)
 | 
			
		||||
    flash('User has been deleted!')
 | 
			
		||||
    return redirect(url_for('admin.index'))
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,9 +4,7 @@ from flask_login import UserMixin, AnonymousUserMixin
 | 
			
		||||
from itsdangerous import BadSignature, TimedJSONWebSignatureSerializer
 | 
			
		||||
from werkzeug.security import generate_password_hash, check_password_hash
 | 
			
		||||
from werkzeug.utils import secure_filename
 | 
			
		||||
from . import db, logger, login_manager
 | 
			
		||||
import os
 | 
			
		||||
import shutil
 | 
			
		||||
from . import db, login_manager
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Permission:
 | 
			
		||||
@@ -212,13 +210,6 @@ class User(UserMixin, db.Model):
 | 
			
		||||
            job.delete()
 | 
			
		||||
        for corpus in self.corpora:
 | 
			
		||||
            corpus.delete()
 | 
			
		||||
        path = os.path.join(current_app.config['NOPAQUE_STORAGE'],
 | 
			
		||||
                            str(self.id))
 | 
			
		||||
        try:
 | 
			
		||||
            shutil.rmtree(path)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            logger.warning(e)
 | 
			
		||||
            pass
 | 
			
		||||
        db.session.delete(self)
 | 
			
		||||
        db.session.commit()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
from ..models import User
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def delete_user_(app, user_id):
 | 
			
		||||
    with app.app_context():
 | 
			
		||||
        user = User.query.get(user_id)
 | 
			
		||||
        if user is None:
 | 
			
		||||
            raise Exception('User {} not found!'.format(user_id))
 | 
			
		||||
        user.delete()
 | 
			
		||||
							
								
								
									
										18
									
								
								app/profile/tasks.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								app/profile/tasks.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
from .. import logger
 | 
			
		||||
from ..decorators import background
 | 
			
		||||
from ..models import User
 | 
			
		||||
import os
 | 
			
		||||
import shutil
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@background
 | 
			
		||||
def delete_user(app, user_id):
 | 
			
		||||
    logger.warning('aufgerufen')
 | 
			
		||||
    with app.app_context():
 | 
			
		||||
        user = User.query.get(user_id)
 | 
			
		||||
        if user is None:
 | 
			
		||||
            raise Exception('User {} not found!'.format(user_id))
 | 
			
		||||
        logger.warning('deleting user')
 | 
			
		||||
        path = os.path.join(app.config['NOPAQUE_STORAGE'], str(user.id))
 | 
			
		||||
        shutil.rmtree(path, ignore_errors=True)
 | 
			
		||||
        user.delete()
 | 
			
		||||
@@ -1,8 +1,7 @@
 | 
			
		||||
from flask import current_app, flash, redirect, render_template, url_for
 | 
			
		||||
from flask import flash, redirect, render_template, url_for
 | 
			
		||||
from flask_login import current_user, login_required, logout_user
 | 
			
		||||
from threading import Thread
 | 
			
		||||
from . import profile
 | 
			
		||||
from .background_functions import delete_user_
 | 
			
		||||
from . import tasks
 | 
			
		||||
from .forms import EditEmailForm, EditGeneralSettingsForm, EditPasswordForm
 | 
			
		||||
from .. import db
 | 
			
		||||
 | 
			
		||||
@@ -56,9 +55,7 @@ def delete():
 | 
			
		||||
    """
 | 
			
		||||
    View to delete yourslef and all associated data.
 | 
			
		||||
    """
 | 
			
		||||
    thread = Thread(target=delete_user_,
 | 
			
		||||
                    args=(current_app._get_current_object(), current_user.id))
 | 
			
		||||
    thread.start()
 | 
			
		||||
    tasks.delete_user(current_user.id)
 | 
			
		||||
    logout_user()
 | 
			
		||||
    flash('Your account has been deleted!')
 | 
			
		||||
    return redirect(url_for('main.index'))
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,6 @@ services:
 | 
			
		||||
      - "./logs:/home/nopaqued/logs"
 | 
			
		||||
      - "../opaque_daemon/docker-entrypoint.sh:/usr/local/bin/docker-entrypoint.sh"
 | 
			
		||||
      - "../opaque_daemon/nopaqued.py:/home/nopaqued/nopaqued.py"
 | 
			
		||||
      - "../opaque_daemon/merge_corpus_files.py:/home/nopaqued/merge_corpus_files.py"
 | 
			
		||||
      - "../opaque_daemon/requirements.txt:/home/nopaqued/requirements.txt"
 | 
			
		||||
      - "$HOME/.docker:/home/nopaqued/.docker"
 | 
			
		||||
  db:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user