Skip to content

Commit c0eec5d

Browse files
committed
Merge pull request #975 from nicoddemus/fix-regression-parse-known-args
Fix regression caused by changing the signature for parse_known_args
2 parents c493f26 + 4533a50 commit c0eec5d

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

_pytest/config.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,15 @@ def parse_setoption(self, args, option):
477477
return getattr(parsedoption, FILE_OR_DIR)
478478

479479
def parse_known_args(self, args):
480+
"""parses and returns a namespace object with known arguments at this
481+
point.
482+
"""
483+
return self.parse_known_and_unknown_args(args)[0]
484+
485+
def parse_known_and_unknown_args(self, args):
486+
"""parses and returns a namespace object with known arguments, and
487+
the remaining arguments unknown at this point.
488+
"""
480489
optparser = self._getparser()
481490
args = [str(x) for x in args]
482491
return optparser.parse_known_args(args)
@@ -879,9 +888,8 @@ def pytest_load_initial_conftests(self, early_config):
879888
self.pluginmanager._set_initial_conftests(early_config.known_args_namespace)
880889

881890
def _initini(self, args):
882-
parsed_args, extra_args = self._parser.parse_known_args(args)
883-
r = determine_setup(parsed_args.inifilename,
884-
parsed_args.file_or_dir + extra_args)
891+
ns, unknown_args = self._parser.parse_known_and_unknown_args(args)
892+
r = determine_setup(ns.inifilename, ns.file_or_dir + unknown_args)
885893
self.rootdir, self.inifile, self.inicfg = r
886894
self._parser.extra_info['rootdir'] = self.rootdir
887895
self._parser.extra_info['inifile'] = self.inifile
@@ -901,8 +909,7 @@ def _preparse(self, args, addopts=True):
901909
except ImportError as e:
902910
self.warn("I2", "could not load setuptools entry import: %s" % (e,))
903911
self.pluginmanager.consider_env()
904-
ns, _ = self._parser.parse_known_args(args)
905-
self.known_args_namespace = ns
912+
self.known_args_namespace = ns = self._parser.parse_known_args(args)
906913
if self.known_args_namespace.confcutdir is None and self.inifile:
907914
confcutdir = py.path.local(self.inifile).dirname
908915
self.known_args_namespace.confcutdir = confcutdir

testing/test_parseopt.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,17 @@ def test_parse2(self, parser):
105105
def test_parse_known_args(self, parser):
106106
parser.parse_known_args([py.path.local()])
107107
parser.addoption("--hello", action="store_true")
108-
ns, extra_args = parser.parse_known_args(["x", "--y", "--hello", "this"])
108+
ns = parser.parse_known_args(["x", "--y", "--hello", "this"])
109109
assert ns.hello
110110
assert ns.file_or_dir == ['x']
111-
assert extra_args == ['--y', 'this']
111+
112+
def test_parse_known_and_unknown_args(self, parser):
113+
parser.addoption("--hello", action="store_true")
114+
ns, unknown = parser.parse_known_and_unknown_args(["x", "--y",
115+
"--hello", "this"])
116+
assert ns.hello
117+
assert ns.file_or_dir == ['x']
118+
assert unknown == ['--y', 'this']
112119

113120
def test_parse_will_set_default(self, parser):
114121
parser.addoption("--hello", dest="hello", default="x", action="store")

0 commit comments

Comments
 (0)