I don’t know if it’s the true place to ask, apologizing if not. I started to python one and half week ago. So I’m still beginner.
I made a terminal based weather application with python. What do you think about the code, is it good enough? I mean is it professional enough and how can I make the same functions with more less code?
Here’s the main file (I also added it as url to post): https://raw.githubusercontent.com/TheCitizenOne/openweather/refs/heads/main/openweather.py
Here’s the config.json file: https://raw.githubusercontent.com/TheCitizenOne/openweather/refs/heads/main/config.json


Nice work! Here are a few notes:
The
WeatherAppobject has a mix of attributes with long-term (egself.LOCATIONS) and short-term (egself.city) relevance. Instance attributes introduced in places other than__init__, which makes it non-trivial for a reader to quickly understand what the object contains. And, actually,self.{city,lat,lon}are all only used from theadd_citymethod so they could/should be local variables instead of instance attributes (just remove theself.from them).There seem to maybe be some bugs around when things are lowercase and when not; for example checking
if self.city.lower() in self.LOCATIONSbut then when writing there the non-lowerself.ctiyis used as the key toself.LOCATIONS.The code under
if rep == "1"andelif rep == "2"is mostly duplicated, and there is noelsebranch to cover ifrepis something other than 1 or 2.It looks like the config only persists favorites so far (and not non-favorite cities which the user can add) which isn’t obvious from the user interface.
Passing both
locationandlocationsintoWeatherAPIso that it can look uplocations[location]is unnecessary; it would be clearer to pass in the dict for the specific location. It would also be possible to avoid the need forLOWLOCATIONSby adding a non-lowercasenamekey to the per-location dictionaries that just havelatandlonright now, and then keepingLOCATIONSkeyed by the lowercase names.HTH! happy hacking :)
That’s very informative, I will rewrite the code with your suggestions. Thank you!