PyWeather
PyWeather was my first, and biggest long-term project. Starting as a simple idea of checking the weather in Python, it turned into a fully-featured experience that eventually incorporated vast amounts of data types and extensive customization, all while keeping up with open-source project management.
It was my most complex, feature-rich, and balls to the walls project I’ve ever made.
PyWeather development ended in December 2018, as the Wunderground API used was shut down in February 2019.
—
Lines of code: ~11,000
Languages: Python
Frameworks: Wunderground API, GeoNames API
Timeframe: February 2017 - December 2018
This is the PyWeather Setup script. Since PyWeather was extremely customizable, and had so many things to customize, in the final Version 1.0.3, there were 50 (!!) setup steps.
This is the main summary screen of PyWeather. It showed, by default, the current weather, hourly conditions, and the forecast for the next few days. With the extensive config file it had, you could configure it to show a variety of things on the homescreen.
If there was an active weather alert for the area entered, on the summary screen, the warnings would be visible.
The current weather screen, which was the first PyWeather option.
Detailed alert data screen. Wunderground got alert data from various sources, some of which conditionally required attribution. That was fun to implement! The example here is what would be displayed for a NWS (National Weather Service) alert in the USA.
The hourly forecast for PyWeather, which by default iterates two hours at a time. I wish I had done a table instead…
Daily forecast, which goes 3 days at a time.
Hurricane support was very much a thing, and it also used the GeoNames API to find nearest cities within 300 km of the hurricane location when the option is enabled.
Almanac was also included in PyWeather, so you could see the records for the nearest airport on the day you checked Pyweather.
This is a pretty cool feature that PyWeather had - historical weather data. The WU API had this option. i didn’t know how to do dare parsing, so you were expected to input the date in YYYYMMDD fashion.
Detailed sun & moon data? We got that too.
Alongside all of that, there’s a whole radar GUI built in appJar (basically Tkinter for kids). WU’s API had the ability to download radar .gifs, and so I made a simple GUI that allowed users to see the radar for the location they entered at five different zoom levels.
The about section of PyWeather. The screenshot here is from Version 1.0.3, which was the final release of PyWeather, so I included a sweet goodbye message.
And if that wasn’t enough, PyWeather had it’s own built-in, self updater! It didn’t work that well until the very final versions (it took A LOT of attempts to get it right), but man was it so satisfying to get an automatic updater working in a case like this.
I don’t think I’ll ever implement something like this again, but it’s such a cool touch.
Another awesome feature in PyWeather? Caching! In later versions of PyWeather, if weather data got too stale over a period of time, when a user went to view the weather again, PyWeather would download updated data, cache that, and show it to the user.
Of course, no project is complete without a fully built-in debugger that can be turned off in the configuration file. Because this is PyWeather.
Seriously - PyWeather was by far my most complex project! This was a fully fledged desktop application, and I treated it as such. It’s a project I’ll always look back on with fond memories, and I’m so happy I could call this my first major project!