diff --git a/asl_articles/articles.py b/asl_articles/articles.py index 4ea6094..3e6cbf1 100644 --- a/asl_articles/articles.py +++ b/asl_articles/articles.py @@ -61,6 +61,12 @@ def get_article_vals( article, add_type=False ): vals[ "type" ] = "article" return vals +def get_article_sort_key( article ): + """Get an article's sort key.""" + # NOTE: This is used to sort articles within their parent publication. + # NOTE: Articles should always have a seq# but sometimes they might not (e.g. created via a fixture). + return 999 if article.article_seqno is None else article.article_seqno + # --------------------------------------------------------------------- @app.route( "/article/create", methods=["POST"] ) diff --git a/asl_articles/publications.py b/asl_articles/publications.py index b831f54..517fdff 100644 --- a/asl_articles/publications.py +++ b/asl_articles/publications.py @@ -8,7 +8,7 @@ from flask import request, jsonify, abort from asl_articles import app, db from asl_articles.models import Publication, PublicationImage, Article -from asl_articles.articles import get_article_vals +from asl_articles.articles import get_article_vals, get_article_sort_key from asl_articles.tags import do_get_tags from asl_articles import search from asl_articles.utils import get_request_args, clean_request_args, clean_tags, encode_tags, decode_tags, \ @@ -63,14 +63,15 @@ def get_publication_vals( pub, include_articles, add_type=False ): "time_created": int( pub.time_created.timestamp() ) if pub.time_created else None, } if include_articles: - articles = sorted( pub.articles, key=lambda a: 999 if a.article_seqno is None else a.article_seqno ) - vals[ "articles" ] = [ get_article_vals(a) for a in articles ] + articles = sorted( pub.articles, key=get_article_sort_key ) + vals[ "articles" ] = [ get_article_vals( a ) for a in articles ] if add_type: vals[ "type" ] = "publication" return vals def get_publication_sort_key( pub ): """Get a publication's sort key.""" + # NOTE: This is used to sort publications within their parent publisher. return int( pub.time_created.timestamp() ) if pub.time_created else 0 # --------------------------------------------------------------------- diff --git a/asl_articles/search.py b/asl_articles/search.py index 9f28774..d9aa477 100644 --- a/asl_articles/search.py +++ b/asl_articles/search.py @@ -16,7 +16,7 @@ from asl_articles import app, db from asl_articles.models import Publisher, Publication, Article, Author, Scenario, get_model_from_table_name from asl_articles.publishers import get_publisher_vals from asl_articles.publications import get_publication_vals, get_publication_sort_key -from asl_articles.articles import get_article_vals +from asl_articles.articles import get_article_vals, get_article_sort_key from asl_articles.utils import decode_tags, to_bool _search_index_path = None @@ -129,7 +129,8 @@ def search_publication( pub_id ): if not pub: abort( 404 ) results = [ get_publication_vals( pub, True, True ) ] - for article in pub.articles: + articles = sorted( pub.articles, key=get_article_sort_key ) + for article in articles: results.append( get_article_vals( article, True ) ) return jsonify( results )