Python Bytes

#454: It's some form of Elvish

Topics covered in this episode:

  • djrest2 - A small and simple REST library for Django based on class-based views.
  • Github CLI
  • caniscrape - Know before you scrape. Analyze any website's anti-bot protections in seconds.
  • 🐴 GittyUp
  • Extras
  • Joke
Watch on YouTube

About the show

Sponsored by us! Support our work through:

  • Our courses at Talk Python Training
  • The Complete pytest Course
  • Patreon Supporters

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
    • Why, in 2025, do we still need a 3rd party app to write a REST API with Django?
    • As opposed to using DRF or Django Ninja
  • -

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.

  • reddit announcement and discussion

  • 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