Python Posts

165 posts tagged with python

Rich recently added two interesting new features.

The first feature is SVG support. Anything printed to the terminal with Rich can be captured and exported to an SVG file. The output is somewhat like a screenshot but generated within Rich itself (it doesn't peek at your desktop).

A SVG generated from Rich (converted to a PNG).

I think these SVGs will be useful for sharing terminal output, particularly for documentation.

The API to save SVGs works in the same way as the methods to save / export text and HTML. Here's the code that generated the above image: continue reading…

I've just released v0.1.15 of Textual, with Windows support.

The Windows support is somewhat experimental, but so far seems solid. You will get best results on the new Windows Terminal. On the classic command prompt you might find a reduced color palette. This works on VSCode, but is missing mouse input on Windows 10 due to an upstream issue which is apparently fixed in Windows 11. If you have Windows 11, I'd appreciate confirmation on that!

This is the code_viewer example in the Textual repo. continue reading…

Before my recent career change I described myself as a full stack web developer (hey I built this blog). When I started building web sites professionally the work that a front-end developer did was considered a lesser form of software development, requiring a less academic set of skills than the developers who wrote code to talk to databases and serve APIs.

Now I'm not convinced that was true even back in the day, and it is not even remotely true now (I might go as far to suggest the reverse may be true). Just one of the skills you need for front end development is CSS, the code which defines how a web page looks. There is a lot to learn and to wield CSS well. continue reading…

I recently posted about my plans to take a "year off" to work full time on open source. The TL and DR of it was that I would live on savings while working on Rich and Textual, both of which where generating a bit of buzz in the Python community.

Additionally, I would work on a cloud service using both those projects which at some point would become a business.

Now this was a good plan. The money from GitHub sponsors which I had previously been donating to charity would take the sting out of not having an income for a while. While far from a salary (where I live), at around $1000 a month it would help pay a few bills. continue reading…

I recently came to a decision which will have a big impact on my open source work. In particular Rich and Textual, but also pyfilesystem and lomond. For the foreseeable future, possibly up to a year, I'll be working on them essentially full time.

Rich is a very popular project now, with over 29K stars on Github. It has near 100% coverage and a stable API, but no codebase is ever really finished so there will be on-going work. Textual is Rich's sister project which is brand new and under active development, but already has 4.8K stars. It is also a much larger project than Rich. To do Textual justice I'm going to need to put in some serious time over and above what I could realistically do for a hobby project.

Some of the applications in the Textual examples directory continue reading…

If you work with JSON regularly (90% of Python developers I suspect) you might appreciate the print_json function just landed in Rich v10.9.0

If you call this function with a string, Rich will decode the string, reformat it, and print it to the console with nice syntax highlighting. Here's an example:

Here's the output:

Calling print_json with a string will decode the JSON and pretty print it.

Note that the atomic values false, true, and null have their own color. I find this helpful when scanning a JSON blob.

If you call print_json with a data keyword argument it will encode that data and pretty print it in the same way.

Here's the output:

Calling the print_json function with a data keyword argument. continue reading…

I've started work on a new project called Textual.

Textual is (or will be) a TUI framework using Rich as a renderer. It's still very early days, but ultimately the goal is to have something which you can uses to build a Text User Interface with little to no boiler-plate.

It is async powered. Each "widget" runs in an async task and communicates via a message queue. This should allow the UI to remain responsive even when the app is doing work.

Running a Textual app in Vscode.

An example Textual app (currently the only one) with a default layout. Title bar with working clock. Side panel that can be toggled with a key. And a scrolling window containing Markdown. continue reading…

Rich has become a popular (20K stars on GH) way of beautifying CLIs, and I'm pleased to see a number of projects using it.

Since Rich is mature and battle-tested now, I had considered winding-down development. Until, I saw this tweet:

Do you want to see something really cool you can do with @willmcgugan 's rich library?

Checkout ghtop It's a really fun CLI tool that demonstrates the power of rich (and other things).

Examples below 🧵👇 (1/8)

— Hamel Husain (@HamelHusain)

@HamelHusain and @jeremyphoward used Rich to enhance ghtop (a repo owned by the CEO of Github, no less). Ghtop shows a realtime a stream of events from the Github platform. And it looks good! So good that I realised how much potential Rich has for these type of htop-like applications. continue reading…

The latest version of Rich adds a tree view. Here's an example of one:

The labels of each branch in the tree can be text or anything else that rich can render. The guide lines can have a color per-branch and one of three styles; normal, thick, and double line.

The API to generate these trees is super simple and currently has just one public method to add a new branch.

Here's a simple example demonstrating that money does, in fact, grow on trees. continue reading…

Rich 5.1.0 adds the ability to integrate highlighted pretty printing with the Python REPL. Here's how you would use it in a session:

Assuming you have installed Rich of course.

Now any data will be formatted and highlighted. Here's an example:

Rich will expand builtin containers until the output fits in to the width of the screen.

In addition to Python data structures, any object supporting the Rich Console Protocol will be displayed. Here's an example:

The Panel class is one of a number of renderables in Rich.

The formatting and highlighting really comes in to its own when you're working with JSON data. The following video shows an example of pretty printing data queried from a web service. In this instance, its cat facts.

Follow @willmcgugan for updates regarding Rich.