# HG changeset patch # User Dennis Fink # Date 2022-08-30 10:17:27 # Node ID 401cab1bcd6c44caa0bc29a6510c4088f9244b83 # Parent ed73d84e572c81cb4a0d51708df33d4b4afe028b Begin typing annotations diff --git a/c3l_membership/__init__.py b/c3l_membership/__init__.py --- a/c3l_membership/__init__.py +++ b/c3l_membership/__init__.py @@ -3,8 +3,9 @@ import json import os.path import secrets import subprocess +from typing import Any -from flask import Flask, g, redirect, request, url_for +from flask import Flask, Response, g, redirect, request, url_for from flask.cli import AppGroup from flask_babel import Babel from flask_qrcode import QRcode @@ -14,7 +15,7 @@ babel = Babel() babel_cli = AppGroup("babel") -def create_app(): +def create_app() -> Flask: app = Flask(__name__) @@ -44,7 +45,7 @@ def create_app(): app.config.setdefault("CRYPTOCURRENCIES", dict()) @babel.localeselector - def get_locale(): + def get_locale() -> Any: if not g.get("lang_code", None): g.lang_code = request.accept_languages.best_match(app.config["LANGUAGES"]) return g.lang_code @@ -54,7 +55,7 @@ def create_app(): app.register_blueprint(root_page) @app.route("/") - def home(): + def home() -> Response: g.lang_code = request.accept_languages.best_match(app.config["LANGUAGES"]) return redirect(url_for("root.index")) @@ -64,7 +65,7 @@ def create_app(): @babel_cli.command("extract") -def babel_extract(): +def babel_extract() -> None: subprocess.run( [ "pybabel", @@ -81,14 +82,14 @@ def babel_extract(): @babel_cli.command("update") -def babel_update(): +def babel_update() -> None: subprocess.run( ["pybabel", "update", "-i", "messages.pot", "-d", "c3l_membership/translations"] ) @babel_cli.command("compile") -def babel_compile(): +def babel_compile() -> None: subprocess.run(["pybabel", "compile", "-d", "c3l_membership/translations"]) diff --git a/c3l_membership/forms.py b/c3l_membership/forms.py --- a/c3l_membership/forms.py +++ b/c3l_membership/forms.py @@ -1,8 +1,11 @@ +from typing import Optional as tOptional + from flask_babel import lazy_gettext from flask_wtf import FlaskForm from wtforms import ( BooleanField, DateField, + Field, RadioField, StringField, SubmitField, @@ -22,11 +25,11 @@ class NotEqualTo: more helpful error. """ - def __init__(self, fieldname, message=None): + def __init__(self, fieldname: str, message: tOptional[str] = None) -> None: self.fieldname = fieldname self.message = message - def __call__(self, form, field): + def __call__(self, form: FlaskForm, field: Field) -> None: try: other = form[self.fieldname] except KeyError as exc: diff --git a/c3l_membership/utils.py b/c3l_membership/utils.py --- a/c3l_membership/utils.py +++ b/c3l_membership/utils.py @@ -1,7 +1,7 @@ from datetime import date -def calculate_age(birthday): +def calculate_age(birthday: date) -> int: today = date.today() born = birthday try: diff --git a/c3l_membership/views.py b/c3l_membership/views.py --- a/c3l_membership/views.py +++ b/c3l_membership/views.py @@ -1,9 +1,10 @@ import re import subprocess from datetime import date +from typing import Any, Dict, Optional, cast import requests -from flask import Blueprint, current_app, g, render_template, request +from flask import Blueprint, Response, current_app, g, render_template, request from flask_babel import gettext from flask_weasyprint import HTML, render_pdf @@ -16,19 +17,19 @@ xml_template = "{name} None: values.setdefault("lang_code", g.lang_code) @root_page.url_value_preprocessor -def pull_lang_code(endpoint, values): +def pull_lang_code(endpoint: Optional[str], values: Optional[Dict[Any, Any]]) -> None: lang_code = values.pop("lang_code") if lang_code != "favicon.ico": g.lang_code = lang_code @root_page.route("/", methods=("GET", "POST")) -def index(): +def index() -> Response: form = MembershipForm() choices = [ @@ -139,5 +140,4 @@ def index(): HTML(string=html), download_filename=f"C3L_Membership_{form.username.data}.pdf", ) - return render_template("index.html", form=form, crypto_error=False)