diff --git a/pkgs/clan-cli/clan_cli/dirs.py b/pkgs/clan-cli/clan_cli/dirs.py index e895df02..514bbe12 100644 --- a/pkgs/clan-cli/clan_cli/dirs.py +++ b/pkgs/clan-cli/clan_cli/dirs.py @@ -2,18 +2,19 @@ import os import sys from pathlib import Path +from .errors import ClanError + def get_clan_flake_toplevel() -> Path: """Returns the path to the toplevel of the clan flake""" - initial_path = Path(os.getcwd()) - path = Path(initial_path) - while path.parent == path: - project_files = [".clan-flake"] - for project_file in project_files: + for project_file in [".clan-flake", ".git", ".hg", ".svn", "flake.nix"]: + initial_path = Path(os.getcwd()) + path = Path(initial_path) + while path.parent == path: if (path / project_file).exists(): return path - path = path.parent - return initial_path + path = path.parent + raise ClanError("Could not find clan flake toplevel directory") def user_data_dir() -> Path: diff --git a/pkgs/clan-cli/pyproject.toml b/pkgs/clan-cli/pyproject.toml index ae423ee7..58067e66 100644 --- a/pkgs/clan-cli/pyproject.toml +++ b/pkgs/clan-cli/pyproject.toml @@ -1,15 +1,20 @@ [build-system] -requires = ["setuptools"] +requires = [ "setuptools" ] build-backend = "setuptools.build_meta" [project] name = "clan" description = "cLAN CLI tool" -dynamic = ["version"] -scripts = {clan = "clan_cli:main"} +dynamic = [ "version" ] +scripts = { clan = "clan_cli:main" } + +[tool.setuptools] +packages = [ "clan_cli" ] [tool.pytest.ini_options] addopts = "--cov . --cov-report term --cov-report html:.reports/html --no-cov-on-fail" +norecursedirs = "tests/helpers" + [tool.mypy] python_version = "3.10" @@ -33,13 +38,13 @@ ignore_missing_imports = true [tool.ruff] line-length = 88 -select = ["E", "F", "I"] +select = [ "E", "F", "I" ] ignore = [ "E501" ] [tool.black] line-length = 88 -target-version = ['py310'] -include = '\.pyi?$' +target-version = [ "py310" ] +include = "\\.pyi?$" exclude = ''' /( \.git diff --git a/pkgs/clan-cli/tests/__init__.py b/pkgs/clan-cli/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/pkgs/clan-cli/tests/conftest.py b/pkgs/clan-cli/tests/conftest.py new file mode 100644 index 00000000..f9b5b00d --- /dev/null +++ b/pkgs/clan-cli/tests/conftest.py @@ -0,0 +1,6 @@ +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), "helpers")) + +pytest_plugins = ["temporary_dir"] diff --git a/pkgs/clan-cli/tests/environment.py b/pkgs/clan-cli/tests/helpers/environment.py similarity index 100% rename from pkgs/clan-cli/tests/environment.py rename to pkgs/clan-cli/tests/helpers/environment.py diff --git a/pkgs/clan-cli/tests/temporary_dir.py b/pkgs/clan-cli/tests/temporary_dir.py new file mode 100644 index 00000000..91310f90 --- /dev/null +++ b/pkgs/clan-cli/tests/temporary_dir.py @@ -0,0 +1,11 @@ +import tempfile +from pathlib import Path +from typing import Iterator + +import pytest + + +@pytest.fixture +def temporary_dir() -> Iterator[Path]: + with tempfile.TemporaryDirectory(prefix="pytest-") as dirpath: + yield Path(dirpath) diff --git a/pkgs/clan-cli/tests/test_clan_ssh.py b/pkgs/clan-cli/tests/test_clan_ssh.py index 628bc0ec..ed1d366e 100644 --- a/pkgs/clan-cli/tests/test_clan_ssh.py +++ b/pkgs/clan-cli/tests/test_clan_ssh.py @@ -3,12 +3,11 @@ from typing import Union import pytest import pytest_subprocess.fake_process +from environment import mock_env from pytest_subprocess import utils import clan_cli.ssh -from .environment import mock_env - def test_no_args( capsys: pytest.CaptureFixture, monkeypatch: pytest.MonkeyPatch diff --git a/pkgs/clan-cli/tests/test_dirs.py b/pkgs/clan-cli/tests/test_dirs.py new file mode 100644 index 00000000..e3794906 --- /dev/null +++ b/pkgs/clan-cli/tests/test_dirs.py @@ -0,0 +1,14 @@ +from pathlib import Path + +import pytest + +from clan_cli.dirs import get_clan_flake_toplevel +from clan_cli.errors import ClanError + + +def test_get_clan_flake_toplevel( + monkeypatch: pytest.MonkeyPatch, temporary_dir: Path +) -> None: + monkeypatch.chdir(temporary_dir) + with pytest.raises(ClanError): + get_clan_flake_toplevel()