From a69cbecffdd1bc9f618eb02a5a328d5bb694b905 Mon Sep 17 00:00:00 2001 From: Frisk Date: Sun, 20 Jun 2021 02:43:43 +0200 Subject: [PATCH] Fixed #219 --- extensions/base/abusefilter.py | 8 ++++---- src/discussions.py | 17 +++++++++++++---- src/exceptions.py | 4 ++++ src/rcgcdw.py | 25 +++++++++++++++++++++---- 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/extensions/base/abusefilter.py b/extensions/base/abusefilter.py index 4cd23b1..d54226c 100644 --- a/extensions/base/abusefilter.py +++ b/extensions/base/abusefilter.py @@ -73,7 +73,7 @@ def compact_abuselog(ctx: Context, change: dict): # abusefilter/modify - AbuseFilter filter modification -@formatter.embed(event="abuselog/modify") +@formatter.embed(event="abusefilter/modify") def embed_abuselog_modify(ctx: Context, change: dict): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) @@ -84,7 +84,7 @@ def embed_abuselog_modify(ctx: Context, change: dict): return embed -@formatter.compact(event="abuselog/modify") +@formatter.compact(event="abusefilter/modify") def compact_abuselog_modify(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) link = clean_link(create_article_path( @@ -103,7 +103,7 @@ def compact_abuselog_modify(ctx: Context, change: dict): # abusefilter/create - AbuseFilter filter creation -@formatter.embed(event="abuselog/create") +@formatter.embed(event="abusefilter/create") def embed_abuselog_create(ctx: Context, change: dict): embed = DiscordMessage(ctx.message_type, ctx.event, ctx.webhook_url) embed_helper(ctx, embed, change) @@ -111,7 +111,7 @@ def embed_abuselog_create(ctx: Context, change: dict): embed["title"] = _("Created abuse filter number {number}").format(number=change["logparams"]['newId']) return embed -@formatter.compact(event="abuselog/create") +@formatter.compact(event="abusefilter/create") def compact_abuselog_create(ctx: Context, change: dict): author, author_url = compact_author(ctx, change) link = clean_link( diff --git a/src/discussions.py b/src/discussions.py index ed63331..6ef5094 100644 --- a/src/discussions.py +++ b/src/discussions.py @@ -16,20 +16,21 @@ # along with RcGcDw. If not, see . import logging, schedule, requests -from typing import Dict, Any +from typing import Dict, Any, Optional from src.configloader import settings #from src.discussion_formatters import embed_formatter, compact_formatter 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.discord.message import DiscordMessageMetadata, DiscordMessage from src.session import session -from src.exceptions import ArticleCommentError +from src.exceptions import ArticleCommentError, NoFormatter from src.api.util import default_message from src.api.context import Context from src.api.hooks import formatter_hooks, pre_hooks, post_hooks + # Create a custom logger discussion_logger = logging.getLogger("rcgcdw.disc") @@ -122,7 +123,15 @@ def parse_discussion_post(post, comment_pages): event_type = f"discussion/{post_type.lower()}" context.set_comment_page(comment_page) run_hooks(pre_hooks, context, post) - discord_message = default_message(event_type, formatter_hooks)(context, post) + try: + discord_message = default_message(event_type, formatter_hooks)(context, post) + except NoFormatter: + return + 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 metadata = DiscordMessageMetadata("POST") run_hooks(post_hooks, discord_message, metadata, context, post) send_to_discord(discord_message, metadata) diff --git a/src/exceptions.py b/src/exceptions.py index 6f4ac72..c4e84f2 100644 --- a/src/exceptions.py +++ b/src/exceptions.py @@ -32,6 +32,10 @@ class ServerError(Exception): """Exception for when a request fails because of Server error""" pass +class NoFormatter(Exception): + """Exception to throw when there are no formatters""" + pass + class ClientError(Exception): """Exception for when a request failes because of Client error""" diff --git a/src/rcgcdw.py b/src/rcgcdw.py index 26001f2..612fc95 100644 --- a/src/rcgcdw.py +++ b/src/rcgcdw.py @@ -33,7 +33,7 @@ from src.misc import add_to_dict, datafile, WIKI_API_PATH, LinkParser, run_hooks from src.api.util import create_article_path, default_message from src.discord.queue import send_to_discord from src.discord.message import DiscordMessage, DiscordMessageMetadata -from src.exceptions import MWError, ServerError, MediaWikiError, BadRequest, ClientError +from src.exceptions import MWError, ServerError, MediaWikiError, BadRequest, ClientError, NoFormatter from src.i18n import rcgcdw from src.wiki import Wiki @@ -75,7 +75,7 @@ if settings["limitrefetch"] != -1 and os.path.exists("lastchange.txt") is True: def no_formatter(ctx: Context, change: dict) -> None: logger.warning(f"There is no formatter specified for {ctx.event}! Ignoring event.") - return + raise NoFormatter formatter_hooks["no_formatter"] = no_formatter @@ -205,7 +205,16 @@ def rc_processor(change, changed_categories): 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) + try: + discord_message: Optional[DiscordMessage] = default_message("suppressed", formatter_hooks)(context, change) + except NoFormatter: + return + 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 else: if "commenthidden" not in change: LinkParser.feed(change.get("parsedcomment", "")) @@ -267,7 +276,15 @@ def abuselog_processing(entry): 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) + try: + discord_message: Optional[DiscordMessage] = default_message(action, formatter_hooks)(context, entry) + except NoFormatter: + return + 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 metadata = DiscordMessageMetadata("POST") run_hooks(post_hooks, discord_message, metadata, context, entry) discord_message.finish_embed()