Files
lix/tests/functional2/pyproject.toml
T
Rebecca Turnerandrootile cb34b56fea tests/functional2: Fix Python LSP by adjusting imports
See: cl/4840

When importing Python modules, we include `functional2` in the module
path, like this:

    from functional2.testlib.fixtures.env import ManagedEnv

This means that python expects to see a file like
`functional2/testlib/fixtures/env.py`. We run `pytest` from `tests/` in
the `justfile` and have `tests/functional2/__init__.py` so `pytest` in
`meson` is able to find these imports.

However, language servers generally consider the `pyproject.toml` to be
the project root, so (e.g.) `pyright` is unable to follow any of the
`functional2` imports, leading to lots of spurious errors.

In cl/4840 I moved `tests/functional2/pyproject.toml` to
`tests/pyproject.toml`, which worked but was considered aesthetically
unappealing.

This diff is much larger but it's a more elegant solution.

Change-Id: I2983c7b87f88f59a4e3521451a9f5acd6a6a6964
2026-01-23 15:06:51 +01:00

73 lines
3.0 KiB
TOML

[project]
name = "functional2"
version = "2"
requires-python = ">=3.12"
[tool.pytest.ini_options]
addopts = "-p no:xonsh"
markers = ["full_sandbox: test requires a fully isolated sandbox"]
# xfail tests should fail when not failing as described
xfail_strict = true
# Keep the temporary files of the last 3 test runs (default value)
tmp_path_retention_count = 3
# Keep temporary files of all tests, regardless if they failed or not
tmp_path_retention_policy = "all"
log_cli = true
log_cli_level = "INFO"
# how the logs are being printed, default is `"%(filename)s %(lineno)d %(levelname)s %(message)s"`
# Example log:
# 2025-05-09T14:06:23Z [ INFO] [test_someting] This is a test message
# 2025-05-09T14:06:25Z [ ERROR] [test_smt_else] Some error related log
log_cli_format = "%(asctime)s [%(levelname)8s] [%(name)s] %(message)s"
log_cli_date_format = "%Y-%m-%dT%H:%M:%SZ"
# By default, Pytest attempts to helpfully exclude searching for tests in
# `build` directories.
#
# Unfortunately, we have a directory of tests named `build` in this directory
# (not to be confused with the top-level Meson `build` directory;
# `tests/functional2/build/` != `build/`).
#
# These are glob expressions.
# See: https://docs.pytest.org/en/stable/reference/reference.html#confval-norecursedirs
norecursedirs = [ '.*' ]
[tool.ruff]
extend = "../../pyproject.toml"
[tool.ruff.lint.flake8-tidy-imports]
[tool.ruff.lint.flake8-tidy-imports.banned-api]
# Forbid symbols that are footguns in our codebase due to unsafe global state
"os.environ".msg = """
Environment variables are process wide and are unsafe to set as they interfere with other tests. Instead, use:
- env= in subprocess functions
- testlib.commands.Command.with_env for starting subprocesses
- testlib.environ for read-only access
"""
"os.environb".msg = """
Environment variables are process wide and are unsafe to set as they interfere with other tests. Instead, use:
- env= in subprocess functions
- testlib.commands.Command.with_env for starting subprocesses
- testlib.environ for read-only access
"""
"os.putenv".msg = """
Environment variables are process wide and are unsafe to set as they interfere with other tests. Instead, use:
- env= in subprocess functions
- testlib.commands.Command.with_env for starting subprocesses
- testlib.environ for read-only access
"""
"os.unsetenv".msg = """
Environment variables are process wide and are unsafe to set as they interfere with other tests. Instead, use:
- env= in subprocess functions
- testlib.commands.Command.with_env for starting subprocesses
- testlib.environ for read-only access
"""
"os.chdir".msg = "Changing current directory is process wide and may interfere with other tests. Use cwd= while spawning a process instead."
"os.fchdir".msg = "Changing current directory is process wide and may interfere with other tests. Use cwd= while spawning a process instead."
"contextlib.chdir".msg = "Changing current directory is process wide and may interfere with other tests. Use cwd= while spawning a process instead."