* Release 2.0: Heavy rewrite with too many new features to enumerate here in the ChangeLog file. * NEWS: List of important changes since 1.x releases. * weather, weather.py: Implemented support for Python 3000 as requested by ptchinster on behalf of Arch Linux, conditions/forecast searches by latitude/longitude requested by Brandt Daniels, support for newer NOAA forecasts pointed out by Darryl Mouck and Richard Dooling, custom URIs requested by Michel Pelzer, international weather stations requested by Milton Hubsher, and fixed a metric conversion issue with negative values reported by Jochen Keil, Michiel Appelman and Stefan Metzlaff. Thanks to everyone for your input and assistance!
116 lines
4.2 KiB
Python
Executable File
116 lines
4.2 KiB
Python
Executable File
#!/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 )
|