Source code for search.controllers.simple.forms
"""Provides form rendering and validation for the simple search feature."""
from datetime import date
from wtforms import Form, BooleanField, StringField, SelectField, validators, \
FormField, SelectMultipleField, DateField, ValidationError, FieldList, \
widgets, RadioField
from wtforms.fields import HiddenField
from search.controllers.util import does_not_start_with_wildcard, \
has_balanced_quotes, strip_white_space
from ...domain import Query
[docs]class SimpleSearchForm(Form):
"""Provides a simple field-query search form."""
searchtype = SelectField("Field", choices=Query.SUPPORTED_FIELDS)
query = StringField('Search or Article ID',
filters=[strip_white_space],
validators=[does_not_start_with_wildcard,
has_balanced_quotes])
size = SelectField('results per page', default=50, choices=[
('25', '25'),
('50', '50'),
('100', '100'),
('200', '200')
])
order = SelectField('Sort results by', choices=[
('-announced_date_first', 'Announcement date (newest first)'),
('announced_date_first', 'Announcement date (oldest first)'),
('-submitted_date', 'Submission date (newest first)'),
('submitted_date', 'Submission date (oldest first)'),
('', 'Relevance')
], validators=[validators.Optional()], default='-announced_date_first')
HIDE_ABSTRACTS = 'hide'
SHOW_ABSTRACTS = 'show'
abstracts = RadioField('Abstracts', choices=[
(SHOW_ABSTRACTS, 'Show abstracts'),
(HIDE_ABSTRACTS, 'Hide abstracts')
], default=SHOW_ABSTRACTS)
[docs] def validate_query(form: Form, field: StringField) -> None:
"""Validate the length of the querystring, if searchtype is set."""
if form.searchtype.data is None or form.searchtype.data == 'None':
return
if not form.query.data or len(form.query.data) < 1:
raise validators.ValidationError(
'Field must be at least 1 character long.'
)