Source code for libqtile.widget.wttr

from urllib.parse import quote, urlencode

from libqtile.widget import GenPollUrl


[docs]class Wttr(GenPollUrl): """Display weather widget provided by wttr.in_. .. _wttr.in: https://github.com/chubin/wttr.in/ To specify your own custom output format, use the special %-notation (example: 'My_city: %t(%f), wind: %w'): - %c Weather condition, - %C Weather condition textual name, - %h Humidity, - %t Temperature (Actual), - %f Temperature (Feels Like), - %w Wind, - %l Location, - %m Moonphase 🌑🌒🌓🌔🌕🌖🌗🌘, - %M Moonday, - %p precipitation (mm), - %P pressure (hPa), - %D Dawn !, - %S Sunrise !, - %z Zenith !, - %s Sunset !, - %d Dusk !. (!times are shown in the local timezone) Add the character ``~`` at the beginning to get weather for some special location: ``~Vostok Station`` or ``~Eiffel Tower``. Also can use IP-addresses (direct) or domain names (prefixed with @) to specify a location: ``@github.com``, ``123.456.678.123`` Specify multiple locations as dictionary :: location={ 'Minsk': 'Minsk', '64.127146,-21.873472': 'Reykjavik', } Cities will change randomly every update. """ defaults = [ ( "format", "3", 'Display text format. Choose presets in range 1-4 (Ex. ``"1"``) ' "or build your own custom output format, use the special " "%-notation. See https://github.com/chubin/wttr.in#one-line-output", ), ("json", False, "Is Json?"), ( "lang", "en", "Display text language. List of supported languages " "https://wttr.in/:translation", ), ( "location", {}, "Dictionary. Key is a city or place name, or GPS coordinates. " "Value is a display name. If the dictionary is empty, " "the location will be determined based on your IP address.", ), ( "units", "m", "``'m'`` - metric, ``'M'`` - show wind speed in m/s, " "``'u'`` - United States units", ), ( "update_interval", 600, "Update interval in seconds. Recommendation: if you want to " "display multiple locations alternately, maybe set a smaller " "interval, ex. ``30``.", ), ] def __init__(self, **config): GenPollUrl.__init__(self, json=False, **config) self.add_defaults(Wttr.defaults) self.url = self._get_url() def _get_url(self): params = { "format": self.format, "lang": self.lang, } location = ":".join(quote(loc) for loc in self.location) url = f"https://wttr.in/{location}?{self.units}&{urlencode(params)}" return url def parse(self, response): for coord in self.location: response = response.strip().replace(coord, self.location[coord]) return response