From 85da0e5fa517dad2ea39165b7964b1fbf1df9bdb Mon Sep 17 00:00:00 2001 From: Chris Lovering Date: Thu, 3 Oct 2024 23:18:18 +0100 Subject: [PATCH] Support both Python 3.12 and 3.13 in eval --- bot/exts/utils/snekbox/_cog.py | 12 +++++------- bot/exts/utils/snekbox/_eval.py | 8 ++++++++ tests/bot/exts/utils/snekbox/test_snekbox.py | 5 +++-- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/bot/exts/utils/snekbox/_cog.py b/bot/exts/utils/snekbox/_cog.py index decc1780b2..32384c43fe 100644 --- a/bot/exts/utils/snekbox/_cog.py +++ b/bot/exts/utils/snekbox/_cog.py @@ -86,7 +86,7 @@ def print_last_line(): REDO_EMOJI = "\U0001f501" # :repeat: REDO_TIMEOUT = 30 -SupportedPythonVersions = Literal["3.12"] +SupportedPythonVersions = Literal["3.12", "3.13"] class FilteredFiles(NamedTuple): @@ -181,18 +181,16 @@ def build_python_version_switcher_view( ) -> interactions.ViewWithUserAndRoleCheck: """Return a view that allows the user to change what version of Python their code is run on.""" alt_python_version: SupportedPythonVersions - if current_python_version == "3.10": - alt_python_version = "3.11" + if current_python_version == "3.12": + alt_python_version = "3.13" else: - alt_python_version = "3.10" # noqa: F841 + alt_python_version = "3.12" view = interactions.ViewWithUserAndRoleCheck( allowed_users=(ctx.author.id,), allowed_roles=MODERATION_ROLES, ) - # Temp disabled until snekbox multi-version support is complete - # https://github.com/python-discord/snekbox/issues/158 - # view.add_item(PythonVersionSwitcherButton(alt_python_version, self, ctx, job)) + view.add_item(PythonVersionSwitcherButton(alt_python_version, self, ctx, job)) view.add_item(interactions.DeleteMessageButton()) return view diff --git a/bot/exts/utils/snekbox/_eval.py b/bot/exts/utils/snekbox/_eval.py index 3867b81de8..493def63f4 100644 --- a/bot/exts/utils/snekbox/_eval.py +++ b/bot/exts/utils/snekbox/_eval.py @@ -50,8 +50,16 @@ def to_dict(self) -> dict[str, list[str | dict[str, str]]]: return { "args": self.args, "files": [file.to_dict() for file in self.files], + "binary_path": self.binary_path(), } + def binary_path(self) -> str: + if self.version == "3.12": + return "/snekbin/python/3.12/bin/python" + if self.version == "3.13": + return "/snekbin/python/3.13/bin/python" + return "/snekbin/python/default/bin/python" + @dataclass(frozen=True) class EvalResult: diff --git a/tests/bot/exts/utils/snekbox/test_snekbox.py b/tests/bot/exts/utils/snekbox/test_snekbox.py index 3595d9a67a..28ed407cc8 100644 --- a/tests/bot/exts/utils/snekbox/test_snekbox.py +++ b/tests/bot/exts/utils/snekbox/test_snekbox.py @@ -44,9 +44,10 @@ async def test_post_job(self): "files": [ { "path": "main.py", - "content": b64encode(b"import random").decode() + "content": b64encode(b"import random").decode(), } - ] + ], + "binary_path": "/snekbin/python/default/bin/python", } self.bot.http_session.post.assert_called_with( constants.URLs.snekbox_eval_api,