Sort articles properly when showing them with their publication.

master
Pacman Ghost 4 years ago
parent 5007f87e8c
commit e783d17d95
  1. 6
      asl_articles/articles.py
  2. 7
      asl_articles/publications.py
  3. 5
      asl_articles/search.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"] )

@ -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
# ---------------------------------------------------------------------

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

Loading…
Cancel
Save