diff --git a/confarchive/utils.py b/confarchive/utils.py new file mode 100644 index 0000000..ac10c61 --- /dev/null +++ b/confarchive/utils.py @@ -0,0 +1,11 @@ +"""Utility functions.""" + + +def drop_start(s: str, start: str) -> str: + """Remove text from the start of a string.""" + return s[len(start) :] if s.startswith(start) else s + + +def plural(num: int, label: str) -> str: + """Make plural version of label as appropriate.""" + return f'{num:,d} {label}{"s" if num != 1 else ""}' diff --git a/main.py b/main.py index 5d78ecd..935d4b0 100755 --- a/main.py +++ b/main.py @@ -6,7 +6,7 @@ import flask from sqlalchemy import func, or_, update from werkzeug.wrappers import Response -from confarchive import database, model, wikidata, query +from confarchive import database, model, wikidata, query, utils app = flask.Flask(__name__) app.debug = True @@ -15,11 +15,6 @@ app.config.from_object("config.default") database.init_app(app) -def drop_start(s: str, start: str) -> str: - """Remove text from the start of a string.""" - return s[len(start) :] if s.startswith(start) else s - - @app.route("/person/", methods=["GET", "POST"]) def person(person_id: int) -> str | Response: item = model.Person.query.get(person_id) @@ -33,7 +28,7 @@ def person(person_id: int) -> str | Response: if "P18" in wd_item["claims"]: claim_p18 = wd_item["claims"]["P18"] wikidata_photo = [ - drop_start(s["mainsnak"]["datavalue"]["value"], "-") + utils.drop_start(s["mainsnak"]["datavalue"]["value"], "-") for s in claim_p18 ] for filename in wikidata_photo: @@ -77,7 +72,7 @@ def person(person_id: int) -> str | Response: "person.html", item=item, Event=model.Event, - plural=plural, + plural=utils.plural, wikidata_hits=wikidata_hits, is_admin=check_admin_mode, ) @@ -206,10 +201,6 @@ def index() -> str: return flask.render_template("index.html", items=q, count=count) -def plural(num: int, label: str) -> str: - return f'{num:,d} {label}{"s" if num != 1 else ""}' - - @app.route("/series") def list_series() -> str: """Page showing list of conference series.""" @@ -220,33 +211,15 @@ def list_series() -> str: @app.route("/speakers") def top_speakers_page() -> str: - top = query.top_speakers().having(func.count() > 4) - """Top speakers page.""" - photos = [] - for person, count in top: - photo = person.photo_filename() - if photo: - photos.append((person, photo)) - - left_photos = photos[::2] - right_photos = photos[1::2] - - photo_person_ids = [person.id for person, photo in photos] - left = photo_person_ids[::2] - right = photo_person_ids[1::2] + top = query.top_speakers().having(func.count() > 4) return flask.render_template( "top_speakers.html", top_speakers=top, speaker_counts=query.speaker_counts(), - plural=plural, + plural=utils.plural, person_image_filename=person_image_filename, - # photo_person_ids=photo_person_ids, - left=left, - right=right, - left_photos=left_photos, - right_photos=right_photos, )