• 2.36.0 0e8978f5d5

    2.36.0
    All checks were successful
    Python FastAPI Jinja Linting / build (push) Successful in 30s
    Tests / pytest (push) Successful in 14s
    Build and push image / build-and-push (release) Successful in 1m54s
    Stable

    johnsturgeon released this 2026-09-12 21:03:21 +02:00 | 28 commits to main since this release

    2.36.0

    • #521 write-the-rules-page-for-the-new-v3-ui-517

    Full changelog: 2.35.0...2.36.0

    Downloads
  • 2.35.0 eb1bbe7425

    2.35.0
    All checks were successful
    Python FastAPI Jinja Linting / build (push) Successful in 32s
    Tests / pytest (push) Successful in 15s
    Build and push image / build-and-push (release) Successful in 2m9s
    Stable

    johnsturgeon released this 2026-09-11 21:00:23 +02:00 | 34 commits to main since this release

    2.35.0

    • #514 Added a v3 standings page
      • closes #513 Implement v3 standings page
    • #512 [skip review] Removed javascript that reloads the allpicks page
      • closes #506 Remove auto refresh from allpicks page

    Full changelog: 2.34.1...2.35.0

    Downloads
  • 2.34.1 3054dc5e1a

    2.34.1
    All checks were successful
    Python FastAPI Jinja Linting / build (push) Successful in 58s
    Tests / pytest (push) Successful in 25s
    Build and push image / build-and-push (release) Successful in 2m30s
    Stable

    johnsturgeon released this 2026-09-11 15:24:14 +02:00 | 40 commits to main since this release

    2.34.1

    • #511 Fixed font spec files

    Full changelog: 2.34.0...2.34.1

    Downloads
  • 2.34.0 393deaf351

    2.34.0
    All checks were successful
    Python FastAPI Jinja Linting / build (push) Successful in 30s
    Tests / pytest (push) Successful in 15s
    Build and push image / build-and-push (release) Successful in 2m5s
    Stable

    johnsturgeon released this 2026-09-11 13:58:14 +02:00 | 42 commits to main since this release

    2.34.0

    • #507 fix-the-redesign-so-that-i-did-it-myself-426

    Full changelog: 2.33.0...2.34.0

    Downloads
  • 2.33.0 b204d7da6a

    2.33.0
    All checks were successful
    Python FastAPI Jinja Linting / build (push) Successful in 44s
    Tests / pytest (push) Successful in 14s
    Build and push image / build-and-push (release) Successful in 1m52s
    Stable

    johnsturgeon released this 2026-09-09 21:10:06 +02:00 | 50 commits to main since this release

    2.33.0

    • #503 Add an admin-issued magic link that bypasses Discord login
      • closes #502 Add the ability for the admin to send a 'magic' link (live for 24 hours) to bypass login
    • #501 If we are on the development server we must filter emails

    Full changelog: 2.32.1...2.33.0

    Downloads
  • 2.32.1 7dbf5bb25a

    2.32.1
    All checks were successful
    Python FastAPI Jinja Linting / build (push) Successful in 27s
    Tests / pytest (push) Successful in 15s
    Build and push image / build-and-push (release) Successful in 1m38s
    Stable

    johnsturgeon released this 2026-09-07 17:04:26 +02:00 | 58 commits to main since this release

    2.32.1

    • #498 Release 2.32.1
      • closes #497 release-on-merge doesn't trigger build-image

    Full changelog: 2.32.0...2.32.1

    Downloads
  • 2.32.0 0ea2ffb993

    2.32.0
    All checks were successful
    Python FastAPI Jinja Linting / build (push) Successful in 29s
    Tests / pytest (push) Successful in 15s
    Stable

    johnsturgeon released this 2026-09-07 16:47:02 +02:00 | 60 commits to main since this release

    2.32.0

    • #496 Release 2.32.0
    • #495 The quick / easy solution is to just make sure we're updating the player records on a schedule
      • closes #434 A player putting their picks in after games have auto-started do not re-calculate their standings
    • #494 [skip review] Added set_user
      • closes #484 Figure out how to add user data to sentry logs
    • #493 Moved common header code into the included partial template
      • closes #491 Figure out if there is a way to include 'common' bits of the three base jinja templates
    • #492 figure-out-why-the-browser-data-is-not-being-collected-by-sentry-485
      • closes #485 Figure out why the Browser data is not being collected by sentry

    Full changelog: 2.31.2...2.32.0

    Downloads
  • 2.31.2 627052620c

    2.31.2
    All checks were successful
    Python FastAPI Jinja Linting / build (push) Successful in 28s
    Tests / pytest (push) Successful in 14s
    Stable

    johnsturgeon released this 2026-09-07 11:46:21 +02:00 | 76 commits to main since this release

    2.31.2

    • #490 Gate build + release on the version bump
      • closes #488 Gate build + release on the version bump

    Full changelog: 2.31.1...2.31.2

    Downloads
  • 2.31.1 e9d2b1131c

    2.31.1
    All checks were successful
    Build and push image / build-and-push (push) Successful in 1m49s
    Python FastAPI Jinja Linting / build (push) Successful in 29s
    Tests / pytest (push) Successful in 15s
    Stable

    johnsturgeon released this 2026-09-07 11:00:23 +02:00 | 78 commits to main since this release

    filter-out-the-ping-route-url-from-sentry-487

    Issues closed

    No issues referenced.


    Pull request: #489

    Downloads
  • 2.31.0 b9ea727551

    2.31.0
    All checks were successful
    Build and push image / build-and-push (push) Successful in 1m58s
    Python FastAPI Jinja Linting / build (push) Successful in 29s
    Tests / pytest (push) Successful in 16s
    Stable

    johnsturgeon released this 2026-09-06 21:39:52 +02:00 | 87 commits to main since this release

    Expand {{ standings }} token in admin emails to a styled table

    What

    Adds a <!-- STANDINGS --> token to the admin custom-email composer. When present in the Markdown body, it expands to the current standings as an inline-styled HTML table that mirrors the /standings page — gray header, zebra rows, maroon names — styled inline so it survives email clients (no external CSS, no <style> block).

    No UI change to the compose page beyond one new row in the Markdown cheat sheet documenting the token.

    How

    • app/standings_email.py (new): standings_markdown(session) builds a Markdown pipe table from active players (same query/sort as /standings); style_email_table(html) injects inline styles into markdown-it's table output.
    • app/mailer.py: custom_email_body does the token substitution — it renders the standings fragment in isolation and styles it before the outer email template wraps everything in layout tables, so the styler never touches the presentation tables. send_custom_email forwards the pre-built markdown.
    • Preview (v2.py) and background send (send_admin_email.py) each build the standings lazily — only when a message uses the token — so a token-free batch never depends on a current week existing (which would raise between seasons).

    Testing

    • tests/test_mailer.py: token present → styled <table>/<th>; token absent → body unchanged.
    • flake8 clean, pylint 10.00/10.
    • Note: the 7 test_admin_email_routes.py failures are pre-existing on main, unrelated to this change.

    resolves #233

    Issues closed

    • #233 Create a form page for sending out the standings
    • #178 Have body of standings email be 'proper' HTML body of real standings

    Pull request: #483

    Downloads