From 32751438ec06f2cec52e4f5669c891e8975a1239 Mon Sep 17 00:00:00 2001 From: Julian Berman Date: Sun, 4 Sep 2022 10:45:27 +0300 Subject: [PATCH] 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. --- nox/command.py | 5 ++++- tests/test_command.py | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/nox/command.py b/nox/command.py index 8a55c1fa..7ddb1da8 100644 --- a/nox/command.py +++ b/nox/command.py @@ -92,7 +92,10 @@ def run( success_codes = [0] cmd, args = args[0], args[1:] - full_cmd = f"{cmd} {_shlex_join(args)}" + try: + full_cmd = f"{cmd} {_shlex_join(args)}" + except TypeError: + full_cmd = f"{cmd} {args}" cmd_path = which(cmd, paths) diff --git a/tests/test_command.py b/tests/test_command.py index a05ab820..121edf11 100644 --- a/tests/test_command.py +++ b/tests/test_command.py @@ -22,6 +22,7 @@ import subprocess import sys import time +from pathlib import Path from textwrap import dedent from unittest import mock @@ -112,6 +113,15 @@ def test_run_verbosity_failed_command(capsys, caplog): assert not logs +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"])'],