diff options
Diffstat (limited to 'weather-2.3/weather')
-rwxr-xr-x | weather-2.3/weather | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/weather-2.3/weather b/weather-2.3/weather new file mode 100755 index 0000000..67a13c8 --- /dev/null +++ b/weather-2.3/weather @@ -0,0 +1,115 @@ +#!/usr/bin/env python +# distributions may wish to edit the above to refer to a specific interpreter +# path, such as #!/usr/bin/python + +# Copyright (c) 2006-2012 Jeremy Stanley <fungi@yuggoth.org>. Permission to +# use, copy, modify, and distribute this software is granted under terms +# provided in the LICENSE file distributed with this software. + +"""Wrapper utility using the weather.py module.""" + +# added so distributors can consistently specify a private module location +private_module_path = None +if private_module_path: + import sys + sys.path.insert(1, private_module_path) + +import weather + +# initialize options and configs +selections = weather.Selections() + +# this mode just lists the aliases defined in the config +if selections.get_bool("list"): + print( weather.list_aliases(selections.config) ) + +# this mode lists details of aliases defined in the config +elif selections.get_bool("longlist"): + print( weather.list_aliases(selections.config, detail=True) ) + +# this mode builds the correlation data files +elif selections.get_bool("build_sets"): + weather.correlate() + +# if no arguments were provided +elif not selections.arguments: + import sys + + # substitute defaults if we have any + if selections.config.has_option("default", "defargs"): + sys.argv += selections.config.get("default", "defargs").split(",") + selections = weather.Selections() + + # otherwise be helpful + else: + sys.argv += ("--help",) + selections = weather.Selections() + +# these modes analyze correlations +if selections.get_bool("info"): + weather.guess( + selections.arguments[0], + path=selections.get("setpath"), + info=selections.get_bool("info"), + cache_search=( + selections.get_bool("cache") \ + and selections.get_bool("cache_search") + ), + cacheage=selections.getint("cacheage"), + cachedir=selections.get("cachedir") + ) + +# normal operation +else: + output = "" + for argument in selections.arguments: + if selections.get_bool("conditions", argument) or not ( + selections.get_bool("alert", argument) \ + or selections.get_bool("forecast", argument) + ): + partial = weather.get_metar( + uri=selections.get("metar", argument), + verbose=selections.get_bool("verbose", argument), + quiet=selections.get_bool("quiet", argument), + headers=selections.get("headers", argument), + imperial=selections.get_bool("imperial", argument), + metric=selections.get_bool("metric", argument), + cache_data=( + selections.get_bool("cache") \ + and selections.get_bool("cache_data") + ), + cacheage=selections.getint("cacheage"), + cachedir=selections.get("cachedir") + ) + if partial: output += partial + "\n" + if selections.get_bool("forecast", argument) \ + or selections.get_bool("alert", argument): + alert_text = "" + if selections.get_bool("alert", argument): + atypes = selections.get("atypes", argument).split(",") + else: + atypes = [] + if selections.get_bool("forecast", argument): + atypes = ["zone_forecast"] + atypes + for atype in atypes: + partial = weather.get_alert( + uri=selections.get(atype, argument), + verbose=selections.get_bool("verbose", argument), + quiet=selections.get_bool("quiet", argument), + cache_data=( + selections.get_bool("cache") \ + and selections.get_bool("cache_data") + ), + cacheage=selections.getint("cacheage"), + cachedir=selections.get("cachedir") + ) + if partial: + alert_text += "***** %s *****\n%s\n" % ( + atype.replace("_", " ").title(), + partial + ) + if not alert_text: + alert_text = "(no current alerts for this zone)\n" + output += alert_text + output = output.strip() + if output: print( output ) |