Change corpus analysis init behavior

This commit is contained in:
Patrick Jentsch
2020-01-27 13:18:54 +01:00
parent cd02046590
commit 2c0f009e7c
3 changed files with 448 additions and 21 deletions

View File

@ -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)

View File

@ -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'),