Knowledge Bits References I wish I'd already found
Atom · RSS

About the Author

John T. Wodder II (jwodder on GitHub and other places) is a computer programmer who currently works primarily in Python and Rust but has previously also done work in C, Perl, and Haskell, among other languages. He enjoys abstract & discrete mathematics, *nix-based operating systems, sum types, static type checking, asynchronous programming, data-driven testing, and large properly-formatted data files.

He dislikes Windows, C++, and floating-point numbers.

Check out his projects on GitHub, PyPI, and crates.io.

Articles by John T. Wodder II


Converting Lists to Simple Tables and Back with rs

If you have a file that’s just a list of items, one item per line, and you want to turn it into a simple table — one delimited just by whitespace without any border characters — how would you do that? Follow up question: If you have a simple table, and you want to convert it into a list of items, one per line, how would you do that? The answer to both questions is: with the rs command, and this article will show you how.




Python Asynchronous Programming Fundamentals

Python introduced asynchronous programming capabilities in version 3.4 in 2014, with further notable improvements in almost every minor version since. However, to many Python programmers, this area of the language remains esoteric, misunderstood, and underutilized. This article aims to elucidate the fundamental concepts of asynchronous programming as part of the first step towards mastery.



Skipping Pytest Tests Unless an Option is Given

When testing Python code with pytest, you may occasionally write tests that you only want to run under special circumstances, such as long-running tests that should only be run under continuous integration and not when invoking pytest locally. The naïve way to accomplish this is to decorate the tests in question with a pytest mark like @pytest.mark.slow and then specify -m "not slow" when running pytest locally, but then you have to remember to pass this option every time, and if you hardcode it into your tox.ini or pytest configuration, you’ll need something else to remove it when testing under CI. Fortunately, there are better ways to make pytest skip tests by default.




Integrating auto with bump2version

auto by Intuit lets you set up automatic creation of tags & releases and population of changelogs in a GitHub project. It takes care of determining the version number for new releases, but, by default, it does not set the new version number in your code. This isn’t a problem if your project uses something like setuptools_scm or versioneer to fetch the version number from Git, but if your project’s version number is hardcoded in your code, you’ll need another solution. bump2version is that solution, and it can be integrated into auto as shown here.



Running Extra Steps after Releasing with auto in GitHub Actions

Let’s say you’ve set up auto for your project via a GitHub Actions workflow, and now you want that workflow to carry out additional steps — such as building & uploading assets — whenever auto creates a new release. Let’s also say that none of the available plugins for auto covers your use-case and you’re not a JavaScript programmer, so you won’t be writing a new plugin to do what you want. How do you adjust your GitHub Actions workflow to run these extra steps at the right time? Read to find out.