Skip to content

Commit

Permalink
fix: nox.session.run-ing commands with pathlib.Path arguments (#649)
Browse files Browse the repository at this point in the history
* fix: nox.session.run-ing commands with pathlib.Path arguments

Previously this should have worked in theory, but the string
which is logged for debugging calls shlex.quote, which was
blowing up trying to quote the pathlib.Path.

I'm slightly surprised shlex.quote doesn't support pathlib.Path
objects (yet?) but for now here this just falls back to a cruder
representation when quoting fails.

* Use os.fspath instead.
  • Loading branch information
Julian committed Oct 7, 2022
1 parent 3fb4fbc commit 07fb499
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
3 changes: 1 addition & 2 deletions nox/command.py
Expand Up @@ -71,8 +71,7 @@ def _clean_env(env: dict[str, str] | None) -> dict[str, str] | None:


def _shlex_join(args: Sequence[str]) -> str:
# shlex.join() was added in Python 3.8
return " ".join(shlex.quote(arg) for arg in args)
return " ".join(shlex.quote(os.fspath(arg)) for arg in args)


def run(
Expand Down
14 changes: 14 additions & 0 deletions tests/test_command.py
Expand Up @@ -22,6 +22,7 @@
import subprocess
import sys
import time
from pathlib import Path
from textwrap import dedent
from unittest import mock

Expand Down Expand Up @@ -112,6 +113,19 @@ def test_run_verbosity_failed_command(capsys, caplog):
assert not logs


@pytest.mark.skipif(
platform.system() == "Windows",
reason="See https://github.com/python/cpython/issues/85815",
)
def test_run_non_str():
result = nox.command.run(
[Path(PYTHON), "-c", "import sys; print(sys.argv)", Path(PYTHON)],
silent=True,
)

assert PYTHON in result


def test_run_env_unicode():
result = nox.command.run(
[PYTHON, "-c", 'import os; print(os.environ["SIGIL"])'],
Expand Down

0 comments on commit 07fb499

Please sign in to comment.