changeset 8123:6fa658082c8e

summary: compute lang_stats consistently Visiting a /statistics with py3 would fail with: ... in statistics sorted(lang_stats, reverse=True, key=lambda k: k[1])[:10] TypeError: '<' not supported between instances of 'dict' and 'dict' The "summary" computation didn't have that problem. And it put '?' as description for unknown extensions. And it had stable output as it also sorted on the file extension as secondary key. Just use that.
author Mads Kiilerich <mads@kiilerich.com>
date Thu, 02 Jan 2020 23:19:36 +0100
parents bf009cb3a470
children a553bc3a3d0e
files kallithea/controllers/summary.py
diffstat 1 files changed, 6 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/summary.py	Thu Jan 02 23:00:36 2020 +0100
+++ b/kallithea/controllers/summary.py	Thu Jan 02 23:19:36 2020 +0100
@@ -139,12 +139,10 @@
 
         if stats and stats.languages:
             lang_stats_d = ext_json.loads(stats.languages)
-
             lang_stats = [(x, {"count": y,
                                "desc": LANGUAGES_EXTENSIONS_MAP.get(x, '?')})
                           for x, y in lang_stats_d.items()]
             lang_stats.sort(key=lambda k: (-k[1]['count'], k[0]))
-
             c.trending_languages = lang_stats[:10]
         else:
             c.trending_languages = []
@@ -188,17 +186,16 @@
             .scalar()
         c.stats_percentage = 0
         if stats and stats.languages:
-            lang_stats_d = ext_json.loads(stats.languages)
             c.commit_data = ext_json.loads(stats.commit_activity)
             c.overview_data = ext_json.loads(stats.commit_activity_combined)
 
-            lang_stats = ((x, {"count": y,
-                               "desc": LANGUAGES_EXTENSIONS_MAP.get(x)})
-                          for x, y in lang_stats_d.items())
+            lang_stats_d = ext_json.loads(stats.languages)
+            lang_stats = [(x, {"count": y,
+                               "desc": LANGUAGES_EXTENSIONS_MAP.get(x, '?')})
+                          for x, y in lang_stats_d.items()]
+            lang_stats.sort(key=lambda k: (-k[1]['count'], k[0]))
+            c.trending_languages = lang_stats[:10]
 
-            c.trending_languages = (
-                sorted(lang_stats, reverse=True, key=lambda k: k[1])[:10]
-            )
             last_rev = stats.stat_on_revision + 1
             c.repo_last_rev = c.db_repo_scm_instance.count() \
                 if c.db_repo_scm_instance.revisions else 0