Skip to content

Commit 97e5a38

Browse files
authored
fix: don't over-validate lists (#921)
Signed-off-by: Henry Schreiner <[email protected]>
1 parent 97e0fad commit 97e5a38

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

nox/_option_set.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import attrs.validators as av
3131

3232
if TYPE_CHECKING:
33-
from collections.abc import Callable, Iterable
33+
from collections.abc import Callable, Iterable, Sequence
3434

3535
__all__ = [
3636
"ArgumentError",
@@ -50,7 +50,7 @@ def __dir__() -> list[str]:
5050
av_opt_list_str = av.optional(
5151
av.deep_iterable(
5252
member_validator=av.instance_of(str),
53-
iterable_validator=attrs.validators.instance_of(list),
53+
iterable_validator=av.not_(av.instance_of(str)),
5454
)
5555
)
5656
av_bool = av.instance_of(bool)
@@ -63,16 +63,16 @@ class NoxOptions:
6363
error_on_external_run: bool = attrs.field(validator=av_bool)
6464
error_on_missing_interpreters: bool = attrs.field(validator=av_bool)
6565
force_venv_backend: None | str = attrs.field(validator=av_opt_str)
66-
keywords: None | list[str] = attrs.field(validator=av_opt_list_str)
67-
pythons: None | list[str] = attrs.field(validator=av_opt_list_str)
66+
keywords: None | Sequence[str] = attrs.field(validator=av_opt_list_str)
67+
pythons: None | Sequence[str] = attrs.field(validator=av_opt_list_str)
6868
report: None | str = attrs.field(validator=av_opt_str)
6969
reuse_existing_virtualenvs: bool = attrs.field(validator=av_bool)
7070
reuse_venv: None | Literal["no", "yes", "never", "always"] = attrs.field(
7171
validator=av.optional(av.in_(["no", "yes", "never", "always"]))
7272
)
73-
sessions: None | list[str] = attrs.field(validator=av_opt_list_str)
73+
sessions: None | Sequence[str] = attrs.field(validator=av_opt_list_str)
7474
stop_on_first_error: bool = attrs.field(validator=av_bool)
75-
tags: None | list[str] = attrs.field(validator=av_opt_list_str)
75+
tags: None | Sequence[str] = attrs.field(validator=av_opt_list_str)
7676
verbose: bool = attrs.field(validator=av_bool)
7777

7878

tests/test__option_set.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,25 @@ def test_tag_completer(self) -> None:
132132

133133
expected_tags = {f"tag{n}" for n in range(1, 8)}
134134
assert expected_tags == set(actual_tags_from_file)
135+
136+
def test_validation_options(self) -> None:
137+
options = _option_set.NoxOptions(
138+
default_venv_backend=None,
139+
envdir=None,
140+
error_on_external_run=False,
141+
error_on_missing_interpreters=False,
142+
force_venv_backend=None,
143+
keywords=None,
144+
pythons=None,
145+
report=None,
146+
reuse_existing_virtualenvs=False,
147+
reuse_venv=None,
148+
sessions=None,
149+
stop_on_first_error=False,
150+
tags=None,
151+
verbose=False,
152+
)
153+
options.sessions = ["testytest"]
154+
options.sessions = ("testytest",)
155+
with pytest.raises(ValueError): # noqa: PT011
156+
options.sessions = "testytest"

0 commit comments

Comments
 (0)