Manage ASL magazines and their articles.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
asl-articles/asl_articles/search.py

68 lines
2.1 KiB

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