Add more form fields to corpus analysis

This commit is contained in:
Stephan Porada 2019-10-30 14:06:23 +01:00
parent 617cc06125
commit 0dc015b29c
4 changed files with 96 additions and 64 deletions

View File

@ -1,6 +1,6 @@
from flask_wtf import FlaskForm
from wtforms import (FileField, StringField, SubmitField,
ValidationError, IntegerField, SelectField)
ValidationError, IntegerField, SelectField, TextAreaField)
from wtforms.validators import DataRequired, Length
@ -26,7 +26,8 @@ class CreateCorpusForm(FlaskForm):
class QueryForm(FlaskForm):
query = StringField('CQP Query', validators=[DataRequired(), (Length(1, 1024))])
query = TextAreaField('CQP Query', validators=[DataRequired(),
(Length(1, 1024))])
hits_per_page = SelectField('Hits per page',
choices=[('', 'Nr. of hits per page'),
('10', '10'),
@ -34,8 +35,7 @@ class QueryForm(FlaskForm):
('30', '30'),
('40', '40'),
('50', '50')],
validators=[DataRequired()],
default='30')
validators=[DataRequired()])
context = SelectField('Context',
choices=[('', 'Words of context around hit'),
('5', '5'),
@ -43,10 +43,14 @@ class QueryForm(FlaskForm):
('15', '15'),
('20', '20'),
('25', '25')],
validators=[DataRequired()],
default='10')
validators=[DataRequired()])
submit = SubmitField('Start Query')
class QueryDownloadForm(FlaskForm):
pass
file_type = SelectField('File type',
choices=[('', 'Choose file type'),
('csv', 'csv'),
('json', 'json'),
('excel', 'excel')],
validators=[DataRequired()])

View File

@ -3,7 +3,7 @@ from flask import (abort, current_app, flash, redirect, request,
render_template, url_for, send_from_directory)
from flask_login import current_user, login_required
from . import main
from .forms import AddCorpusFileForm, CreateCorpusForm, QueryForm
from .forms import AddCorpusFileForm, CreateCorpusForm, QueryForm, QueryDownloadForm
from .. import db
from ..models import Corpus, CorpusFile, Job, JobInput, JobResult
from werkzeug.utils import secure_filename
@ -87,25 +87,35 @@ def corpus_download(corpus_id):
@main.route('/corpora/<int:corpus_id>/analysis', methods=['GET', 'POST'])
@login_required
def corpus_analysis(corpus_id):
logger = logging.getLogger(__name__)
corpus = Corpus.query.get_or_404(corpus_id)
query = request.args.get('query')
form = QueryForm()
logger.warning('Query first: {}'.format(query))
hits_per_page = request.args.get('hits_per_page', 30)
context = request.args.get('context', 10)
dl_form = QueryDownloadForm()
form = QueryForm(hits_per_page=hits_per_page, context=context, query=query)
if form.validate_on_submit():
logger = logging.getLogger(__name__)
logger.warning('Data has been sent!')
logger.warning('Data labels: {data}'.format(data=[data for data in form.data]))
logger.warning('Query: {q}'.format(q=form.query.data))
logger.warning('Query Second: {q}'.format(q=form.query.data))
logger.warning('Hits: {hits}'.format(hits=form.hits_per_page.data))
logger.warning('Context: {context}'.format(context=form.context.data))
flash('Query has been sent!')
query = form.query.data
logger.warning('Session query: {sq}'.format(sq=query))
return redirect(url_for('main.corpus_analysis', corpus_id=corpus_id,
query=query))
hits_per_page = form.hits_per_page.data
context = form.context.data
logger.warning('Query Thrid: {sq}'.format(sq=query))
return redirect(url_for('main.corpus_analysis',
corpus_id=corpus_id,
query=query,
hits_per_page=hits_per_page,
context=context))
return render_template('main/corpora/corpus_analysis.html.j2',
corpus=corpus,
form=form,
query=query,
dl_form=dl_form,
title='Corpus: ' + corpus.title)

View File

@ -80,4 +80,5 @@ indicator will show up how the column is sorted right now.; */
position: sticky;
top: 80px;
padding: 50px;
z-index: 999; /* tmp fix */
}

View File

@ -1,6 +1,73 @@
{% extends "full_width.html.j2" %}
{% block page_content %}
<div class="col s12 m3 l3 sticky">
<div class="card">
<form method="POST">
<div class="card-content">
{{ form.hidden_tag() }}
<span class="card-title">Query and analysis</span>
<br>
<div class="input-field">
{{ form.query(class='materialize-textarea') }}
{{ form.query.label }}
{% for error in form.query.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
<div class="right-align">
<button class="btn" type="submit" name="action">Start Query
<i class="material-icons left">search</i>
</button>
</div>
<br>
<span class="card-title">Help</span>
<ul>
<li>
<a href="http://cwb.sourceforge.net/files/CQP_Tutorial/">
CQP Query Language Tutorial</a>
</li>
</ul>
<br>
<span class="card-title">Options</span>
<br>
<div class="input-field">
<i class="material-icons prefix">format_list_numbered</i>
{{ form.hits_per_page() }}
{{ form.hits_per_page.label }}
{% for error in form.hits_per_page.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
<br>
<div class="input-field">
<i class="material-icons prefix">short_text</i>
{{ form.context() }}
{{ form.context.label }}
{% for error in form.context.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
<br>
</form>
<span class="card-title">Download Results</span>
<p>Downlaod all results of the current query as csv, excel or json file.</p>
<div class="input-field">
<i class="material-icons prefix">insert_drive_file</i>
{{ dl_form.file_type() }}
{{ dl_form.file_type.label }}
{% for error in dl_form.file_type.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
<div class="right-align">
<button class="btn" type="submit" name="action">Download
<i class="material-icons left">file_download</i>
</button>
</div>
</div>
</div>
</div>
<div class="col s12 m9 l9">
<div class="card">
<div class="card-content">
@ -27,54 +94,4 @@
</div>
</div>
</div>
<div class="col s12 m3 l3 sticky">
<div class="card">
<form method="POST">
<div class="card-content">
{{ form.hidden_tag() }}
<span class="card-title">Query and analysis</span>
<div class="input-field">
<i class="material-icons prefix">search</i>
<input autofocus size="1024" data-length="1024" id="{{ form.query.id }}" name="{{ form.query.id }}" required="" type="text" value="{{ query if query != None else '' }}"></input>
{{ form.query.label }}
{% for error in form.query.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
<div class="right-align">
{{ form.submit(class='btn') }}
</div>
<br>
<span class="card-title">Help</span>
<ul>
<li>
<a href="http://cwb.sourceforge.net/files/CQP_Tutorial/">
CQP Query Language Tutorial</a>
</li>
</ul>
<br>
<span class="card-title">Options</span>
<br>
<div class="input-field">
<i class="material-icons prefix">format_list_numbered</i>
{{ form.hits_per_page() }}
{{ form.hits_per_page.label }}
{% for error in form.hits_per_page.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
<br>
<div class="input-field">
<i class="material-icons prefix">short_text</i>
{{ form.context() }}
{{ form.context.label }}
{% for error in form.context.errors %}
<span class="helper-text red-text">{{ error }}</span>
{% endfor %}
</div>
<span class="card-title">Download Results</span>
</div>
</form>
</div>
</div>
{% endblock %}