Add error tolerance setting

This commit is contained in:
Frisk 2021-05-14 14:30:52 +02:00
parent 6fe55dc09c
commit 765d1c9d70
No known key found for this signature in database
GPG key ID: 213F7C15068AF8AC
4 changed files with 32 additions and 10 deletions

View file

@ -21,6 +21,7 @@
"show_updown_messages": true,
"ignored_namespaces": [],
"extensions_dir": "extensions",
"error_tolerance": 1,
"overview": false,
"overview_time": "00:00",
"send_empty_overview": false,

View file

@ -21,7 +21,7 @@ from typing import Dict, Any
from src.configloader import settings
#from src.discussion_formatters import embed_formatter, compact_formatter
from src.misc import datafile, prepare_paths
from src.misc import datafile, prepare_paths, run_hooks
from src.discord.queue import messagequeue, send_to_discord
from src.discord.message import DiscordMessageMetadata
from src.session import session
@ -121,8 +121,11 @@ def parse_discussion_post(post, comment_pages):
raise ArticleCommentError
event_type = f"discussion/{post_type.lower()}"
context.set_comment_page(comment_page)
message = default_message(event_type, formatter_hooks)(context, post)
send_to_discord(message, meta=DiscordMessageMetadata("POST"))
run_hooks(pre_hooks, context, post)
discord_message = default_message(event_type, formatter_hooks)(context, post)
metadata = DiscordMessageMetadata("POST")
run_hooks(post_hooks, discord_message, metadata, context)
send_to_discord(discord_message, metadata)
def safe_request(url):

View file

@ -291,6 +291,17 @@ def send_simple(msgtype, message, name, avatar):
send_to_discord(discord_msg, meta=DiscordMessageMetadata("POST"))
def run_hooks(hooks, *arguments):
for hook in hooks:
try:
hook(*arguments)
except:
if settings.get("error_tolerance", 1) > 0:
misc_logger.exception("On running a pre hook, ignoring pre-hook")
else:
raise
def profile_field_name(name, embed):
try:
return profile_fields[name]

View file

@ -29,7 +29,7 @@ import src.api.client
from src.api.context import Context
from src.api.hooks import formatter_hooks, pre_hooks, post_hooks
from src.configloader import settings
from src.misc import add_to_dict, datafile, WIKI_API_PATH, LinkParser
from src.misc import add_to_dict, datafile, WIKI_API_PATH, LinkParser, run_hooks
from src.api.util import create_article_path, default_message, sanitize_to_markdown
from src.discord.queue import send_to_discord
from src.discord.message import DiscordMessage, DiscordMessageMetadata
@ -235,8 +235,7 @@ def rc_processor(change, changed_categories):
page_id=change.get("pageid", None))
logger.debug(change)
context = Context(settings["appearance"]["mode"], settings["webhookURL"], client)
for hook in pre_hooks:
hook(change)
run_hooks(pre_hooks, context, change)
if ("actionhidden" in change or "suppressed" in change) and "suppressed" not in settings["ignored"]: # if event is hidden using suppression
context.event = "suppressed"
discord_message: Optional[DiscordMessage] = default_message("suppressed", formatter_hooks)(context, change)
@ -267,7 +266,13 @@ def rc_processor(change, changed_categories):
if identification_string in settings["ignored"]:
return
context.event = identification_string
discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change)
try:
discord_message: Optional[DiscordMessage] = default_message(identification_string, formatter_hooks)(context, change)
except:
if settings.get("error_tolerance", 1) > 0:
discord_message: Optional[DiscordMessage] = None # It's handled by send_to_discord, we still want other code to run
else:
raise
if identification_string in ("delete/delete", "delete/delete_redir") and AUTO_SUPPRESSION_ENABLED: # TODO Move it into a hook?
delete_messages(dict(pageid=change.get("pageid")))
elif identification_string == "delete/event" and AUTO_SUPPRESSION_ENABLED:
@ -284,8 +289,7 @@ def rc_processor(change, changed_categories):
else:
for revid in logparams.get("ids", []):
delete_messages(dict(revid=revid))
for hook in post_hooks:
hook(discord_message, metadata)
run_hooks(post_hooks, discord_message, metadata, context)
send_to_discord(discord_message, metadata)
@ -294,9 +298,12 @@ def abuselog_processing(entry):
if action in settings["ignored"]:
return
context = Context(settings["appearance"]["mode"], settings["webhookURL"], client)
run_hooks(pre_hooks, context, entry)
context.event = action
discord_message: Optional[DiscordMessage] = default_message(action, formatter_hooks)(context, entry)
send_to_discord(discord_message, DiscordMessageMetadata("POST"))
metadata = DiscordMessageMetadata("POST")
run_hooks(post_hooks, discord_message, metadata, context)
send_to_discord(discord_message, metadata)
load_extensions()