Make the alert and forecast expiration delay user-configurable, both in configuration and at runtime on the command line.
117 lines
4.3 KiB
Python
Executable File
117 lines
4.3 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-2024 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"),
|
|
delay=selections.getint("delay")
|
|
)
|
|
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 )
|