Skip to content

Commit

Permalink
fix: don't over-validate lists (#921)
Browse files Browse the repository at this point in the history
Signed-off-by: Henry Schreiner <[email protected]>
  • Loading branch information
henryiii authored Jan 31, 2025
1 parent 97e0fad commit 97e5a38
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 6 deletions.
12 changes: 6 additions & 6 deletions nox/_option_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
import attrs.validators as av

if TYPE_CHECKING:
from collections.abc import Callable, Iterable
from collections.abc import Callable, Iterable, Sequence

__all__ = [
"ArgumentError",
Expand All @@ -50,7 +50,7 @@ def __dir__() -> list[str]:
av_opt_list_str = av.optional(
av.deep_iterable(
member_validator=av.instance_of(str),
iterable_validator=attrs.validators.instance_of(list),
iterable_validator=av.not_(av.instance_of(str)),
)
)
av_bool = av.instance_of(bool)
Expand All @@ -63,16 +63,16 @@ class NoxOptions:
error_on_external_run: bool = attrs.field(validator=av_bool)
error_on_missing_interpreters: bool = attrs.field(validator=av_bool)
force_venv_backend: None | str = attrs.field(validator=av_opt_str)
keywords: None | list[str] = attrs.field(validator=av_opt_list_str)
pythons: None | list[str] = attrs.field(validator=av_opt_list_str)
keywords: None | Sequence[str] = attrs.field(validator=av_opt_list_str)
pythons: None | Sequence[str] = attrs.field(validator=av_opt_list_str)
report: None | str = attrs.field(validator=av_opt_str)
reuse_existing_virtualenvs: bool = attrs.field(validator=av_bool)
reuse_venv: None | Literal["no", "yes", "never", "always"] = attrs.field(
validator=av.optional(av.in_(["no", "yes", "never", "always"]))
)
sessions: None | list[str] = attrs.field(validator=av_opt_list_str)
sessions: None | Sequence[str] = attrs.field(validator=av_opt_list_str)
stop_on_first_error: bool = attrs.field(validator=av_bool)
tags: None | list[str] = attrs.field(validator=av_opt_list_str)
tags: None | Sequence[str] = attrs.field(validator=av_opt_list_str)
verbose: bool = attrs.field(validator=av_bool)


Expand Down
22 changes: 22 additions & 0 deletions tests/test__option_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,25 @@ def test_tag_completer(self) -> None:

expected_tags = {f"tag{n}" for n in range(1, 8)}
assert expected_tags == set(actual_tags_from_file)

def test_validation_options(self) -> None:
options = _option_set.NoxOptions(
default_venv_backend=None,
envdir=None,
error_on_external_run=False,
error_on_missing_interpreters=False,
force_venv_backend=None,
keywords=None,
pythons=None,
report=None,
reuse_existing_virtualenvs=False,
reuse_venv=None,
sessions=None,
stop_on_first_error=False,
tags=None,
verbose=False,
)
options.sessions = ["testytest"]
options.sessions = ("testytest",)
with pytest.raises(ValueError): # noqa: PT011
options.sessions = "testytest"

0 comments on commit 97e5a38

Please sign in to comment.