File size: 1,602 Bytes
5db30ac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from __future__ import annotations

from dataclasses import dataclass

from elbench.schemas.config import ProjectConfig

from .basic_education import DEFAULT_BASIC_MODULE_NAME


@dataclass(slots=True, frozen=True)
class ModuleSelection:
    requested_modules: frozenset[str] | None
    selected_modules: frozenset[str]
    standard_modules: frozenset[str]
    include_basic_education: bool


def resolve_module_selection(
    project_config: ProjectConfig,
    requested_modules: set[str] | None,
) -> ModuleSelection:
    requested = frozenset(requested_modules) if requested_modules else None
    if requested is None:
        active_modules = [
            module_name
            for module_name in project_config.app.benchmark_modules.active
            if module_name in project_config.modules
            and project_config.modules[module_name].enabled
        ]
        if active_modules:
            selected = frozenset(active_modules)
        else:
            selected = frozenset(
                module_name
                for module_name, module_entry in project_config.modules.items()
                if module_entry.enabled
            )
    else:
        selected = requested

    include_basic_education = DEFAULT_BASIC_MODULE_NAME in selected
    standard_modules = frozenset(
        module_name for module_name in selected if module_name != DEFAULT_BASIC_MODULE_NAME
    )
    return ModuleSelection(
        requested_modules=requested,
        selected_modules=selected,
        standard_modules=standard_modules,
        include_basic_education=include_basic_education,
    )