diff --git a/app.py b/app.py index 2a8de04..2a11f50 100644 --- a/app.py +++ b/app.py @@ -16,6 +16,9 @@ from flask_limiter.util import get_remote_address import ipfshttpclient from mastodon import Mastodon +import pypinyin + +from string import ascii_uppercase as AZ from datetime import date, datetime from functools import wraps import hashlib @@ -144,6 +147,19 @@ def mast_login_auth(): return redirect(url_for('list')) +def by_abc(l): + d = { + letter: [] for letter in AZ+'/' + } + for item in l: + k = pypinyin.lazy_pinyin(item[0], style=pypinyin.Style.FIRST_LETTER, errors=lambda x:x[0])[0].upper() + if k not in AZ: + k = '/' + d[k].append(item) + + return {k: v for k, v in d.items() if v} + + @app.route('/pastExam/') @login_required() def list(username): @@ -180,6 +196,7 @@ def list(username): pagination = ps.paginate(max_per_page=100) curr_year = date.today().year all_courses = db.session.query(Paper.course, func.count()).group_by(Paper.course).all() + all_courses_abc = by_abc(all_courses) all_teachers = db.session.query(Paper.teacher, func.count()).group_by(Paper.teacher).all() all_years = db.session.query(Paper.year, func.count()).group_by(Paper.year).all() ipfs_version = hashlib.sha256(C.ipfs_base_url.encode('utf-8')).hexdigest() diff --git a/requirements.txt b/requirements.txt index e01d448..5ebeeb4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ Flask_Limiter==1.3.1 Flask_SQLAlchemy==2.4.4 ipfshttpclient==0.7.0a1 scp==0.13.3 +pypinyin==0.40.0 diff --git a/templates/list.html b/templates/list.html index b35e444..be9211d 100644 --- a/templates/list.html +++ b/templates/list.html @@ -356,12 +356,15 @@
- {% for c, count in all_courses %} + {% for k, courses in all_courses_abc.items() %} +
{{k}}
+ {% for c, count in courses %} {{c}} ({{count}}) {% endfor %} + {% endfor %}