# Rule keywords that come with files
file_kw = ["filemd5", "filesha1", "filesha256", "dataset"]
+def strict_error(msg):
+ logger.error(msg)
+ if config.args().fail:
+ sys.exit(1)
+
class Fetch:
def __init__(self):
tmp_fileobj.close()
except URLError as err:
if os.path.exists(tmp_filename):
- logger.warning(
- "Failed to fetch %s, "
- "will use latest cached version: %s", url, err)
+ msg = "Failed to fetch {}, will use latest cached version: {}".format(url, err)
+ if conf.args().fail:
+ strict_error(msg)
+ logger.warning(msg)
return self.extract_files(tmp_filename)
raise err
except IOError as err:
files.update(fetched)
except URLError as err:
url = url[0] if isinstance(url, tuple) else url
- logger.error("Failed to fetch {}: {}".format(url, err))
+ strict_error("Failed to fetch {}: {}".format(url, err))
else:
for url in self.args.url:
files.update(self.fetch(url))
(("--offline",),
{'action': 'store_true',
'help': "Run offline using most recent cached rules"}),
+ (("--fail",),
+ {'action': 'store_true',
+ 'help': "Strictly fail and exit in case of an error"}),
# Hidden argument, --now to bypass the timebased bypass of
# updating a ruleset.