remove RunnerMeta, save path to class var instead
This commit is contained in:
parent
7ec75cd6a0
commit
edc8c9a2f5
3 changed files with 12 additions and 19 deletions
|
|
@ -2,7 +2,6 @@ import importlib
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import NamedTuple
|
|
||||||
|
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
|
|
@ -13,11 +12,6 @@ from pytest_abra.runner import Runner
|
||||||
from pytest_abra.utils import rmtree
|
from pytest_abra.utils import rmtree
|
||||||
|
|
||||||
|
|
||||||
class RunnerMeta(NamedTuple):
|
|
||||||
cls: type[Runner]
|
|
||||||
path: Path
|
|
||||||
|
|
||||||
|
|
||||||
class Coordinator:
|
class Coordinator:
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
|
@ -60,9 +54,8 @@ class Coordinator:
|
||||||
"""Creates an instance of the correct Runner class for each given env file"""
|
"""Creates an instance of the correct Runner class for each given env file"""
|
||||||
runners: list[Runner] = []
|
runners: list[Runner] = []
|
||||||
for index, env_file in enumerate(env_files):
|
for index, env_file in enumerate(env_files):
|
||||||
meta = self.RUNNER_DICT[env_file.env_config["TYPE"]]
|
RunnerClass = self.RUNNER_DICT[env_file.env_config["TYPE"]]
|
||||||
RunnerClass = meta.cls
|
runners.append(RunnerClass(coordinator=self, runner_index=index))
|
||||||
runners.append(RunnerClass(coordinator=self, runner_index=index, runner_dir=meta.path))
|
|
||||||
return runners
|
return runners
|
||||||
|
|
||||||
def combine_html(self) -> None:
|
def combine_html(self) -> None:
|
||||||
|
|
@ -96,14 +89,14 @@ class Coordinator:
|
||||||
rmtree(trace_root_dir)
|
rmtree(trace_root_dir)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def create_runner_dict(recipes_dir: Path) -> dict[str, RunnerMeta]:
|
def create_runner_dict(recipes_dir: Path) -> dict[str, type[Runner]]:
|
||||||
"""Creates a dictionary holding all the RunnerClasses that can be discovered in recipes_dir
|
"""Creates a dictionary holding all the RunnerClasses that can be discovered in recipes_dir
|
||||||
|
|
||||||
The Runner classes are automatically imported with importlib. The imports are successful
|
The Runner classes are automatically imported with importlib. The imports are successful
|
||||||
because recipes_dir is added to sys.path.
|
because recipes_dir is added to sys.path.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
RUNNER_DICT: dict[str, RunnerMeta] = dict()
|
RUNNER_DICT: dict[str, type[Runner]] = dict()
|
||||||
runner_discovery_pattern = re.compile("Runner.+")
|
runner_discovery_pattern = re.compile("Runner.+")
|
||||||
|
|
||||||
# make it possible to import modules from recipes_dir
|
# make it possible to import modules from recipes_dir
|
||||||
|
|
@ -116,5 +109,6 @@ class Coordinator:
|
||||||
assert len(runner_class_names) == 1
|
assert len(runner_class_names) == 1
|
||||||
runner_class_name = runner_class_names[0]
|
runner_class_name = runner_class_names[0]
|
||||||
RunnerClass: type[Runner] = getattr(module, runner_class_name)
|
RunnerClass: type[Runner] = getattr(module, runner_class_name)
|
||||||
RUNNER_DICT[RunnerClass.env_type] = RunnerMeta(cls=RunnerClass, path=module_path)
|
RunnerClass._tests_path = module_path
|
||||||
|
RUNNER_DICT[RunnerClass.env_type] = RunnerClass
|
||||||
return RUNNER_DICT
|
return RUNNER_DICT
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ from typing import TYPE_CHECKING, NamedTuple
|
||||||
from dotenv import dotenv_values
|
from dotenv import dotenv_values
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from pytest_abra.coordinator import RunnerMeta
|
|
||||||
from pytest_abra.dir_manager import DirManager
|
from pytest_abra.dir_manager import DirManager
|
||||||
from pytest_abra.runner import Runner
|
from pytest_abra.runner import Runner
|
||||||
|
|
||||||
|
|
@ -25,7 +24,7 @@ class DependencyRule(NamedTuple):
|
||||||
|
|
||||||
|
|
||||||
class EnvManager:
|
class EnvManager:
|
||||||
def __init__(self, env_paths: list[Path], RUNNER_DICT: dict[str, "RunnerMeta"]):
|
def __init__(self, env_paths: list[Path], RUNNER_DICT: dict[str, type[Runner]]):
|
||||||
self.env_files: list[EnvFile] = self._get_env_files(env_paths)
|
self.env_files: list[EnvFile] = self._get_env_files(env_paths)
|
||||||
self.dependency_rules: list[DependencyRule] = self._get_dependency_rules(self.env_files, RUNNER_DICT)
|
self.dependency_rules: list[DependencyRule] = self._get_dependency_rules(self.env_files, RUNNER_DICT)
|
||||||
self.env_files = self.sort_env_files_by_rule(self.env_files, self.dependency_rules)
|
self.env_files = self.sort_env_files_by_rule(self.env_files, self.dependency_rules)
|
||||||
|
|
@ -43,10 +42,10 @@ class EnvManager:
|
||||||
return env_files
|
return env_files
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_dependency_rules(env_files: list[EnvFile], RUNNER_DICT: dict[str, "RunnerMeta"]) -> list[DependencyRule]:
|
def _get_dependency_rules(env_files: list[EnvFile], RUNNER_DICT: dict[str, type[Runner]]) -> list[DependencyRule]:
|
||||||
dependency_rules: list[DependencyRule] = []
|
dependency_rules: list[DependencyRule] = []
|
||||||
for env_file in env_files:
|
for env_file in env_files:
|
||||||
child_runner_class = RUNNER_DICT[env_file.env_type].cls
|
child_runner_class = RUNNER_DICT[env_file.env_type]
|
||||||
for dependency in child_runner_class.dependencies:
|
for dependency in child_runner_class.dependencies:
|
||||||
dependency_rule = DependencyRule(child=child_runner_class.env_type, dependency=dependency)
|
dependency_rule = DependencyRule(child=child_runner_class.env_type, dependency=dependency)
|
||||||
dependency_rules.append(dependency_rule)
|
dependency_rules.append(dependency_rule)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import os
|
import os
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import TYPE_CHECKING, Callable, NamedTuple
|
from typing import TYPE_CHECKING, Callable, NamedTuple, Optional
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
@ -31,11 +31,11 @@ class Runner:
|
||||||
tests: list[Test] = []
|
tests: list[Test] = []
|
||||||
cleanups: list[Test] = []
|
cleanups: list[Test] = []
|
||||||
dependencies: list[str] = []
|
dependencies: list[str] = []
|
||||||
|
_tests_path: Optional[Path] = None
|
||||||
|
|
||||||
def __init__(self, coordinator: "Coordinator", runner_index: int, runner_dir: Path):
|
def __init__(self, coordinator: "Coordinator", runner_index: int):
|
||||||
self.coordinator = coordinator
|
self.coordinator = coordinator
|
||||||
self.runner_index = runner_index
|
self.runner_index = runner_index
|
||||||
self.runner_dir = runner_dir
|
|
||||||
|
|
||||||
self.DIR = coordinator.DIR
|
self.DIR = coordinator.DIR
|
||||||
self.ENV = coordinator.ENV
|
self.ENV = coordinator.ENV
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue