Python Bytes

Michael Kennedy and Brian Okken

Developer headlines delivered directly to your earbuds

  • 32 minutes 59 seconds
    #415 Just put the fries in the bag bro
    Topics covered in this episode:
    Watch on YouTube

    About the show

    Sponsored by us! Support our work through:

    Connect with the hosts

    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.

    Michael #1: dbos-transact-py

    • DBOS Transact is a Python library providing ultra-lightweight durable execution.
    • Durable execution means your program is resilient to any failure.
    • If it is ever interrupted or crashes, all your workflows will automatically resume from the last completed step.
    • Under the hood, DBOS Transact works by storing your program's execution state (which workflows are currently executing and which steps they've completed) in a Postgres database.
    • Incredibly fast, for example 25x faster than AWS Step Functions.

    Brian #2: Typed Python in 2024: Well adopted, yet usability challenges persist

    • Aaron Pollack on Engineering at Meta blog
    • “Overall findings
      • 88% of respondents “Always” or “Often” use Types in their Python code.
      • IDE tooling, documentation, and catching bugs are drivers for the high adoption of types in survey responses,
      • The usability of types and ability to express complex patterns still are challenges that leave some code unchecked.
      • Latency in tooling and lack of types in popular libraries are limiting the effectiveness of type checkers.
      • Inconsistency in type check implementations and poor discoverability of the documentation create friction in onboarding types into a project and seeking help when using the tools. “
    • Notes
      • Seems to be a different survey than the 2023 (current) dev survey. Diff time frame and results. July 29 - Oct 8, 2024

    Michael #3: RightTyper

    • A fast and efficient type assistant for Python, including tensor shape inference

    Brian #4: Lazy self-installing Python scripts with uv

    • Trey Hunner
    • Creating your own ~/bin full of single-file command line scripts is common for *nix folks, still powerful but underutilized on Mac, and trickier but still useful on Windows.
    • Python has been difficult in the past to use for standalone scripts if you need dependencies, but that’s no longer the case with uv.
    • Trey walks through user scripts (*nix and Mac)
      • Using #! for scripts that don’thave dependencies
      • Using #! with uv run --script and /// script for dependencies
      • Discussion about how uv handles that.

    Extras

    Brian:

    • Courses at pythontest.com
      • If you live in a place (or are in a place in your life) where these prices are too much, let me know. I had a recent request and I really appreciate it.

    Michael:

    • Python 3.14 update released
    • Top episodes of 2024 at Talk Python
    • Universal check for updates macOS:
      • Settings > Keyboard > Keyboard shortcuts > App shortcuts > +
      • Then add shortcut for single app, ^U and the menu title.

    Joke: Python with rizz

    23 December 2024, 8:00 am
  • 29 minutes 45 seconds
    #414 Because we are not monsters
    Topics covered in this episode:
    Watch on YouTube

    About the show

    Sponsored by us! Support our work through:

    Connect with the hosts

    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: New project to shorten django-admin to django because we are not monsters

    • Jeff Tripplet has created django-cli-no-admin to shorten django-admin to just django.
    • “One of the biggest mysteries in Django is why I have to run django-admin from my terminal instead of just running django. Confusingly, django-admin has nothing to do with Django’s admin app.”
    • Instead of typing things like: django-admin startproject mysite projectname
    • We can type the shorter: django startproject mysite projectname
    • I love this kind of developer speedup / comfort improvements
    • And yes, Jeff wants Django to eventually include this as the default way to run the command line utilities.

    Michael #2: django-unicorn: The magical reactive component framework for Django sparkles

    • Add modern site functionality: Quickly add in simple interactions to regular Django templates without learning a new templating language.
    • Skip the JavaScript build tools
    • No API required: Skip creating a bunch of serializers and just use Django.

    Brian #3: Testing some tidbits

    • Ned Batchelder
    • Different ways to test to see if a string has only 0 or 1 in it.
    • And also, a way to check all the different ways to make sure they work.
    • Fun post, and I learned about
      • cleandoc - a way to strip leading blank space and maintain code block indentation
        • I usually use textwrap.dedent()
      • partition - splitting strings based on a substring
      • Using | to pass imports to eval() - I don't use eval much.
    • However, no pytest!
    • Here’s a way to check all this with pytest:

    Michael #4: The State of Python 2024 article

    1. Python usage with other languages drops as general adoption grows
    2. 41% of Python developers have under 2 years of experience
    3. Python learning expands through diverse channels
    4. The Python 2 vs. 3 divide is in the distant past
    5. Flask, Django, and FastAPI remain top Python web frameworks
    6. Most Python web apps run on hyperscale clouds
    7. Containers over VMs over hardware
    8. uv takes Python packaging by storm

    Extras

    Brian:

    Michael:

    Joke:

    16 December 2024, 8:00 am
  • 30 minutes 39 seconds
    #413 python-build-standalone finds a home
    Topics covered in this episode:
    Watch on YouTube

    About the show

    Sponsored by us! Support our work through:

    Connect with the hosts

    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.

    Michael #1: jiter

    • Fast iterable JSON parser.
    • About to be the backend for Pydantic and Logfire.
    • Currently powers OpenAI / ChatGPT (along with Pydantic itself), at least their Python library, maybe more.
    • jiter has three interfaces:
      • JsonValue an enum representing JSON data
      • Jiter an iterator over JSON data
      • PythonParse which parses a JSON string into a Python object
    • jiter-python - This is a standalone version of the JSON parser used in pydantic-core. The recommendation is to only use this package directly if you do not use pydantic

    Brian #2: A new home for python-build-standalone

    Michael #3: moka-py

    • A high performance caching library for Python written in Rust
    • moka-py is a Python binding for the highly efficient Moka caching library written in Rust.
    • This library allows you to leverage the power of Moka's high-performance, feature-rich cache in your Python projects.
    • Features
      • Synchronous Cache: Supports thread-safe, in-memory caching for Python applications.
      • TTL Support: Automatically evicts entries after a configurable time-to-live (TTL).
      • TTI Support: Automatically evicts entries after a configurable time-to-idle (TTI).
      • Size-based Eviction: Automatically removes items when the cache exceeds its size limit using the TinyLFU policy.
      • Concurrency: Optimized for high-performance, concurrent access in multi-threaded environments.

    Brian #4: uv: An In-Depth Guide

    • On SaaS Pegasus blog, so presumably by Cory Zue
    • Good intro to uv
    • Also a nice list of everyday commands
      • Install python: uv python install 3.12
        • I don’t really use this anymore, as uv venv .venv --python 3.12 or uv sync install if necessary
      • create a virtual env: uv venv .venv --python 3.12
      • install stuff: uv pip install django
      • add project dependencies
      • build pinned dependencies
    • Also discussion about adopting the new workflow

    Extras

    Brian:

    Michael:

    Joke: Inf

    9 December 2024, 8:00 am
  • 26 minutes
    #412 Closing the loop
    Topics covered in this episode:
    Watch on YouTube

    About the show

    Sponsored by us! Support our work through:

    Connect with the hosts

    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:

    Michael:

    Joke: CTRL + X onion

    2 December 2024, 8:00 am
  • 40 minutes 3 seconds
    #411 TLS Client: Hello <<guitar solo>>
    Topics covered in this episode:
    Watch on YouTube

    About the show

    Sponsored by us! Support our work through:

    Connect with the hosts

    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.

    Michael #1: Talk Python rewritten in Quart

    • Rewrote all of talkpython.fm in Quart (10k lines of code total, 4k changed)
    • Considered
      • FastAPI
      • Litestar
      • Django
      • Hugo Static Site + Python
      • Flask
    • Discussed the multistage upgrade / conversion process
    • Automating tests for all 1,000 pages

    Brian #2: PyPI now supports digital attestations

    • Dustin Ingram
    • Attestations provide a verifiable link to an upstream source repository: By signing with the identity of the upstream source repository, such as in the case of an upload of a project built with GitHub Actions, PyPI's support for digital attestations defines a strong and verifiable association between a file on PyPI and the source repository, workflow, and even the commit hash that produced and uploaded the file. Additionally, publishing attestations to a transparency log helps mitigate against both compromise of PyPI and compromise of the projects themselves.”
    • For maintainers
      • If using GH Actions and Trusted Publishing
        • make sure you use pypa/gh-action-pypi-publish, version v1.11.0 or newer
        • that’s it
      • If not
    • See also

    Michael #3: Django Rusty Templates

    • by Lily Foote
    • An experimental reimplementation of Django's templating language in Rust.
    • Goals
      • 100% compatibility of rendered output.
      • Error reporting that is at least as useful as Django's errors.
      • Improved performance over Django's pure Python implementation.

    Brian #4: PEP 639 is now supported by PYPI

    • from Brett Cannon
    • PEP 639 – Improving License Clarity with Better Package Metadata
    • For project metadata, use these fields: license and license-files:
    • Examples license field

      [project] license = "MIT" [project] license = "MIT AND (Apache-2.0 OR BSD-2-clause)" [project] license = "MIT OR GPL-2.0-or-later OR (FSFUL AND BSD-2-Clause)" [project] license = "LicenseRef-Proprietary"
    • Examples of license-files:

      [project] license-files = ["LICEN[CS]E*", "AUTHORS*"] [project] license-files = ["licenses/LICENSE.MIT", "licenses/LICENSE.CC0"] [project] license-files = ["LICENSE.txt", "licenses/*"] [project] license-files = []

    Extras

    Brian:

    • Playground Wisdom: Threads Beat Async/Await - interesting read from Armin Ronacher about different language abstractions around concurrency.
    • PythonTest.com Discord community is now live
      • Launched last week, as of this morning we’ve got 89 members
      • Anyone already a pythontest community member has received an invite
      • Anyone can join through courses.pythontest.com
    • Everything at pythontest.com is 20% off through Dec 2 with code turkeysale2024
    • “Python Testing with pytest” eBook 40% off through Dec 2, use code turkeysale2024

    Michael:

    • Python 3.14.0a2 released
    • Starter packs:
      • Michael’s Python people: https://bsky.app/starter-pack/mkennedy.codes/3lbdnupl26e2x
      • Directory: https://blueskydirectory.com/starter-packs/all

    Joke: curl - heavy metal style!

    25 November 2024, 8:00 am
  • 30 minutes 42 seconds
    #410 Entering the Django core
    Topics covered in this episode:
    Watch on YouTube

    About the show

    Sponsored by us! Support our work through:

    Connect with the hosts

    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: Thoughts on Django’s Core

    • Carlton Gibson
    • Great discussion on
      • Django and Core vs Plugins
      • Sustainability with limited people
      • Keeping core small
      • The release cycle
      • eembrace plugins vs endorsing plugins.

    Michael #2: futurepool

    • via Pat Decker
    • Takes the concept of multiprocessing Pool to the async/await world.
    • Create a pool then delegate the work:

      async with FuturePool(2) as fp: result = await fp.map(async_pool_fn, range(10))
    • I would LOVE to see something like this in a broader background asyncio worker pool concept.

    • But that concept doesn’t exist in asyncio in Python and that’s a failing of the framework IMO.

    Brian #3: Don't return named tuples in new APIs

    • Brett Cannon
    • First off, I’m grateful for any post that talks about APIs and the API is a module, class, or package API and not a Web/REST API. The term API existed long before the internet.
    • “e.g., get_mouse_position() very likely has a two-item tuple of X and Y coordinates of the screen”
    • “it actually makes your API more complex for both you and your users to use. For you, it doubles the data access API surface for your return type as you have to now support index-based and attribute-based data access forever (or until you choose to break your users and change your return type so it doesn't support both approaches)”
    • “… you probably don't want people doing with your return type, like slicing, iterating over all the items …”
    • Alternatives
      • class
      • dataclass
      • dictionary
      • TypedDict
      • SimpleNamespace
    • “My key point in all of this is to prefer readability and ergonomics over brevity in your code. That means avoiding named tuples except where you are expanding to tweaking an existing API where the named tuple improves over the plain tuple that's already being used.”

    Michael #4: Ziglang: Migrating from AWS to Self-Hosting

    • The Rust Foundation for example, reports that they spent $404,400 on infrastructure costs in 2023.
    • Zig lang has decided to use a single big cloud machine + mirrors

    Extras

    Brian:

    • Changing the Python Test community
      • Was started to answer questions for Test & Code listeners years ago.
      • Primarily pytest questions
      • Used to be Slack. Then moved to Podia forum.
      • Now I’m trying to work out a Discord solution that is both sustainable and usable.

    Michael:

    Joke: Breaking: JavaScript Developer Commits to Framework for Record-Breaking 3 Weeks

    18 November 2024, 8:00 am
  • 35 minutes 7 seconds
    #409 We've moved to Hetzner write-up
    Topics covered in this episode:
    Watch on YouTube

    About the show

    Sponsored by:

    • ScoutAPM - Django Application Performance Monitoring
    • Codeium - Free AI Code Completion & Chat

    Connect with the hosts

    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.

    Michael #1: terminal-tree

    • An experimental filesystem navigator for the terminal, built with Textual
    • Tested in macOS only at this point. Chances are very high it works on Linux. Slightly lower chance (but non-zero) that it works on Windows.
      • Can confirm it works on Linux

    Brian #2: posting: The API client that lives in your terminal

    • Also uses Textual
    • From Darren Burns
    • Interesting that the installation instructions recommends using uv:
      • uv tool install --python 3.12 posting
    • Very cool. Great docs. Beautiful. keyboard centric, but also usable with a mouse.
    • “Fly through your API workflow with an approachable yet powerful keyboard-centric interface. Run it locally or over SSH on remote machines and containers. Save your requests in a readable and version-control friendly format.”
    • Able to save multiple environments
    • Great colors
    • Allows scripting to run Python code before and after requests to prepare headers, set variables, etc.

    Michael #3: Extra, extra, extra

    Brian #4: UV does everything or enough that I'm not sure what else it needs to do

    • Jeff Triplett
    • “UV feels like one of those old infomercials where it solves everything, which is where we have landed in the Python world.”
    • “My favorite feature is that UV can now bootstrap a project to run on a machine that does not previously have Python installed, along with installing any packages your application might require.”
    • Partial list (see Jeff’s post for his complete list)
      • uv pip install replaces pip install
      • uv venv replaces python -m venv
      • uv run, uv tool run, and uv tool install replaces pipx
      • uv build - Build your Python package for pypi
      • uv publish - Upload your Python package to pypi, replacing twine and flit publish

    Extras

    Brian:

    Joke: How programmers sleep

    14 November 2024, 8:00 am
  • 31 minutes 16 seconds
    #408 python-preference only-managed 3.13t
    Topics covered in this episode:
    Watch on YouTube

    About the show

    Sponsored by:

    • ScoutAPM - Django Application Performance Monitoring
    • Codeium - Free AI Code Completion & Chat

    Connect with the hosts

    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: GitHub action security: zizmor

    • Article: Ned Batchelder
    • zizmor: William Woodruff & others
    • “a new tool to check your GitHub action workflows for security concerns.”
    • Install with cargo or brew, then point it at workflow yml files.
    • It reports security concerns.

    Michael #2: Python is now the top language on GitHub

    • Thanks to Pat Decker for the heads up.
    • A rapidly growing number of developers worldwide
      • This suggests AI isn’t just helping more people learn to write code or build software faster—it’s also attracting and helping more people become developers. First-time open source contributors continue to show wide-scale interest in AI projects. But we aren’t seeing signs that AI has hurt open source with low-quality contributions.
    • Python is now the most used language on GitHub as global open source activity continues to extend beyond traditional software development.
      • The rise in Python usage correlates with large communities of people joining the open source community from across the STEM world rather than the traditional community of software developers.
    • There’s a continued increase in first-time contributors to open source projects. 1.4 million new developers globally joined open source with a majority contributing to commercially backed and generative AI projects.
      • Notably, we did not see a rise in rejected pull requests. This could indicate that quality remains high despite the influx of new contributors.

    Brian #3: Python 3.13, what didn't make the headlines

    • Some pretty cool updates to pdb : the command line Python debugger
      • multiline editing
      • code completion
    • pathlib has a bunch of performance updates
    • python -m venv adds a .gitignore file that auto ignores the venv.

    Michael #4: PyCon US 2025

    • Site is live with CFP and dates
    • Health code is finally reasonable: “Masks are Encouraged but not Required”
    • PyCon US 2025 Dates
      • Tutorials - May 14-15, 2025
      • Sponsor Presentations - May 15, 2025
      • Opening Reception - May 15, 2025
      • Main Conference and Online - May 16-18, 2025
      • Job Fair - May 18, 2025
      • Sprints - May 19-May 22, 2025

    Extras

    Brian:

    Michael:

    Joke: Debugging char

    4 November 2024, 8:00 am
  • 28 minutes 26 seconds
    #407 Back to the future, destination 3.14
    Topics covered in this episode:
    Watch on YouTube

    About the show

    Sponsored by us! Support our work through:

    Connect with the hosts

    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.

    Michael #1: Python 3.14.0 alpha 1 is now available

    Brian #2: uv supports dependency groups

    • we covered dependency groups in episode 406
    • as of 0.4.27, uv supports dependency groups
    • docs show how to add dependencies with uv add --group
      • also “The --dev, --only-dev, and --no-dev flags are equivalent to --group dev, --only-group dev, and --no-group dev respectively.”
    • To install a group, uv pip install --group doesn’t work yet.
      • It’s waiting for PyPA to decide on an interface for pip, and uv pip will use that interface.
    • But sync works. $ uv init # create a pyproject.toml $ uv add --group foo pytest $ uv venv # create venv $ uv sync --group foo # will install all dependencies, including group "foo"

    Michael #3: dive: A tool for exploring each layer in a docker image

    • via Mike Fiedler
    • Features:
      • Show Docker image contents broken down by layer
      • Indicate what's changed in each layer
      • Estimate "image efficiency"
      • Quick build/analysis cycles
      • CI Integration

    Brian #4: pytest-metadata

    • An incredibly useful plugin for adding, you guessed it, metadata, to your pytest results.
    • Required for pytest-html but also useful on it’s own
    • Adds metadata to
      • text output with --verbose
      • xml output when using --junit-xml, handy for CI systems that support junit.xml
    • Other plugins depend on this and report in other ways, such as pytest-html
    • By default, already grabs
      • Python version
      • Platform info
      • List of installed packages
      • List of installed pytest plugins
    • You can add your own metadata
    • You can access all metadata (and add to it) from tests, fixtures, and hook functions via a metadata fixture.
    • This is in the Top pytest Plugins list, currently #5.

    Extras

    Brian:

    Michael:

    Joke: Dog names

    28 October 2024, 8:00 am
  • 24 minutes 53 seconds
    #406 What's on Django TV tonight?
    Topics covered in this episode:
    Watch on YouTube

    About the show

    Sponsored by ScoutAPM: pythonbytes.fm/scout

    Connect with the hosts

    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: Open Source Pledge

    • Learned about this because of this post
    • Steps
      • Pay Open Source maintainers.
        • Min to participate is 2k/year/dev at your company
      • Self-report annually
        • Publish a blog post outlining your payments
    • Armin’s post about launching Open Source Pledge and mixing money with open source

    Michael #2: Jeff Triplet's DjangoTV

    • A nice aggregation of lots of Django conference talks
    • Filter by conference
    • Good search as well

    Brian #3: PEP 735 – Dependency Groups in pyproject.toml

    • Author: Stephen Rosen, Sponsor: Brett Cannon, PEP-Delegate: Paul Moore
    • Accepted. Resolotion Oct 10, 2024
    • “This PEP specifies a mechanism for storing package requirements in pyproject.toml files such that they are not included in any built distribution of the project.”
    • Allow us to define named groups of dependencies that can be independent of the main project.
    • ex:

      [dependency-groups] test = ["pytest", "coverage"] docs = ["sphinx", "sphinx-rtd-theme"] typing = ["mypy", "types-requests"] typing-test = [{include-group = "typing"}, {include-group = "test"}, "useful-types"]
    • “might” work like this: pip install --dependency-groups=test,typing

      • but tool venders are able to define how they use groups. Of course.
    • Similar solutions
      • multiple requirements.txt files: requirements_test.txt, requirements_docs.txt, etc.
        • no standard naming convention, not standardized
      • package extras:
        • not gauranteed to be statically defined (TIL)
        • additional to main dependencies, so not independent

    Michael #4: livereload

    Extras

    Brian:

    Michael:

    Joke:

    • A programmer’s partner asks them: “Would you go get a loaf of bread from the store? And if they have eggs, get a dozen.”
    • A while later, the programmer returns with 12 loaves of bread and says “They had eggs.”
      • From https://savvyprogrammer.io/software-jokes/
    21 October 2024, 8:00 am
  • 22 minutes 43 seconds
    #405 Oh Really?
    Topics covered in this episode:
    Watch on YouTube

    About the show

    Sponsored by ScoutAPM: pythonbytes.fm/scout

    Connect with the hosts

    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.

    Michael #1: Briefer: Dashboards and notebooks in a single place

    • Notebooks and dashboards with Python, SQL, scheduling, native visualizations, code generation, and more.
    • In Briefer, you can:
      • booksbar chart Create notebooks and dashboards using Markdown, Python, SQL, and native visualizations.
      • selfie Build interactive data apps using inputs, dropdowns, and date pickers.
      • robot Generate code and queries using an AI that understands your database schema and your notebook's context.
      • mantelpiece clock Schedule notebooks and dashboards to run and update periodically.
      • gear Create and test ad-hoc pipelines using writebacks.
    • Briefer vs. Traditional BI Tools: Briefer is better than traditional BI tools because it's faster and more flexible, thanks to Python.
    • Briefer vs. Traditional Notebooks: In Briefer, you can run SQL queries against connected data sources directly in your notebook. Then, Briefer will automatically turn your query into a data frame and store it in a variable that you can use in your Python blocks.

    Brian #2: Introduction to programming with Python

    • Jose Blanca
      • “Python intro aimed at students with no prior programming experience.”
      • “Relies mainly on examples and exercises.”
      • “Does not try to cover every detail of the Python language, but just what a beginner might need to start the journey.”
      • Tech: “… built with the quarto publishing system complemented by the quarto live extension that allows Python to run in the web browser by using pyodide.”
    • Runs on anything, since it doesn’t require a local install of Python
    • Running 3.12.1, looks like. Although that’s a bit hidden. Seems like it should be more visible.

    Michael #3: setup-uv

    • Set up your GitHub Actions workflow with a specific version of uv
    • Install a version of uv and add it to PATH
    • Cache the installed version of uv to speed up consecutive runs on self-hosted runners
    • Register problem matchers for error output
    • (Optional) Persist the uv's cache in the GitHub Actions Cache
    • (Optional) Verify the checksum of the downloaded uv executable

    Brian #4: HTML for people

    • Teaching HTML in a rather fun way.
    • Includes basic CSS

    Extras

    Michael:

    Joke: So much O’Really

    14 October 2024, 8:00 am
  • More Episodes? Get the App
© MoonFM 2024. All rights reserved.