blob: 986ba2639bffef4eee2112380c048a69b41b4050 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
from __future__ import annotations
from dataclasses import dataclass
from operator import attrgetter
from typing import TYPE_CHECKING
if TYPE_CHECKING:
import pytest
@dataclass
class LazyFixtureWrapper:
name: str
@property
def fixture_name(self) -> str:
return self.name.split(".", maxsplit=1)[0]
def _get_attr(self, fixture) -> str | None:
splitted = self.name.split(".", maxsplit=1)
if len(splitted) == 1:
return fixture
return attrgetter(splitted[1])(fixture)
def __repr__(self) -> str:
return self.name
def load_fixture(self, request: pytest.FixtureRequest):
return self._get_attr(request.getfixturevalue(self.fixture_name))
def __hash__(self) -> int:
return hash(self.name)
def lf(name: str) -> LazyFixtureWrapper:
"""lf is a lazy fixture."""
return LazyFixtureWrapper(name)
|