From ca15a18c53e93f05f7f88de327ad5ec2ee1790ca Mon Sep 17 00:00:00 2001 From: Trent Palmer Date: Wed, 24 Nov 2021 16:59:32 -0800 Subject: [PATCH] extend get_themes_orderedby_cname() in test/database.py --- test/database.py | 8 +++++--- test/theme_compare.py | 12 +++++++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/test/database.py b/test/database.py index 417a9f2..16cc926 100644 --- a/test/database.py +++ b/test/database.py @@ -2,7 +2,8 @@ from rank_hugo_themes import ( engine, Hugothemes, Hugothemes_from_gitlab, sessionmaker ) -from sqlalchemy import asc, func +from test.theme_compare import cname_compare +from functools import cmp_to_key def get_theme_count(): @@ -36,8 +37,9 @@ def get_newest_update_time_from_gitlab(): def get_themes_orderedby_cname(): session = sessionmaker(bind=engine)() - return session.query( - Hugothemes).order_by(asc(func.lower(Hugothemes.cname))).all() + result = session.query(Hugothemes).all() + result.sort(key=cmp_to_key(lambda a, b: cname_compare(a, b))) + return result def get_themes_as_dicts_of_sortable_columns(): diff --git a/test/theme_compare.py b/test/theme_compare.py index 286a575..204264a 100644 --- a/test/theme_compare.py +++ b/test/theme_compare.py @@ -17,7 +17,10 @@ def semver_split(item): def compare_theme(x, y, sort_key): if sort_key == 'sortByName': - return compare_jk(y['name'].lower(), x['name'].lower()) + if y['name'].lower() == x['name'].lower(): + return compare_jk(x['name'], y['name']) + else: + return compare_jk(y['name'].lower(), x['name'].lower()) elif sort_key == 'sortByStars': return compare_jk(int(x['stars']), int(y['stars'])) @@ -41,3 +44,10 @@ def theme_compare(a, b, y): if len(y) == 0: return -1 rslt = compare_theme(a, b, y[0]) return theme_compare(a, b, y[1:]) if rslt == 0 else rslt + + +def cname_compare(a, b): + if a.cname.lower() == b.cname.lower(): + return 1 if a.cname < b.cname else -1 + else: + return -1 if a.cname.lower() < b.cname.lower() else 1