diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2024-02-29 18:00:11 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2024-12-21 19:43:13 +0200 |
| commit | a137846541ef862ebd40ed8e2edc4ff464d7c0ca (patch) | |
| tree | 507dbe5693aa171fca857ee8046a217596b78d5e | |
| parent | 3213fb576a0aec19527f44237fbcfe4b65af6f29 (diff) | |
Add user-agent parsing to guess table or list mode
| -rw-r--r-- | app.py | 33 | ||||
| -rw-r--r-- | requirements.txt | 3 |
2 files changed, 25 insertions, 11 deletions
@@ -2,9 +2,8 @@ from dotenv import load_dotenv load_dotenv() import datetime -import sys import os -import traceback +from user_agents import parse as parse_user_agent from dataclasses import dataclass from flask import Flask, render_template, redirect, request, make_response from flask_compress import Compress @@ -91,7 +90,15 @@ def poll(id): if poll is None: return "Poll not found", 404 - display_mode = request.cookies.get("diddle_display_mode", "table") + display_mode_cookie = request.cookies.get("diddle_display_mode") + if display_mode_cookie is None: + user_agent = parse_user_agent(request.user_agent.string) + if user_agent.is_mobile or user_agent.is_tablet: + display_mode = "list" + else: + display_mode = "table" + else: + display_mode = display_mode_cookie voter_names_set: set[str] = set() selections: dict[VoterNameChoiceIdPair, int] = {} @@ -103,14 +110,18 @@ def poll(id): voter_names = list(voter_names_set) voter_names.sort() - return render_template('poll.html.j2', - poll=poll, - selections=selections, - choices=poll.choices, - voter_names=voter_names, - now=datetime.datetime.now(), - display_mode=display_mode, - ) + resp = make_response( + render_template("poll.html.j2", + poll=poll, + selections=selections, + choices=poll.choices, + voter_names=voter_names, + now=datetime.datetime.now(), + display_mode=display_mode)) + + resp.set_cookie("diddle_display_mode", display_mode) + return resp + @app.post("/poll/<id>/vote") def vote_poll(id): diff --git a/requirements.txt b/requirements.txt index a3cc4ec..50af9ad 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,4 +10,7 @@ MarkupSafe==2.1.5 packaging==23.2 psycopg2-binary==2.9.9 python-dotenv==1.0.1 +PyYAML==6.0.1 +ua-parser==0.18.0 +user-agents==2.2.0 Werkzeug==3.0.1 |
