diff --git a/files/helpers/contentsorting.py b/files/helpers/contentsorting.py index df35692ed..f2b9f92f7 100644 --- a/files/helpers/contentsorting.py +++ b/files/helpers/contentsorting.py @@ -65,7 +65,7 @@ def sort_objects(objects: Query, sort: str, cls): # Presently designed around files.helpers.get.get_comment_trees_eager # Behavior should parallel that of sort_objects above. TODO: Unify someday? -def sort_comment_results(comments: Iterable[Comment], sort:str, **kwargs): +def sort_comment_results(comments: Iterable[Comment], sort:str, *, pins:bool=False): """ Sorts comments results from `files.helpers.get.get_comments_trees_eager` :param comments: Comments to sort @@ -98,8 +98,7 @@ def sort_comment_results(comments: Iterable[Comment], sort:str, **kwargs): else: # default, or sort == 'new' key_func = lambda c: -c.created_utc - if kwargs.get('pins', True): - key_func = lambda c: ( + key_func_pinned = lambda c: ( (c.is_pinned is None, c.is_pinned == '', c.is_pinned), # sort None last key_func(c)) - return sorted(comments, key=key_func) + return sorted(comments, key=key_func_pinned if pins else key_func) diff --git a/files/helpers/get.py b/files/helpers/get.py index 1ee8bc177..a40681516 100644 --- a/files/helpers/get.py +++ b/files/helpers/get.py @@ -279,7 +279,7 @@ def get_comments( def get_comment_trees_eager( query_filter_callable: Callable[[Query], Query], sort: str="old", - v: Optional[User]=None) -> List[Comment]: + v: Optional[User]=None) -> tuple[list[Comment], defaultdict[Comment, list[Comment]]]: if v: votes = g.db.query(CommentVote).filter_by(user_id=v.id).subquery() @@ -336,7 +336,7 @@ def get_comment_trees_eager( for parent_id in comments_map_parent: comments_map_parent[parent_id] = sort_comment_results( - comments_map_parent[parent_id], sort) + comments_map_parent[parent_id], sort, pins=True) if parent_id in comments_map: comments_map[parent_id].replies2 = comments_map_parent[parent_id]