#495: Banned
Sponsored by us! Support our work through:
- Our courses at Talk Python
- Consulting from Six Feet Up
Connect with the hosts
- Michael: Mastodon / BlueSky / X / LinkedIn
- Calvin: Mastodon / BlueSky / X / LinkedIn
- Show: Mastodon / BlueSky / X
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesday at 7am PT. Older video versions available there too.
Finally, if you want an artisanal digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.
Michael #1: EuroPython 2026 videos are online
The EuroPython Society has published all 117 recordings from EuroPython 2026 on the official EuroPython Conference YouTube channel. The conference ran July 13-19 in Krakow, Poland and celebrated the conference series' 25th anniversary. The playlist covers keynotes, panels, lightning talks, and full talk recordings across Python core, web, DevOps, data/ML, embedded, and other tracks.
- If you missed EuroPython 2026 in Krakow, this is the complete free on-demand archive of one of the year's biggest European Python events.
- 117 videos now live on the EuroPython Conference YouTube channel, last updated Aug 17, 2026.
- Michaelβs personal watch list.
Calvin #2: The State of Django 2026: Boring is so back
- State of Django 2026 (JetBrains/DSF survey, ~3,500 devs, 40+ countries) - "boring is so back": Django's core stays reliable while everything around it moves fast
- Core is stable: Postgres 76β79% for 5 years running, templates ~80%, 43% already on Django 6.0
- AI is routine now (only 10% use none) but workflow's unsettled - Claude Code leads at 35%, and 56% still just use it for chat, not autonomous edits
- Tooling is consolidating: uv and Ruff both at 43% adoption, each replacing several older single-purpose tools
- Type hints are winning (57% use them) but the checker is up for grabs - IDE-built-in leads at 40%, Mypy 32%, with ty/Pyrefly emerging
- Two Django communities coexist happily: 72% server-rendered templates vs. 53% API-only - and htmx adoption jumped from 5% to 34% in five years
Michael #3: htmx 4.0.0 has been released
After 8 months of work, the htmx team shipped 4.0.0, a rewrite that moves internals from XMLHttpRequest to fetch() while keeping the API almost identical to htmx 2. Three changes may need action: attribute inheritance is now explicit via an :inherited suffix, event names follow a htmx:phase:action pattern, and history no longer caches pages in localStorage. Additions include built-in morph swaps, the new hx-partial tag, and many core extensions. htmx 2 stays supported and remains latest on npm until early 2027.
- htmx is the go-to frontend layer for Python server-rendered apps (Flask, Django, FastAPI), and 4.0 is deliberately low-drama: nearly behavior-compatible, so teams can upgrade on their own schedule and pick up morph swaps and streaming extensions.
- Explicit inheritance is the biggest migration item: hx-confirm, hx-headers, hx-target and friends no longer cascade to children unless you append :inherited; hx-disinherit and hx-inherit are gone
- A CLI upgrade checker (npx htmx.org@4.0.0 upgrade-check) flags spots needing :inherited, renames like hx-disable to hx-ignore, removed attrs like hx-vars, and old event names in templates and JS
- Events follow htmx:phase:action (htmx:beforeRequest becomes htmx:before:request); most error events collapse into htmx:error and htmx:xhr:* events are removed with XMLHttpRequest
- History no longer snapshots pages in localStorage; back navigation re-fetches and swaps into the body, fixing a chronic support headache, with a new hx-history-cache extension for sessionStorage caching
- New features: out-of-the-box morphing swaps, the [HTML_REMOVED] tag for multi-element updates, streaming over SSE/WebSockets/multipart, and hx-live, their Alpine-inspired DOM scripting solution
- No forced upgrade: 2.x stays latest on npm until early 2027 (4.0 remains next) and is supported indefinitely; the team even ships official LLM skill files for guidance and upgrading
Calvin #4: π Functionally Zen
- Functionally Zen (Kyle Adams, Test Double) - riffs on "simple is better than complex" with 7 extra tenets for Python simplicity
- Core claims: idiomatic > non-idiomatic, data > functions, pure functions > impure functions > classes
- Favorite example: a medical-dosage calculator replaced with a plain lookup dict - no logic, no tests needed
- Big idea: keep a thin "impure shell" around a "pure core" (Gary Bernhardt's functional core / imperative shell) - push side effects (API calls, DB, files) to the edges
- Side note: constructors that do I/O are "poison pills" - the side effect infects every class that depends on them
- Payoff: pure functions and no-mock tests are just easier to read and reason about than the alternative
Extras
Calvin:
- uv ships trusted-publisher token revocation and Python 3.15 support
- Making a Python interpreter in 1024 bytes
Michael:
- Steering council voting is now open
Joke: Makes you look like this?
Episode Transcript
Collapse transcript
00:00
00:04
00:11
00:16
00:21
00:26
00:29
00:30
00:31
00:33
00:37
00:38
00:38
00:41
00:44
00:45
00:47
00:50
00:54
00:56
00:59
01:03
01:04
01:07
01:09
01:15
01:19
01:21
01:23
01:28
01:29
01:30
01:34
01:37
01:38
01:42
01:42
01:44
01:48
01:49
01:56
02:02
02:08
02:17
02:18
02:18
02:19
02:20
02:21
02:22
02:29
02:30
02:31
02:32
02:33
02:35
02:40
02:47
02:48
02:54
02:58
03:03
03:07
03:09
03:12
03:14
03:20
03:23
03:26
03:33
03:34
03:43
03:43
03:51
03:55
03:57
04:00
04:04
04:09
04:13
04:16
04:17
04:19
04:26
04:27
04:28
04:29
04:31
04:34
04:41
04:48
04:56
05:02
05:05
05:11
05:14
05:22
05:28
05:33
05:36
05:41
05:42
05:45
05:45
05:51
05:51
05:54
05:56
06:00
06:04
06:10
06:16
06:17
06:22
06:23
06:25
06:29
06:34
06:40
06:45
06:50
06:53
06:57
07:01
07:04
07:07
07:11
07:15
07:16
07:22
07:28
07:32
07:40
07:48
07:53
07:58
08:04
08:08
08:18
08:25
08:30
08:37
08:42
08:48
08:50
08:56
09:00
09:04
09:06
09:11
09:16
09:21
09:23
09:27
09:27
09:28
09:28
09:29
09:29
09:31
09:32
09:33
09:35
09:39
09:40
09:41
09:43
09:43
09:44
09:45
09:49
09:54
10:01
10:02
10:03
10:05
10:11
10:16
10:19
10:21
10:24
10:31
10:32
10:32
10:36
10:40
10:45
10:53
10:58
11:05
11:10
11:16
11:22
11:26
11:31
11:35
11:42
11:47
11:53
12:00
12:06
12:11
12:15
12:20
12:26
12:30
12:35
12:40
12:46
12:52
12:56
12:58
13:02
13:04
13:08
13:12
13:16
13:18
13:26
13:33
13:38
13:43
13:49
13:53
13:54
13:58
14:00
14:02
14:02
14:05
14:08
14:09
14:11
14:12
14:15
14:15
14:17
14:17
14:20
14:21
14:24
14:25
14:35
14:38
14:44
14:49
14:53
14:56
15:00
15:04
15:07
15:08
15:10
15:11
15:13
15:14
15:15
15:16
15:20
15:23
15:26
15:29
15:31
15:34
15:37
15:38
15:40
15:43
15:49
15:56
16:03
16:08
16:12
16:17
16:22
16:30
16:36
16:44
16:49
16:55
17:02
17:07
17:12
17:16
17:21
17:25
17:30
17:33
17:39
17:45
17:48
17:53
17:57
18:01
18:04
18:07
18:08
18:12
18:16
18:20
18:21
18:25
18:32
18:33
18:38
18:40
18:43
18:45
18:46
18:48
18:50
18:51
18:55
18:56
18:58
18:59
19:04
19:08
19:10
19:12
19:15
19:18
19:21
19:23
19:27
19:33
19:39
19:42
19:45
19:48
19:54
19:58
20:01
20:03
20:06
20:09
20:13
20:15
20:18
20:23
20:26
20:31
20:35
20:39
20:42
20:45
20:48
20:52
20:55
21:02
21:03
21:06
21:09
21:12
21:16
21:19
21:21
21:28
21:33
21:37
21:43
21:49
21:53
21:58
22:03
22:07
22:11
22:17
22:26
22:33
22:40
22:44
22:51
22:57
23:05
23:12
23:18
23:23
23:27
23:30
23:32
23:41
23:46
23:48
23:50
23:54
23:57
23:59
24:02
24:04
24:05
24:07
24:08
24:10
24:12
24:14
24:16
24:17
24:18
24:21
24:22
24:23
24:25
24:27
24:29
24:31
24:32
24:33
24:37
24:39
24:45
24:50
24:56
24:59
25:05
25:12
25:18
25:22
25:28
25:35
25:36
25:39
25:41
25:43
25:44
25:46
25:46
25:52
25:53
25:54
25:56
26:02
26:04
26:05
26:09
26:11
26:12
26:13
26:13
26:15
26:16
26:20
26:22
26:23
26:24
26:25
26:26
26:32
26:35
26:41
26:47
26:54
27:01
27:07
27:08
27:10
27:11
27:12
27:14
27:15
27:17
27:17
27:18
27:23
27:24
27:25
27:27
27:28
27:29
27:31
27:32
27:33
27:35
27:36
27:36
27:37
27:38
27:39
27:40
27:41
27:43
27:44


