57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
# Copyright (c) 2023 - 2025, AG2ai, Inc., AG2ai open-source projects maintainers and core contributors
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# Portions derived from https://github.com/ag2ai/ag2 are under the MIT License.
|
|
# SPDX-License-Identifier: MIT
|
|
# Will return the filename relative to the workspace path
|
|
import re
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
filename_patterns = [
|
|
re.compile(r"^<!-- (filename:)?(.+?) -->", re.DOTALL),
|
|
re.compile(r"^/\* (filename:)?(.+?) \*/", re.DOTALL),
|
|
re.compile(r"^// (filename:)?(.+?)$", re.DOTALL),
|
|
re.compile(r"^# (filename:)?(.+?)$", re.DOTALL),
|
|
]
|
|
|
|
|
|
# Raises ValueError if the file is not in the workspace
|
|
def _get_file_name_from_content(code: str, workspace_path: Path) -> Optional[str]:
|
|
first_line = code.split("\n")[0].strip()
|
|
# TODO - support other languages
|
|
for pattern in filename_patterns:
|
|
matches = pattern.match(first_line)
|
|
if matches is not None:
|
|
filename = matches.group(2).strip()
|
|
|
|
# Handle relative paths in the filename
|
|
path = Path(filename)
|
|
if not path.is_absolute():
|
|
path = workspace_path / path
|
|
path = path.resolve()
|
|
# Throws an error if the file is not in the workspace
|
|
relative = path.relative_to(workspace_path.resolve())
|
|
return str(relative)
|
|
return None
|
|
|
|
|
|
def silence_pip(code: str, lang: str) -> str:
|
|
"""Apply -qqq flag to pip install commands."""
|
|
if lang == "python":
|
|
regex = r"^! ?pip install"
|
|
elif lang in ["bash", "shell", "sh", "pwsh", "powershell", "ps1"]:
|
|
regex = r"^pip install"
|
|
else:
|
|
return code
|
|
|
|
# Find lines that start with pip install and make sure "-qqq" flag is added.
|
|
lines = code.split("\n")
|
|
for i, line in enumerate(lines):
|
|
# use regex to find lines that start with pip install.
|
|
match = re.search(regex, line)
|
|
if match is not None and "-qqq" not in line:
|
|
lines[i] = line.replace(match.group(0), match.group(0) + " -qqq")
|
|
return "\n".join(lines)
|