#454: It's some form of Elvish
About the show
Sponsored by us! Support our work through:
Connect with the hosts
- Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky)
- Brian: @brianokken@fosstodon.org / @brianokken.bsky.social
- Show: @pythonbytes@fosstodon.org / @pythonbytes.fm (bsky)
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too.
Finally, if you want an artisanal, hand-crafted 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.
Brian #1: djrest2 - A small and simple REST library for Django based on class-based views.
- Emma Levit
- Based on an interesting blog post -
Michael #2: Github CLI
- GitHub’s official command line tool
- Features
- Checking out a pull request locally
- You can clone any repository using OWNER/REPO syntax: gh repo clone cli/cli
- Create a pull request interactively: gh pr create
- See all at cli.github.com/manual/examples
Brian #3: caniscrape - Know before you scrape. Analyze any website's anti-bot protections in seconds.
caniscrape checks a website for common anti-bot mechanisms and reports:
- A difficulty score (0–10)
- Which protections are active (e.g., Cloudflare, Akamai, hCaptcha, etc.)
- What tools you’ll likely need (headless browsers, proxies, CAPTCHA solvers, etc.)
- Whether using a scraping API might be better
This helps you decide the right scraping approach before you waste time building a bot that keeps getting blocked.
Michael #4: 🐴 GittyUp
- Never forget to pull again: Automatically discover and update all your Git repositories with one command.
- Built initially to solve this problem
- Rebuilt and published last week as part of my upcoming Agentic AI Programming for Python course. Get notified this week at training.talkpython.fm/getnotified
- Update everything in a folder tree with
gittyup
- Review changes, blockers, etc with
gittyup --explain
Extras
Brian:
- Three times faster with lazy imports - Hugo van Kemenade
- Interesting discussion on Hugo’s post - on Mastodon
- Use lazy module imports now - Graham Dumpleton
- Graham’s post uses wrapt, a “module for decorators, wrappers and monkey patching”, to simulate lazy imports
- Helpful comment from Adam Johnson on Graham’s post to actually do the import during type checking using
if TYPE_CHECKING: import ...
Michael:
- uvloop is back!
- pypi+ listened. :)
- https://www.reddit.com/r/Python/comments/1o9dey5/i_just_released_pypipluscom_20_offlineready/
- Feedback from my “Show me your ls” post.
Joke: Some form of Elvish
Episode Transcript
Collapse transcript
00:00
00:06
00:12
00:13
00:19
00:23
00:27
00:33
00:36
00:41
00:43
00:47
00:50
00:54
00:57
01:03
01:07
01:09
01:14
01:15
01:18
01:20
01:21
01:22
01:23
01:24
01:25
01:26
01:27
01:30
01:31
01:33
01:36
01:41
01:47
01:54
02:02
02:05
02:07
02:15
02:22
02:31
02:33
02:37
02:42
02:50
02:58
03:03
03:15
03:22
03:29
03:38
03:43
03:47
03:50
03:52
03:57
04:00
04:01
04:01
04:04
04:06
04:07
04:11
04:16
04:19
04:21
04:23
04:29
04:32
04:36
04:36
04:42
04:43
04:46
04:49
04:56
05:01
05:05
05:07
05:10
05:13
05:14
05:17
05:19
05:20
05:25
05:28
05:33
05:38
05:43
05:49
05:52
05:58
06:03
06:05
06:07
06:08
06:13
06:14
06:20
06:23
06:23
06:27
06:31
06:34
06:37
06:39
06:44
06:45
06:52
06:53
06:55
06:57
07:01
07:04
07:05
07:06
07:08
07:09
07:15
07:19
07:20
07:22
07:23
07:29
07:32
07:36
07:36
07:38
07:39
07:40
07:46
07:51
07:56
07:59
08:00
08:01
08:02
08:03
08:04
08:06
08:07
08:08
08:08
08:12
08:14
08:14
08:17
08:18
08:21
08:23
08:23
08:24
08:24
08:26
08:30
08:37
08:38
08:40
08:43
08:46
08:47
08:51
08:55
08:58
09:00
09:01
09:04
09:07
09:08
09:11
09:12
09:13
09:14
09:17
09:19
09:20
09:25
09:32
09:33
09:36
09:39
09:43
09:43
09:46
09:47
09:48
09:53
09:54
09:59
10:04
10:08
10:15
10:23
10:36
10:44
10:54
11:07
11:13
11:17
11:21
11:26
11:32
11:36
11:39
11:40
11:43
11:49
11:53
11:57
12:00
12:01
12:02
12:03
12:09
12:11
12:11
12:15
12:30
12:31
12:31
12:32
12:33
12:36
12:39
12:41
12:44
12:51
12:55
12:55
12:57
13:02
13:07
13:08
13:11
13:17
13:19
13:20
13:23
13:28
13:30
13:35
13:37
13:40
13:43
13:44
13:48
13:51
13:52
13:55
13:56
13:57
13:58
14:00
14:05
14:08
14:08
14:11
14:12
14:17
14:21
14:25
14:27
14:30
14:33
14:37
14:39
14:41
14:47
14:48
14:50
14:56
14:59
15:00
15:02
15:04
15:07
15:11
15:12
15:15
15:16
15:18
15:22
15:24
15:32
15:34
15:35
15:39
15:42
15:46
15:48
15:49
15:50
15:52
15:53
15:54
16:00
16:03
16:04
16:06
16:08
16:08
16:09
16:10
16:11
16:12
16:14
16:16
16:18
16:19
16:21
16:28
16:33
16:39
16:44
16:44
16:47
16:51
16:56
17:00
17:04
17:06
17:09
17:11
17:11
17:15
17:16
17:24
17:28
17:29
17:34
17:40
17:45
17:51
17:58
18:03
18:08
18:13
18:18
18:24
18:27
18:28
18:29
18:29
18:33
18:36
18:37
18:39
18:40
18:42
18:42
18:46
18:50
18:54
18:55
18:56
18:58
19:00
19:04
19:11
19:20
19:26
19:31
19:36
19:40
19:47
20:02
20:07
20:12
20:17
20:22
20:26
20:31
20:43
20:50
20:56
21:00
21:03
21:09
21:11
21:13
21:15
21:18
21:22
21:24
21:27
21:30
21:36
21:42
21:47
21:52
21:56
22:00
22:02
22:06
22:08
22:13
22:19
22:20
22:24
22:27
22:33
22:36
22:39
22:39
22:40
22:43
22:44
22:44
22:47
22:48
22:50
22:55
23:03
23:04
23:05
23:06
23:06
23:13
23:14
23:15
23:16
23:17
23:17
23:18
23:22
23:25
23:27
23:36
23:37
23:39
23:42
23:46
23:49
23:52
23:58
24:00
24:05
24:07
24:09
24:11
24:15
24:25
24:32
24:38
24:44
24:49
24:55
24:59
25:03
25:09
25:14
25:16
25:17
25:18
25:21
25:24
25:25
25:30
25:32
25:33
25:36
25:37
25:38
25:38
25:43
25:44
25:52
26:00
26:02
26:04
26:05
26:09
26:10
26:13
26:29
26:31
26:33
26:34
26:36
26:46
26:49
26:51
26:52
26:56
26:59
27:09
27:14
27:21
27:28
27:29
27:29
27:30
27:31
27:33
27:40
27:41
27:42
27:47
27:54
27:56
28:03
28:07
28:09
28:10
28:11
28:12
28:15
28:15
28:22
28:25
28:38
28:41
28:43
28:44
28:44
28:49
28:50
28:53
28:54
28:56
29:01
29:02
29:02
29:03
29:03
29:04
29:05
29:06