From 7dd55c47a068c962511c2abb5ea9e40769a6a5ad Mon Sep 17 00:00:00 2001
From: Patrick Jentsch <p.jentsch@uni-bielefeld.de>
Date: Thu, 14 Nov 2019 13:19:05 +0100
Subject: [PATCH] Code update to new request system

---
 app/corpora/events.py                         | 42 ++++++++++---------
 app/templates/corpora/corpus_analysis.html.j2 |  2 +-
 2 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/app/corpora/events.py b/app/corpora/events.py
index a597f8e6..2f674028 100644
--- a/app/corpora/events.py
+++ b/app/corpora/events.py
@@ -29,8 +29,10 @@ def init_corpus_analysis(corpus_id):
     if not (corpus.creator == current_user or current_user.is_administrator()):
         socketio.emit('init_corpus_analysis', '[ERROR 403]: Forbidden',
                       room=request.sid)
-    if str(corpus_id) not in analysis_sessions:
-        analysis_sessions[str(corpus_id)] = [request.sid]
+    if corpus_id not in analysis_sessions:
+        analysis_sessions[corpus_id] = [request.sid]
+    else:
+        analysis_sessions[corpus_id].append(request.sid)
     socketio.start_background_task(observe_corpus_analysis_connection,
                                    current_app._get_current_object(),
                                    corpus_id, request.sid)
@@ -48,8 +50,8 @@ def recv_query(message):
     analysis_client.cqp_query(corpus, query_subcorpus, query)
     """ Evaluate query results """
     match_corpus = '{}:{}'.format(corpus, query_subcorpus)
-    match_num = analysis_client.cqp_subcorpus_size(match_corpus)
-    match_num = min(int(message['hits_per_page']) - 1, match_num)
+    match_num = min(int(message['hits_per_page']) - 1,
+                    analysis_client.cqp_subcorpus_size(match_corpus))
     if match_num == 0:
         print('No matches found.')
         exit()
@@ -63,9 +65,20 @@ def recv_query(message):
                            analysis_client.cqp_dump_subcorpus(match_corpus, CONST_FIELD_MATCHEND, 0, match_num - 1))
     matches = []
     for match_start, match_end in match_boundaries:
-        tokens = analysis_client.cl_cpos2str('{}.word'.format(corpus), range(match_start, match_end + 1))
-        pos = analysis_client.cl_cpos2str('{}.pos'.format(corpus), range(match_start, match_end + 1))
-        matches.append({'tokens': tokens, 'pos': pos})
+        matches.append({'cpos_list': list(range(match_start, match_end + 1))})
+    cpos_list = []
+    for match in matches:
+        cpos_list = cpos_list + match['cpos_list']
+    cpos_list = list(set(cpos_list))
+    pos_list = analysis_client.cl_cpos2str('{}.pos'.format(corpus), cpos_list)
+    word_list = analysis_client.cl_cpos2str('{}.word'.format(corpus), cpos_list)
+    foo = {}
+    for cpos, pos, word in zip(cpos_list, pos_list, word_list):
+        foo[cpos] = {'pos': pos, 'word': word}
+    for match in matches:
+        match['pos_list'] = [foo[cpos]['pos'] for cpos in match['cpos_list']]
+        match['word_list'] = [foo[cpos]['word'] for cpos in match['cpos_list']]
+        match.pop('cpos_list', None)
     logger.warning(matches)
     socketio.emit('query_results', matches, room=request.sid)
 
@@ -81,20 +94,11 @@ def observe_corpus_analysis_connection(app, corpus_id, session_id):
         analysis_clients[session_id] = analysis_client
         socketio.emit('init_corpus_analysis', 'Ready', room=session_id)
         while session_id in connected_sessions:
-            '''
-            try:
-                analysis_client.ctrl_ping()
-            except Exception as err:
-                logger.warning('[Exception]: {}'.format(err))
-                break
-            else:
-                socketio.sleep(3)
-            '''
             socketio.sleep(3)
         analysis_client.ctrl_bye()
         analysis_clients.pop(session_id, None)
-        analysis_sessions[str(corpus_id)].remove(session_id)
-        if not analysis_sessions[str(corpus_id)]:
-            analysis_sessions.pop(str(corpus_id), None)
+        analysis_sessions[corpus_id].remove(session_id)
+        if not analysis_sessions[corpus_id]:
+            analysis_sessions.pop(corpus_id, None)
             corpus.status = 'stop analysis'
             db.session.commit()
diff --git a/app/templates/corpora/corpus_analysis.html.j2 b/app/templates/corpora/corpus_analysis.html.j2
index ed35532a..b4837650 100644
--- a/app/templates/corpora/corpus_analysis.html.j2
+++ b/app/templates/corpora/corpus_analysis.html.j2
@@ -78,7 +78,7 @@ socket.on('query_results', function(json_results) {
   console.log(json_results)
   var queryResultsElement = document.getElementById("query-results");
   for (let json_result of json_results) {
-    queryResultsElement.innerHTML += json_result['tokens'] + '<br>';
+    queryResultsElement.innerHTML += json_result['word_list'] + '<br>';
   }
 });
 </script>
-- 
GitLab