Python Bytes is a weekly podcast hosted by Michael Kennedy and Brian Okken. The show is a short discussion on the headlines and noteworthy news in the Python, developer, and data science space.
#412 Closing the loop
- Loop targets
- asyncstdlib
- Bagels: TUI Expense Tracker
- rloop: An AsyncIO event loop implemented in Rust
- Extras
- Joke
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: Loop targets
- Ned Batchelder
- I don’t think I would have covered this had it not been the surprising opposition to Ned’s code.
Here’s the snippet:
params = { "query": QUERY, "page_size": 100, } *# Get page=0, page=1, page=2, ...* **for** params["page"] in itertools.count(): data = requests.get(SEARCH_URL, params).json() **if** not data["results"]: **break** ...
Ned is utilizing the assignment in the for loop to use the value of count() and store it into the params["page"].
- The article includes another version with a temp variable page_num, which I think the naysayers would prefer.
- But frankly, I think both are fine. Why not put the value right where you want it?
Michael #2: asyncstdlib
- The asyncstdlib library re-implements functions and classes of the Python standard library to make them compatible with async callables, iterables and context managers.
- It is fully agnostic to async event loops and seamlessly works with asyncio, third-party libraries such as trio, as well as any custom async event loop.
- Full set of async versions of advantageous standard library helpers, such as zip, map, enumerate, functools.reduce, itertools.tee, itertools.groupby and many others.
- Safe handling of async iterators to ensure prompt cleanup, as well as various helpers to simplify safely using custom async iterators.
- Small but powerful toolset to seamlessly integrate existing sync code into async programs and libraries.
Brian #3: Bagels: TUI Expense Tracker
- Jax Tam
“Bagels expense tracker is a TUI application where you can track and analyse your money flow, with convenience oriented features and a complete interface.
Why an expense tracker in the terminal? I found it easier to build a habit and keep an accurate track of my expenses if I do it at the end of the day, instead of on the go. So why not in the terminal where it's fast, and I can keep all my data locally?”
Who hasn’t wanted to write their own expense tracker?
- This implementation is fun for lots of reasons
- It’s still new and pretty small, so forking it for your own uses should be easy
- Built on textual is fun
- install instructions based on uv tool seems to be the new normal:
- uv tool install --python 3.13 bagels
- test suite started
- pretty useful as is, actually
- Nice that it includes a roadmap of future goals
- Would be a fun project to help out with for anyone looking for anyone looking for a shiny new codebase to contribute to.
Michael #4: rloop: An AsyncIO event loop implemented in Rust
- An AsyncIO event loop implemented in Rust
- From Giovanni Barillari, Creator of Granian
- RLoop is an AsyncIO event loop implemented in Rust on top of the mio crate.
- Disclaimer: This is a work in progress and definitely not ready for production usage.
- Run asyncio.set_event_loop_policy(rloop.EventLoopPolicy()) and done.
- Similar to uvloop.
Extras
Brian:
- I’m currently listening to Four Thousand Weeks - Time Management for Mortals by Oliver Burkeman for the second time. Highly recommend.
- Development Advent Calendars for 2024 - Adrian Roselli
Michael:
- Docker cluster monitor
- Compare engagement across Mastodon / Bsky / Twitter
- https://bsky.app/profile/pythonbytes.fm/post/3lbseqgr5m22z
- https://fosstodon.org/@pythonbytes/113545509565796190
- https://x.com/pythonbytes/status/1861166179236319288
- Back on #277 we talked about StrEnum. Got a nice chance to use it this weekend.
- Maybe Finance
- Go sponsor a bunch of projects on GitHub
- Black Friday at Talk Python
Joke: CTRL + X onion