diff --git a/app.py b/app.py index 4a29e7e..164e317 100644 --- a/app.py +++ b/app.py @@ -13,7 +13,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import operator import urllib.parse import botocore.session @@ -25,17 +24,21 @@ from flask import Flask, redirect, render_template, request, url_for app = Flask(__name__) + def slug_filter(s): return s.lower().replace(" ", "-") + app.jinja_env.filters["slug"] = slug_filter + @dataclass class Emoj: __slots__ = frozenset({"shortcode", "url"}) shortcode: str url: str + @app.route("/") def emojo(domain): if request.args.get("show_all", "") == "on": @@ -47,9 +50,7 @@ def emojo(domain): else: show_animated = False - url = urllib.parse.urlunsplit( - ("https", domain, "/api/v1/custom_emojis", "", "") - ) + url = urllib.parse.urlunsplit(("https", domain, "/api/v1/custom_emojis", "", "")) try: response = requests.get(url) except requests.exceptions.RequestException: @@ -61,14 +62,18 @@ def emojo(domain): categories = defaultdict(list) for emoji in sorted( response.json(), - # sort by category, then name within each category, then disambiguate by capitalization + # sort by category, + # then name within each category, + # then disambiguate by capitalization key=lambda x: (x.get("category", ""), x["shortcode"].lower(), x["shortcode"]), ): if not show_all and not emoji.get("visible_in_picker", True): continue url = emoji["url" if show_animated else "static_url"] - categories[emoji.get("category")].append(Emoj(shortcode=emoji["shortcode"], url=url)) + categories[emoji.get("category")].append( + Emoj(shortcode=emoji["shortcode"], url=url) + ) return render_template( "emojo.html", domain=domain, categories=categories, show_animated=show_animated