Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

run python scripts as "python -c text" #8565

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 1 addition & 5 deletions src/poetry/inspection/info.py
Expand Up @@ -586,11 +586,7 @@ def get_pep517_metadata(path: Path) -> PackageInfo:
"--no-input",
*PEP517_META_BUILD_DEPS,
)
venv.run(
"python",
"-",
input_=pep517_meta_build_script,
)
venv.run_python_script(pep517_meta_build_script)
info = PackageInfo.from_metadata(dest_dir)
except EnvCommandError as e:
# something went wrong while attempting pep517 metadata build
Expand Down
20 changes: 4 additions & 16 deletions src/poetry/utils/env/base_env.py
Expand Up @@ -327,8 +327,8 @@ def run_python_script(self, content: str, **kwargs: Any) -> str:
"-I",
"-W",
"ignore",
"-",
input_=content,
"-c",
content,
stderr=subprocess.PIPE,
**kwargs,
)
Expand All @@ -338,23 +338,11 @@ def _run(self, cmd: list[str], **kwargs: Any) -> str:
Run a command inside the Python environment.
"""
call = kwargs.pop("call", False)
input_ = kwargs.pop("input_", None)
env = kwargs.pop("env", dict(os.environ))
stderr = kwargs.pop("stderr", subprocess.STDOUT)

try:
if input_:
output: str = subprocess.run(
cmd,
stdout=subprocess.PIPE,
stderr=stderr,
input=input_,
check=True,
env=env,
text=True,
**kwargs,
).stdout
elif call:
if call:
assert stderr != subprocess.PIPE
subprocess.check_call(cmd, stderr=stderr, env=env, **kwargs)
output = ""
Expand All @@ -363,7 +351,7 @@ def _run(self, cmd: list[str], **kwargs: Any) -> str:
cmd, stderr=stderr, env=env, text=True, **kwargs
)
except CalledProcessError as e:
raise EnvCommandError(e, input=input_)
raise EnvCommandError(e)

return output

Expand Down
4 changes: 1 addition & 3 deletions src/poetry/utils/env/exceptions.py
Expand Up @@ -20,7 +20,7 @@ def __init__(self, env_name: str) -> None:


class EnvCommandError(EnvError):
def __init__(self, e: CalledProcessError, input: str | None = None) -> None:
def __init__(self, e: CalledProcessError) -> None:
self.e = e

message_parts = [
Expand All @@ -30,8 +30,6 @@ def __init__(self, e: CalledProcessError, input: str | None = None) -> None:
message_parts.append(f"Output:\n{decode(e.output)}")
if e.stderr:
message_parts.append(f"Error output:\n{decode(e.stderr)}")
if input:
message_parts.append(f"Input:\n{input}")
super().__init__("\n\n".join(message_parts))


Expand Down
23 changes: 17 additions & 6 deletions tests/console/commands/env/helpers.py
Expand Up @@ -24,17 +24,28 @@ def check_output_wrapper(
) -> Callable[[list[str], Any, Any], str]:
def check_output(cmd: list[str], *args: Any, **kwargs: Any) -> str:
# cmd is a list, like ["python", "-c", "do stuff"]
python_cmd = cmd[2]
python_cmd = cmd[-1]
if "print(json.dumps(env))" in python_cmd:
return (
f'{{"version_info": [{version.major}, {version.minor},'
f" {version.patch}]}}"
)

if "sys.version_info[:3]" in python_cmd:
return version.text
elif "sys.version_info[:2]" in python_cmd:

if "sys.version_info[:2]" in python_cmd:
return f"{version.major}.{version.minor}"
elif "import sys; print(sys.executable)" in python_cmd:

if "import sys; print(sys.executable)" in python_cmd:
executable = cmd[0]
basename = os.path.basename(executable)
return f"/usr/bin/{basename}"
else:
assert "import sys; print(sys.prefix)" in python_cmd
return "/prefix"

if "print(sys.base_prefix)" in python_cmd:
return "/usr"

assert "import sys; print(sys.prefix)" in python_cmd
return "/prefix"

return check_output