Rewrite Hugo Themes Report in Python
2019, Jan 25
A while back I was grazing the selfhosted subreddit, and noticed Hugo coming up in conversation. I recalled that hugo requires a third-party theme in order to function. But was a bit of a challenge, because how do you know what is a good Hugo theme?
I ended up writing a little bash script (now deprecated) that scrapes the Github api and generates a little report about Hugo themes. It basically curled json from the Github api, and parsed it with grep, awk, and sed, and eventually spat out a plain text file.
It was about a year later that I decided to rewrite the script in Python, using sqlite as a database. I discovered how to use the python requests module, got some practice with sqlite, and discovered how to make conditional request against the Github api using ETags and ‘If-Modified-Since’ (ETags are easier).
But this was my first time using python like this. And I have to tell you, it’s a lot moar fun than recursive fibonacci tutorials!
By the time I had figured out how to collect the data I needed, I realized that I could simply generate an html table right in the python script.
rank_hugo_themes.py runs in a cronjob every night, and you can
view Hugo Themes Report here.
And you can see the script on Github.
I then went on to use the same system to create a report for myself about my personal stash of Arch AUR PKGBUILDS, and an unofficial Gentoo overlay, both of which I have (maintain?) for my own amusement. It saves quite a bit of time having an automatically generated table every morning showing which packages have been updated upstream.
After listening to some back episodes of Talk Python To Me, I became aware of sqlalchemy. This sounded like something I should learn about, so I rewrote the script using sqlalchemy instead of the sqlite module.
I guess now I can go back and spice things up with comments and tests, but there’s always tomorrow right? But that also leads to the question of how/why I started this blog.
Ironically, I never intended to use Hugo as a blogging platform. I was happy with mkdocs for documentation. But static blogs are easy, and so I began looking over the options.
I was hoping to use Pelican. But then I made an interesting discovery: Pelican has the same problem with theme ranking as Hugo does. And I haven’t created a Pelican Themes Report yet!
So I opened up Hugo Themes Report, found a theme that was reasonably popular and well-maintained that I like the looks of, which turned out to be MunifTanjim/Minimo, and am quite pleased with the result.
And I am also quite pleased that hugo is available as a snap package, although there are several other installation methods.