aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Joe Banks <[email protected]>2025-10-09 14:45:23 +0100
committerGravatar Joe Banks <[email protected]>2025-10-09 14:48:59 +0100
commite81b0f13ef0cfeb11a53d52c6b43c976184235f7 (patch)
tree5bfa42b6c4d2583209eaae202d71a7131596c504
parentRemove notice about 3.14 being pre-release (diff)
Move snekbox operational and typing constants to a new file
This will allow all other utility files within the snekbox cog to access types such as `SupportedPythonVersions` without causing circular import issues.
-rw-r--r--bot/exts/utils/snekbox/__init__.py3
-rw-r--r--bot/exts/utils/snekbox/_cog.py33
-rw-r--r--bot/exts/utils/snekbox/_constants.py22
3 files changed, 37 insertions, 21 deletions
diff --git a/bot/exts/utils/snekbox/__init__.py b/bot/exts/utils/snekbox/__init__.py
index fa91d0d6f..b6ad82c7e 100644
--- a/bot/exts/utils/snekbox/__init__.py
+++ b/bot/exts/utils/snekbox/__init__.py
@@ -1,5 +1,6 @@
from bot.bot import Bot
-from bot.exts.utils.snekbox._cog import CodeblockConverter, Snekbox, SupportedPythonVersions
+from bot.exts.utils.snekbox._cog import CodeblockConverter, Snekbox
+from bot.exts.utils.snekbox._constants import SupportedPythonVersions
from bot.exts.utils.snekbox._eval import EvalJob, EvalResult
__all__ = ("CodeblockConverter", "EvalJob", "EvalResult", "Snekbox", "SupportedPythonVersions")
diff --git a/bot/exts/utils/snekbox/_cog.py b/bot/exts/utils/snekbox/_cog.py
index f8651eda5..5fb160a5f 100644
--- a/bot/exts/utils/snekbox/_cog.py
+++ b/bot/exts/utils/snekbox/_cog.py
@@ -1,12 +1,11 @@
from __future__ import annotations
import contextlib
-import re
from collections.abc import Iterable
from functools import partial
from operator import attrgetter
from textwrap import dedent
-from typing import Literal, NamedTuple, TYPE_CHECKING, get_args
+from typing import NamedTuple, TYPE_CHECKING, get_args
from discord import AllowedMentions, HTTPException, Interaction, Message, NotFound, Reaction, User, enums, ui
from discord.ext.commands import Cog, Command, Context, Converter, command, guild_only
@@ -19,6 +18,18 @@ from bot.constants import BaseURLs, Channels, Emojis, MODERATION_ROLES, Roles, U
from bot.decorators import redirect_output
from bot.exts.filtering._filter_lists.extension import TXT_LIKE_FILES
from bot.exts.help_channels._channel import is_help_forum_post
+from bot.exts.utils.snekbox._constants import (
+ ANSI_REGEX,
+ ESCAPE_REGEX,
+ MAX_OUTPUT_BLOCK_CHARS,
+ MAX_OUTPUT_BLOCK_LINES,
+ NO_SNEKBOX_CATEGORIES,
+ NO_SNEKBOX_CHANNELS,
+ REDO_EMOJI,
+ REDO_TIMEOUT,
+ SNEKBOX_ROLES,
+ SupportedPythonVersions,
+)
from bot.exts.utils.snekbox._eval import EvalJob, EvalResult
from bot.exts.utils.snekbox._io import FileAttachment
from bot.log import get_logger
@@ -29,9 +40,6 @@ if TYPE_CHECKING:
log = get_logger(__name__)
-ANSI_REGEX = re.compile(r"\N{ESC}\[[0-9;:]*m")
-ESCAPE_REGEX = re.compile("[`\u202E\u200B]{3,}")
-
# The timeit command should only output the very last line, so all other output should be suppressed.
# This will be used as the setup code along with any setup code provided.
TIMEIT_SETUP_WRAPPER = """
@@ -74,21 +82,6 @@ if not hasattr(sys, "_setup_finished"):
{setup}
"""
-# Max to display in a codeblock before sending to a paste service
-# This also applies to text files
-MAX_OUTPUT_BLOCK_LINES = 10
-MAX_OUTPUT_BLOCK_CHARS = 1000
-
-# The Snekbox commands' whitelists and blacklists.
-NO_SNEKBOX_CHANNELS = (Channels.python_general,)
-NO_SNEKBOX_CATEGORIES = ()
-SNEKBOX_ROLES = (Roles.helpers, Roles.moderators, Roles.admins, Roles.owners, Roles.python_community, Roles.partners)
-
-REDO_EMOJI = "\U0001f501" # :repeat:
-REDO_TIMEOUT = 30
-
-SupportedPythonVersions = Literal["3.14", "3.13", "3.13t"]
-
class FilteredFiles(NamedTuple):
allowed: list[FileAttachment]
blocked: list[FileAttachment]
diff --git a/bot/exts/utils/snekbox/_constants.py b/bot/exts/utils/snekbox/_constants.py
new file mode 100644
index 000000000..efcb47c33
--- /dev/null
+++ b/bot/exts/utils/snekbox/_constants.py
@@ -0,0 +1,22 @@
+import re
+from typing import Literal
+
+from bot.constants import Channels, Roles
+
+ANSI_REGEX = re.compile(r"\N{ESC}\[[0-9;:]*m")
+ESCAPE_REGEX = re.compile("[`\u202E\u200B]{3,}")
+
+# Max to display in a codeblock before sending to a paste service
+# This also applies to text files
+MAX_OUTPUT_BLOCK_LINES = 10
+MAX_OUTPUT_BLOCK_CHARS = 1000
+
+# The Snekbox commands' whitelists and blacklists.
+NO_SNEKBOX_CHANNELS = (Channels.python_general,)
+NO_SNEKBOX_CATEGORIES = ()
+SNEKBOX_ROLES = (Roles.helpers, Roles.moderators, Roles.admins, Roles.owners, Roles.python_community, Roles.partners)
+
+REDO_EMOJI = "\U0001f501" # :repeat:
+REDO_TIMEOUT = 30
+
+SupportedPythonVersions = Literal["3.14", "3.13", "3.13t"]