|
|
|
""" Handle search requests. """
|
|
|
|
|
|
|
|
import logging
|
|
|
|
|
|
|
|
from flask import request, jsonify
|
|
|
|
|
|
|
|
from asl_articles import app
|
|
|
|
from asl_articles.models import Publisher, Publication, Article
|
|
|
|
from asl_articles.publishers import get_publisher_vals
|
|
|
|
from asl_articles.publications import get_publication_vals
|
|
|
|
from asl_articles.articles import get_article_vals
|
|
|
|
|
|
|
|
_logger = logging.getLogger( "search" )
|
|
|
|
|
|
|
|
# ---------------------------------------------------------------------
|
|
|
|
|
|
|
|
@app.route( "/search", methods=["POST"] )
|
|
|
|
def search():
|
|
|
|
"""Run a search query."""
|
|
|
|
|
|
|
|
# initialize
|
|
|
|
query_string = request.json.get( "query" ).strip()
|
|
|
|
_logger.debug( "SEARCH: [%s]", query_string )
|
|
|
|
results = []
|
|
|
|
|
|
|
|
# return all publishers
|
|
|
|
query = Publisher.query
|
|
|
|
if query_string:
|
|
|
|
query = query.filter(
|
|
|
|
Publisher.publ_name.ilike( "%{}%".format( query_string ) )
|
|
|
|
)
|
|
|
|
query = query.order_by( Publisher.publ_name.asc() )
|
|
|
|
publishers = query.all()
|
|
|
|
_logger.debug( "- Found: %s", " ; ".join( str(p) for p in publishers ) )
|
|
|
|
for publ in publishers:
|
|
|
|
publ = get_publisher_vals( publ )
|
|
|
|
publ["type"] = "publisher"
|
|
|
|
results.append( publ )
|
|
|
|
|
|
|
|
# return all publications
|
|
|
|
query = Publication.query
|
|
|
|
if query_string:
|
|
|
|
query = query.filter(
|
|
|
|
Publication.pub_name.ilike( "%{}%".format( query_string ) )
|
|
|
|
)
|
|
|
|
query = query.order_by( Publication.pub_name.asc() )
|
|
|
|
publications = query.all()
|
|
|
|
_logger.debug( "- Found: %s", " ; ".join( str(p) for p in publications ) )
|
|
|
|
for pub in publications:
|
|
|
|
pub = get_publication_vals( pub )
|
|
|
|
pub[ "type" ] = "publication"
|
|
|
|
results.append( pub )
|
|
|
|
|
|
|
|
# return all articles
|
|
|
|
query = Article.query
|
|
|
|
if query_string:
|
|
|
|
query = query.filter(
|
|
|
|
Article.article_title.ilike( "%{}%".format( query_string ) )
|
|
|
|
)
|
|
|
|
query = query.order_by( Article.article_title.asc() )
|
|
|
|
articles = query.all()
|
|
|
|
_logger.debug( "- Found: %s", " ; ".join( str(a) for a in articles ) )
|
|
|
|
for article in articles:
|
|
|
|
article = get_article_vals( article )
|
|
|
|
article[ "type" ] = "article"
|
|
|
|
results.append( article )
|
|
|
|
|
|
|
|
return jsonify( results )
|