Skip to content

Commit

Permalink
fix #1069
Browse files Browse the repository at this point in the history
  • Loading branch information
ekzhu committed Jan 3, 2024
1 parent b26e659 commit accbe2b
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 10 deletions.
27 changes: 25 additions & 2 deletions autogen/code_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,29 @@ def _cmd(lang):
raise NotImplementedError(f"{lang} not recognized in code execution")


def _sanitize_filename_for_docker_tag(filename: str) -> str:
"""Convert a filename to a valid docker tag.
See https://docs.docker.com/engine/reference/commandline/tag/ for valid tag
format.
Args:
filename (str): The filename to be converted.
Returns:
str: The sanitized Docker tag.
"""
# Replace any character not allowed with an underscore
allowed_chars = set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-")
sanitized = "".join(char if char in allowed_chars else "_" for char in filename)

# Ensure it does not start with a period or a dash
if sanitized.startswith(".") or sanitized.startswith("-"):
sanitized = sanitized.replace(".", "_", 1).replace("-", "_", 1)

# Truncate if longer than 128 characters
return sanitized[:128]


def execute_code(
code: Optional[str] = None,
timeout: Optional[int] = None,
Expand Down Expand Up @@ -374,7 +397,7 @@ def execute_code(
cmd = [
"sh",
"-c",
f"{_cmd(lang)} {filename}; exit_code=$?; echo -n {exit_code_str}; echo -n $exit_code; echo {exit_code_str}",
f'{_cmd(lang)} "{filename}"; exit_code=$?; echo -n {exit_code_str}; echo -n $exit_code; echo {exit_code_str}',
]
# create a docker container
container = client.containers.run(
Expand All @@ -398,7 +421,7 @@ def execute_code(
# get the container logs
logs = container.logs().decode("utf-8").rstrip()
# commit the image
tag = filename.replace("/", "")
tag = _sanitize_filename_for_docker_tag(filename)
container.commit(repository="python", tag=tag)
# remove the container
container.remove()
Expand Down
39 changes: 31 additions & 8 deletions test/test_code.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@
OAI_CONFIG_LIST = "OAI_CONFIG_LIST"
here = os.path.abspath(os.path.dirname(__file__))

try:
import docker

docker_package_installed = True
except ImportError as exc:
docker_package_installed = False


# def test_find_code():
# try:
Expand Down Expand Up @@ -293,10 +300,10 @@ def scrape(url):
assert len(codeblocks) == 1 and codeblocks[0] == ("", "source setup.sh")


@pytest.mark.skipif(
sys.platform in ["darwin"],
reason="do not run on MacOS",
)
# @pytest.mark.skipif(
# sys.platform in ["darwin"],
# reason="do not run on MacOS",
# )
def test_execute_code(use_docker=None):
try:
import docker
Expand Down Expand Up @@ -338,15 +345,31 @@ def test_execute_code(use_docker=None):
assert isinstance(image, str) or docker is None or os.path.exists("/.dockerenv") or use_docker is False


@pytest.mark.skipif(docker_package_installed is False, reason="docker package not installed")
def test_execute_code_with_custom_filename_on_docker():
exit_code, msg, image = execute_code("print('hello world')", filename="tmp/codetest.py", use_docker=True)
assert exit_code == 0 and msg == "hello world\n", msg
assert image == "python:tmp_codetest.py"


@pytest.mark.skipif(docker_package_installed is False, reason="docker package not installed")
def test_execute_code_with_misformed_filename_on_docker():
exit_code, msg, image = execute_code(
"print('hello world')", filename="tmp/codetest.py (some extra information)", use_docker=True
)
assert exit_code == 0 and msg == "hello world\n", msg
assert image == "python:tmp_codetest.py__some_extra_information_"


def test_execute_code_raises_when_code_and_filename_are_both_none():
with pytest.raises(AssertionError):
execute_code(code=None, filename=None)


@pytest.mark.skipif(
sys.platform in ["darwin"],
reason="do not run on MacOS",
)
# @pytest.mark.skipif(
# sys.platform in ["darwin"],
# reason="do not run on MacOS",
# )
def test_execute_code_nodocker():
test_execute_code(use_docker=False)

Expand Down

0 comments on commit accbe2b

Please sign in to comment.