Add --delay command line and delay config options

Make the alert and forecast expiration delay user-configurable, both
in configuration and at runtime on the command line.
This commit is contained in:
Jeremy Stanley
2024-05-11 01:33:58 +00:00
parent 5b44af7bec
commit eb5bfa4c58
2 changed files with 17 additions and 7 deletions

View File

@@ -2,7 +2,7 @@
# 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
# 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.
@@ -101,7 +101,8 @@ else:
and selections.get_bool("cache_data")
),
cacheage=selections.getint("cacheage"),
cachedir=selections.get("cachedir")
cachedir=selections.get("cachedir"),
delay=selections.getint("delay")
)
if partial:
alert_text += "***** %s *****\n%s\n" % (

View File

@@ -320,7 +320,8 @@ def get_alert(
quiet=False,
cache_data=False,
cacheage=900,
cachedir="."
cachedir=".",
delay=1
):
"""Return alert notice for the specified URI."""
if not uri:
@@ -343,14 +344,13 @@ def get_alert(
muted = False
expirycheck = re.search(r"Expires:([0-9]{12})", alert)
if expirycheck:
# only report alerts and forecasts that expired less than
# offset ago
# only report alerts and forecasts that expired less than delay
# hours ago
import datetime, zoneinfo
expiration = datetime.datetime.fromisoformat(
"%sT%sZ" % (expirycheck[1][:8], expirycheck[1][-4:]))
now = datetime.datetime.now(tz=zoneinfo.ZoneInfo("UTC"))
# TODO: make this offset configurable
if now - expiration > datetime.timedelta(hours=1):
if now - expiration > datetime.timedelta(hours=delay):
return ""
lines = alert.split("\n")
output = []
@@ -437,6 +437,15 @@ def get_options(config):
default=default_cachedir,
help="directory for storing cached searches and data")
# the --delay option
if config.has_option("default", "delay"):
default_delay = config.getint("default", "delay")
else: default_delay = 1
option_parser.add_option("--delay",
dest="delay",
default=default_delay,
help="hours to delay alert and forecast expiration")
# the -f/--forecast option
if config.has_option("default", "forecast"):
default_forecast = config.getboolean("default", "forecast")