45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
"""Pytest fixtures."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def datadir(request: pytest.FixtureRequest) -> str:
|
|
"""
|
|
Data directory shared for all tests.
|
|
|
|
:return: Path to the data directory ``(root-pytest-dir)/data``.
|
|
:rtype: str
|
|
"""
|
|
return os.path.join(request.node.path, "data")
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def moduledatadir(datadir: str, request: pytest.FixtureRequest) -> str:
|
|
"""
|
|
Data directory shared for all tests within a single module.
|
|
|
|
:return: Path to the data directory ``(root-pytest-dir)/data/$module_name``.
|
|
:rtype: str
|
|
"""
|
|
name = request.module.__name__
|
|
return os.path.join(datadir, name)
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def testdatadir(moduledatadir: str, request: pytest.FixtureRequest) -> str:
|
|
"""
|
|
Data directory for current test.
|
|
|
|
:return: Path to the data directory ``(root-pytest-dir)/data/$module_name/$test_name``.
|
|
:rtype: str
|
|
"""
|
|
if not isinstance(request.node, pytest.Function):
|
|
raise TypeError(f"Excepted pytest.Function, got {type(request.node)}")
|
|
|
|
name = request.node.originalname
|
|
return os.path.join(moduledatadir, name)
|