mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-03 20:02:47 +00:00 
			
		
		
		
	Change corpus analysis init behavior
This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
			
		||||
from app import db, logger, socketio
 | 
			
		||||
from app.events import connected_sessions
 | 
			
		||||
from app.models import Corpus
 | 
			
		||||
from app.models import Corpus, User
 | 
			
		||||
from flask import current_app, request
 | 
			
		||||
from flask_login import current_user, login_required
 | 
			
		||||
from .CQiWrapper.CQiWrapper import CQiWrapper
 | 
			
		||||
@@ -17,21 +17,13 @@ corpus_analysis_sessions = {}
 | 
			
		||||
corpus_analysis_clients = {}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@socketio.on('request_corpus_analysis')
 | 
			
		||||
@socketio.on('corpus_analysis_init')
 | 
			
		||||
@login_required
 | 
			
		||||
def request_corpus_analysis(corpus_id):
 | 
			
		||||
    corpus = Corpus.query.get(corpus_id)
 | 
			
		||||
    if corpus is None:
 | 
			
		||||
        socketio.emit('init_corpus_analysis', '[404]: Not Found',
 | 
			
		||||
                      room=request.sid)
 | 
			
		||||
    elif not (corpus.creator == current_user
 | 
			
		||||
              or current_user.is_administrator()):
 | 
			
		||||
        socketio.emit('init_corpus_analysis', '[403]: Forbidden',
 | 
			
		||||
                      room=request.sid)
 | 
			
		||||
    else:
 | 
			
		||||
        socketio.start_background_task(corpus_analysis_session_handler,
 | 
			
		||||
                                       current_app._get_current_object(),
 | 
			
		||||
                                       corpus_id, request.sid)
 | 
			
		||||
def init_corpus_analysis(corpus_id):
 | 
			
		||||
    logger.warning("a")
 | 
			
		||||
    socketio.start_background_task(corpus_analysis_session_handler,
 | 
			
		||||
                                   current_app._get_current_object(),
 | 
			
		||||
                                   corpus_id, current_user.id, request.sid)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@socketio.on('corpus_analysis')
 | 
			
		||||
@@ -91,10 +83,21 @@ def inspect_match(message):
 | 
			
		||||
    socketio.emit('match_context', match_context, room=request.sid)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def corpus_analysis_session_handler(app, corpus_id, session_id):
 | 
			
		||||
def corpus_analysis_session_handler(app, corpus_id, user_id, session_id):
 | 
			
		||||
    with app.app_context():
 | 
			
		||||
        ''' Setup analysis session '''
 | 
			
		||||
        corpus = Corpus.query.get(corpus_id)
 | 
			
		||||
        user = User.query.get(user_id)
 | 
			
		||||
        if corpus is None:
 | 
			
		||||
            logger.warning("404")
 | 
			
		||||
            response = {'code': 404, 'msg': 'Not Found'}
 | 
			
		||||
            socketio.emit('corpus_analysis_init', response, room=session_id)
 | 
			
		||||
            return
 | 
			
		||||
        elif not (corpus.creator == user or user.is_administrator()):
 | 
			
		||||
            logger.warning("403")
 | 
			
		||||
            response = {'code': 403, 'msg': 'Forbidden'}
 | 
			
		||||
            socketio.emit('corpus_analysis_init', response, room=session_id)
 | 
			
		||||
            return
 | 
			
		||||
        while corpus.status != 'analysing':
 | 
			
		||||
            db.session.refresh(corpus)
 | 
			
		||||
            socketio.sleep(3)
 | 
			
		||||
@@ -105,8 +108,8 @@ def corpus_analysis_session_handler(app, corpus_id, session_id):
 | 
			
		||||
            corpus_analysis_sessions[corpus_id] = [session_id]
 | 
			
		||||
        else:
 | 
			
		||||
            corpus_analysis_sessions[corpus_id].append(session_id)
 | 
			
		||||
        socketio.emit('request_corpus_analysis', '[201]: Created',
 | 
			
		||||
                      room=session_id)
 | 
			
		||||
        response = {'code': 201, 'msg': 'Created'}
 | 
			
		||||
        socketio.emit('corpus_analysis_init', response, room=session_id)
 | 
			
		||||
        ''' Observe analysis session '''
 | 
			
		||||
        while session_id in connected_sessions:
 | 
			
		||||
            socketio.sleep(3)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
from flask_wtf import FlaskForm
 | 
			
		||||
from wtforms import (FileField, StringField, SubmitField,
 | 
			
		||||
                     ValidationError, IntegerField, SelectField, TextAreaField)
 | 
			
		||||
from wtforms import (BooleanField, FileField, StringField, SubmitField,
 | 
			
		||||
                     ValidationError, IntegerField, SelectField)
 | 
			
		||||
from wtforms.validators import DataRequired, Length
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -50,7 +50,8 @@ class EditCorpusFileForm(FlaskForm):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class QueryForm(FlaskForm):
 | 
			
		||||
    query = StringField('CQP Query',
 | 
			
		||||
    expert_mode = BooleanField('Expert mode')
 | 
			
		||||
    query = StringField('Query',
 | 
			
		||||
                        validators=[DataRequired(), Length(1, 1024)])
 | 
			
		||||
    hits_per_page = SelectField('Hits per page',
 | 
			
		||||
                                choices=[('', 'Nr. of hits per page'),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user