baldertest 0.1.0b11__py3-none-any.whl → 0.1.0b13__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- _balder/_version.py +8 -3
- _balder/cnnrelations/and_connection_relation.py +28 -1
- _balder/cnnrelations/base_connection_relation.py +1 -1
- _balder/collector.py +101 -113
- _balder/connection.py +76 -80
- _balder/controllers/device_controller.py +17 -29
- _balder/controllers/feature_controller.py +2 -2
- _balder/controllers/normal_scenario_setup_controller.py +1 -2
- _balder/controllers/scenario_controller.py +121 -0
- _balder/controllers/vdevice_controller.py +2 -23
- _balder/decorator_connect.py +3 -3
- _balder/decorator_covered_by.py +28 -36
- _balder/executor/basic_executable_executor.py +13 -6
- _balder/executor/basic_executor.py +31 -4
- _balder/executor/executor_tree.py +5 -4
- _balder/executor/parametrized_testcase_executor.py +2 -2
- _balder/executor/scenario_executor.py +12 -71
- _balder/executor/setup_executor.py +4 -3
- _balder/executor/testcase_executor.py +35 -19
- _balder/executor/unresolved_parametrized_testcase_executor.py +32 -57
- _balder/executor/variation_executor.py +127 -148
- _balder/feature.py +2 -1
- _balder/feature_replacement_mapping.py +107 -0
- _balder/feature_vdevice_mapping.py +88 -0
- _balder/fixture_manager.py +1 -1
- _balder/fixture_metadata.py +1 -1
- _balder/routing_path.py +27 -16
- _balder/scenario.py +2 -2
- _balder/setup.py +2 -1
- _balder/testresult.py +4 -3
- _balder/utils/__init__.py +0 -0
- _balder/{utils.py → utils/functions.py} +29 -31
- _balder/utils/inner_device_managing_metaclass.py +14 -0
- _balder/utils/mixin_can_be_covered_by_executor.py +24 -0
- _balder/utils/typings.py +4 -0
- {baldertest-0.1.0b11.dist-info → baldertest-0.1.0b13.dist-info}/METADATA +3 -2
- {baldertest-0.1.0b11.dist-info → baldertest-0.1.0b13.dist-info}/RECORD +41 -35
- {baldertest-0.1.0b11.dist-info → baldertest-0.1.0b13.dist-info}/WHEEL +1 -1
- {baldertest-0.1.0b11.dist-info → baldertest-0.1.0b13.dist-info}/entry_points.txt +0 -0
- {baldertest-0.1.0b11.dist-info → baldertest-0.1.0b13.dist-info/licenses}/LICENSE +0 -0
- {baldertest-0.1.0b11.dist-info → baldertest-0.1.0b13.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import Type
|
|
3
|
+
import dataclasses
|
|
4
|
+
|
|
5
|
+
from .controllers.feature_controller import FeatureController
|
|
6
|
+
from .device import Device
|
|
7
|
+
from .feature import Feature
|
|
8
|
+
from .vdevice import VDevice
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class FeatureVDeviceMapping:
|
|
12
|
+
"""
|
|
13
|
+
helper object that stores mappings between :class:`VDevice` and :class:`Device`
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
@dataclasses.dataclass
|
|
17
|
+
class VDeviceDeviceMapping:
|
|
18
|
+
"""describes the mapping of one VDevice to one Device"""
|
|
19
|
+
#: the vdevice class
|
|
20
|
+
vdevice: Type[VDevice]
|
|
21
|
+
#: the mapped device to this VDevice
|
|
22
|
+
device: Type[Device]
|
|
23
|
+
|
|
24
|
+
@dataclasses.dataclass
|
|
25
|
+
class VDevicesMapping:
|
|
26
|
+
"""
|
|
27
|
+
stores a single mapping
|
|
28
|
+
"""
|
|
29
|
+
#: the feature object, this mapping belongs to
|
|
30
|
+
feature: Feature
|
|
31
|
+
#: the available mapping for this feature (at the moment, we only support one)
|
|
32
|
+
mappings: list[FeatureVDeviceMapping.VDeviceDeviceMapping]
|
|
33
|
+
|
|
34
|
+
def __init__(self):
|
|
35
|
+
self._mappings: list[FeatureVDeviceMapping.VDevicesMapping] = []
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def mappings(self) -> list[VDevicesMapping]:
|
|
39
|
+
"""
|
|
40
|
+
returns all existing mappings
|
|
41
|
+
"""
|
|
42
|
+
return list(self._mappings)
|
|
43
|
+
|
|
44
|
+
@property
|
|
45
|
+
def features(self) -> list[Feature]:
|
|
46
|
+
"""
|
|
47
|
+
returns all used attribute names
|
|
48
|
+
"""
|
|
49
|
+
return [mapping.feature for mapping in self._mappings]
|
|
50
|
+
|
|
51
|
+
def items(self) -> list[tuple[Feature, list[VDeviceDeviceMapping]]]:
|
|
52
|
+
"""
|
|
53
|
+
:return: a list of Feature/vdevice mapping tuples
|
|
54
|
+
"""
|
|
55
|
+
return [(mapping.feature, mapping.mappings) for mapping in self._mappings]
|
|
56
|
+
|
|
57
|
+
def add(self, feature: Feature, mappings: dict[Type[VDevice], Type[Device]]):
|
|
58
|
+
"""
|
|
59
|
+
adds a new mapping
|
|
60
|
+
|
|
61
|
+
:param feature: the :class:`Feature` class this mapping belongs to
|
|
62
|
+
:param mappings: a dictionary that describes the mapping between the :class:`VDevice` and :class:`Device`. The
|
|
63
|
+
:class:`VDevice` needs to be part of the :class:`Feature`
|
|
64
|
+
"""
|
|
65
|
+
if feature in self.features:
|
|
66
|
+
raise KeyError(f'entry for feature `{feature}` already exist - can not define it multiple times')
|
|
67
|
+
feature_controller = FeatureController.get_for(feature.__class__)
|
|
68
|
+
vdevice_device_mappings = []
|
|
69
|
+
for cur_vdev, cur_dev in mappings.items():
|
|
70
|
+
if not (isinstance(cur_vdev, type) and issubclass(cur_vdev, VDevice)):
|
|
71
|
+
raise TypeError(f'the provided key objects in mappings needs to be a subclass of `{VDevice.__name__}`')
|
|
72
|
+
if not (isinstance(cur_dev, type) and issubclass(cur_dev, Device)):
|
|
73
|
+
raise TypeError(f'the provided value objects in mappings needs to be a subclass of `{Device.__name__}`')
|
|
74
|
+
if cur_vdev not in feature_controller.get_abs_inner_vdevice_classes():
|
|
75
|
+
raise ValueError(f'the provided VDevice `{cur_vdev}` is not part of the provided feature `{feature}`')
|
|
76
|
+
vdevice_device_mappings.append(self.VDeviceDeviceMapping(cur_vdev, cur_dev))
|
|
77
|
+
new_mapping = self.VDevicesMapping(feature=feature, mappings=vdevice_device_mappings)
|
|
78
|
+
|
|
79
|
+
self._mappings.append(new_mapping)
|
|
80
|
+
|
|
81
|
+
def get_mappings_for_feature(self, feature: Feature) -> list[VDeviceDeviceMapping]:
|
|
82
|
+
"""
|
|
83
|
+
returns the list with all mappings for the provided feature
|
|
84
|
+
"""
|
|
85
|
+
for cur_item in self._mappings:
|
|
86
|
+
if cur_item.feature == feature:
|
|
87
|
+
return cur_item.mappings
|
|
88
|
+
raise KeyError(f'entry for feature `{feature}` does not exist')
|
_balder/fixture_manager.py
CHANGED
|
@@ -19,7 +19,7 @@ from _balder.exceptions import LostInExecutorTreeException, FixtureReferenceErro
|
|
|
19
19
|
UnclearUniqueClassReference
|
|
20
20
|
|
|
21
21
|
if TYPE_CHECKING:
|
|
22
|
-
from _balder.utils import MethodLiteralType
|
|
22
|
+
from _balder.utils.functions import MethodLiteralType
|
|
23
23
|
from _balder.executor.executor_tree import ExecutorTree
|
|
24
24
|
|
|
25
25
|
|
_balder/fixture_metadata.py
CHANGED
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
from typing import Union, Type, Callable, Generator, TYPE_CHECKING
|
|
3
3
|
import dataclasses
|
|
4
4
|
|
|
5
|
-
from .utils import MethodLiteralType
|
|
5
|
+
from .utils.typings import MethodLiteralType
|
|
6
6
|
|
|
7
7
|
if TYPE_CHECKING:
|
|
8
8
|
from _balder.scenario import Scenario
|
_balder/routing_path.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
-
from typing import List, Union, Dict, Type, Tuple, TYPE_CHECKING
|
|
2
|
+
from typing import List, Union, Dict, Type, Tuple, Iterable, TYPE_CHECKING
|
|
3
3
|
|
|
4
4
|
import copy
|
|
5
5
|
from _balder.connection import Connection
|
|
@@ -57,11 +57,24 @@ class RoutingPath:
|
|
|
57
57
|
|
|
58
58
|
# ---------------------------------- STATIC METHODS ----------------------------------------------------------------
|
|
59
59
|
|
|
60
|
+
@staticmethod
|
|
61
|
+
def __get_abs_setup_dev_cnns_for(setup_devices: Iterable[Type[Device]]) -> List[Connection]:
|
|
62
|
+
"""
|
|
63
|
+
Determines all absolute device connections for a given list of setup devices.
|
|
64
|
+
"""
|
|
65
|
+
setup_devices_cnns = []
|
|
66
|
+
for cur_setup_device in setup_devices:
|
|
67
|
+
for cur_cnn_list in DeviceController.get_for(cur_setup_device).get_all_absolute_connections().values():
|
|
68
|
+
setup_devices_cnns.extend(cur_cnn_list)
|
|
69
|
+
# remove duplicates
|
|
70
|
+
return list(set(setup_devices_cnns))
|
|
71
|
+
|
|
60
72
|
@staticmethod
|
|
61
73
|
def route_through(
|
|
62
|
-
scenario_connection: Connection,
|
|
63
|
-
|
|
64
|
-
|
|
74
|
+
scenario_connection: Connection,
|
|
75
|
+
device_mapping: Dict[Type[Device], Type[Device]],
|
|
76
|
+
alternative_setup_device_cnns: Union[List[Connection], None] = None
|
|
77
|
+
) -> List[RoutingPath]:
|
|
65
78
|
"""
|
|
66
79
|
This static method tries to route the given ``scenario_connection`` with the device_mapping. It returns a list
|
|
67
80
|
of all matched routings between the mapped devices, where the routing is valid to support the requested
|
|
@@ -77,12 +90,7 @@ class RoutingPath:
|
|
|
77
90
|
"""
|
|
78
91
|
setup_devices_cnns = alternative_setup_device_cnns
|
|
79
92
|
if alternative_setup_device_cnns is None:
|
|
80
|
-
setup_devices_cnns =
|
|
81
|
-
for cur_setup_device in device_mapping.values():
|
|
82
|
-
for cur_cnn_list in DeviceController.get_for(cur_setup_device).get_all_absolute_connections().values():
|
|
83
|
-
setup_devices_cnns.extend(cur_cnn_list)
|
|
84
|
-
# remove duplicates
|
|
85
|
-
setup_devices_cnns = list(set(setup_devices_cnns))
|
|
93
|
+
setup_devices_cnns = RoutingPath.__get_abs_setup_dev_cnns_for(device_mapping.values())
|
|
86
94
|
|
|
87
95
|
from_setup_device = device_mapping[scenario_connection.from_device]
|
|
88
96
|
to_setup_device = device_mapping[scenario_connection.to_device]
|
|
@@ -96,12 +104,15 @@ class RoutingPath:
|
|
|
96
104
|
for cur_from_setup_node_conn in setup_devices_cnns:
|
|
97
105
|
# only if there is a connection outgoing from `from_setup_device`
|
|
98
106
|
if cur_from_setup_node_conn.has_connection_from_to(start_device=from_setup_device):
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
107
|
+
all_possible_routes.append(
|
|
108
|
+
RoutingPath(
|
|
109
|
+
cur_from_setup_node_conn,
|
|
110
|
+
start_device=from_setup_device,
|
|
111
|
+
start_node_name=(cur_from_setup_node_conn.from_node_name
|
|
112
|
+
if cur_from_setup_node_conn.from_device == from_setup_device
|
|
113
|
+
else cur_from_setup_node_conn.to_node_name)
|
|
114
|
+
)
|
|
115
|
+
)
|
|
105
116
|
# now go through every possibility and add them - filter all Routes that ``has_loop() == True`` or
|
|
106
117
|
# are completed
|
|
107
118
|
while len(all_possible_routes) > 0:
|
_balder/scenario.py
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
+
from _balder.utils.inner_device_managing_metaclass import InnerDeviceManagingMetaclass
|
|
2
3
|
|
|
3
4
|
|
|
4
|
-
class Scenario:
|
|
5
|
+
class Scenario(metaclass=InnerDeviceManagingMetaclass):
|
|
5
6
|
"""
|
|
6
7
|
This is the basic scenario class. It represents an abstract class that should be the base class for all scenarios.
|
|
7
8
|
"""
|
|
8
|
-
RUN = []
|
|
9
9
|
SKIP = []
|
|
10
10
|
IGNORE = []
|
|
11
11
|
|
_balder/setup.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
+
from _balder.utils.inner_device_managing_metaclass import InnerDeviceManagingMetaclass
|
|
2
3
|
|
|
3
4
|
|
|
4
|
-
class Setup:
|
|
5
|
+
class Setup(metaclass=InnerDeviceManagingMetaclass):
|
|
5
6
|
"""
|
|
6
7
|
This is the abstract basic setup class. It has to be the base class for all setups.
|
|
7
8
|
"""
|
_balder/testresult.py
CHANGED
|
@@ -106,9 +106,10 @@ class BranchBodyResult(_Result):
|
|
|
106
106
|
"""returns the determined result for the inner branch of the related executor"""
|
|
107
107
|
relative_result = ResultState.NOT_RUN
|
|
108
108
|
priority_order = ResultState.priority_order()
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
if self._related_executor.all_child_executors:
|
|
110
|
+
for cur_child in self._related_executor.all_child_executors:
|
|
111
|
+
if priority_order.index(cur_child.executor_result) < priority_order.index(relative_result):
|
|
112
|
+
relative_result = cur_child.executor_result
|
|
112
113
|
self._result = relative_result
|
|
113
114
|
return self._result
|
|
114
115
|
|
|
File without changes
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
-
from typing import List, Type,
|
|
2
|
+
from typing import List, Type, Union, TYPE_CHECKING
|
|
3
3
|
|
|
4
|
-
import sys
|
|
5
4
|
import inspect
|
|
6
5
|
from _balder.scenario import Scenario
|
|
7
6
|
from _balder.exceptions import InheritanceError
|
|
8
7
|
|
|
9
|
-
MethodLiteralType = Literal["function", "classmethod", "staticmethod", "instancemethod"]
|
|
10
|
-
|
|
11
8
|
if TYPE_CHECKING:
|
|
12
9
|
from _balder.connection import Connection
|
|
13
10
|
from _balder.cnnrelations.base_connection_relation import BaseConnectionRelationT
|
|
11
|
+
from _balder.utils.typings import MethodLiteralType
|
|
14
12
|
|
|
15
13
|
|
|
16
14
|
def get_scenario_inheritance_list_of(scenario: Type[Scenario]) -> List[Type[Scenario]]:
|
|
@@ -57,9 +55,9 @@ def cnn_type_check_and_convert(elem: Union[Connection, Type[Connection], BaseCon
|
|
|
57
55
|
:param elem: the connection object to be converted/checked
|
|
58
56
|
"""
|
|
59
57
|
|
|
60
|
-
from
|
|
61
|
-
from
|
|
62
|
-
from
|
|
58
|
+
from ..connection import Connection # pylint: disable=import-outside-toplevel
|
|
59
|
+
from ..cnnrelations.and_connection_relation import AndConnectionRelation # pylint: disable=import-outside-toplevel
|
|
60
|
+
from ..cnnrelations.or_connection_relation import OrConnectionRelation # pylint: disable=import-outside-toplevel
|
|
63
61
|
|
|
64
62
|
if isinstance(elem, type):
|
|
65
63
|
if issubclass(elem, Connection):
|
|
@@ -71,35 +69,35 @@ def cnn_type_check_and_convert(elem: Union[Connection, Type[Connection], BaseCon
|
|
|
71
69
|
f'`{elem}`')
|
|
72
70
|
|
|
73
71
|
|
|
74
|
-
def
|
|
72
|
+
def get_method_type(func_class, func) -> MethodLiteralType:
|
|
75
73
|
"""
|
|
76
|
-
This helper function returns the
|
|
77
|
-
|
|
74
|
+
This helper function returns the type of the method (`staticmethod`, `classmethod` or `instancemethod`). It never
|
|
75
|
+
returns `function` because this type does not have a class.
|
|
78
76
|
"""
|
|
77
|
+
expected_class_qualname = func.__qualname__.rpartition('.')[0]
|
|
79
78
|
|
|
80
|
-
def
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
cur_frame = sys.modules[func.__module__]
|
|
84
|
-
names = func.__qualname__.split('.')[:-1]
|
|
85
|
-
for cur_name in names:
|
|
86
|
-
cur_frame = getattr(cur_frame, cur_name)
|
|
87
|
-
if isinstance(cur_frame, type):
|
|
88
|
-
classes.append(cur_frame)
|
|
89
|
-
return classes[-1] if classes else None
|
|
79
|
+
def get_for(the_class):
|
|
80
|
+
if the_class.__qualname__ == expected_class_qualname:
|
|
81
|
+
fn_type = the_class.__dict__.get(func.__name__)
|
|
90
82
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
cls = get_func_class()
|
|
94
|
-
fn_type = cls.__dict__.get(func.__name__)
|
|
83
|
+
if isinstance(fn_type, classmethod):
|
|
84
|
+
return 'classmethod'
|
|
95
85
|
|
|
96
|
-
|
|
97
|
-
|
|
86
|
+
if isinstance(fn_type, staticmethod):
|
|
87
|
+
return 'staticmethod'
|
|
98
88
|
|
|
99
|
-
|
|
100
|
-
|
|
89
|
+
if fn_type is not None and fn_type.__class__.__name__ == 'function':
|
|
90
|
+
return 'instancemethod'
|
|
91
|
+
raise TypeError(f'unknown element type `{func}`')
|
|
101
92
|
|
|
102
|
-
|
|
103
|
-
|
|
93
|
+
for cur_base in the_class.__bases__:
|
|
94
|
+
result = get_for(cur_base)
|
|
95
|
+
if result:
|
|
96
|
+
return result
|
|
97
|
+
return None
|
|
104
98
|
|
|
105
|
-
|
|
99
|
+
meth_type = get_for(func_class)
|
|
100
|
+
if meth_type is None:
|
|
101
|
+
raise KeyError(f'the provided function `{func.__qualname__}` does not match with the provided class '
|
|
102
|
+
f'`{func_class.__qualname__}`')
|
|
103
|
+
return meth_type
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import inspect
|
|
3
|
+
from _balder.device import Device
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class InnerDeviceManagingMetaclass(type):
|
|
7
|
+
"""metaclass for all classes that holds :class:`Device` objects - sets the reference to the outer class for them"""
|
|
8
|
+
def __new__(mcs, name, parents, dct):
|
|
9
|
+
cls = super(InnerDeviceManagingMetaclass, mcs).__new__(mcs, name, parents, dct)
|
|
10
|
+
for inner_item in dct.values():
|
|
11
|
+
if inspect.isclass(inner_item) and issubclass(inner_item, Device):
|
|
12
|
+
inner_item._outer_balder_class = cls
|
|
13
|
+
|
|
14
|
+
return cls
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from _balder.scenario import Scenario
|
|
7
|
+
from _balder.executor.scenario_executor import ScenarioExecutor
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class MixinCanBeCoveredByExecutor(ABC):
|
|
11
|
+
"""mixin class for executor that can hold covered-by items"""
|
|
12
|
+
|
|
13
|
+
@property
|
|
14
|
+
@abstractmethod
|
|
15
|
+
def scenario_executor(self) -> ScenarioExecutor:
|
|
16
|
+
"""
|
|
17
|
+
returns the current active scenario executor
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
@abstractmethod
|
|
21
|
+
def get_covered_by_element(self) -> list[Scenario | callable]:
|
|
22
|
+
"""
|
|
23
|
+
This method returns a list of elements where the elements of the executor are covered from.
|
|
24
|
+
"""
|
_balder/utils/typings.py
ADDED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: baldertest
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.0b13
|
|
4
4
|
Summary: balder: reusable scenario based test framework
|
|
5
5
|
Home-page: https://docs.balder.dev
|
|
6
6
|
Author: Max Stahlschmidt and others
|
|
@@ -28,6 +28,7 @@ Classifier: Topic :: Utilities
|
|
|
28
28
|
Requires-Python: >=3.9
|
|
29
29
|
Description-Content-Type: text/markdown
|
|
30
30
|
License-File: LICENSE
|
|
31
|
+
Dynamic: license-file
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
<div align="center">
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
_balder/__init__.py,sha256=Qk4wkVInPlXLFV36Yco5K7PDawJoeeWQVakzj6g5pmA,195
|
|
2
|
-
_balder/_version.py,sha256=
|
|
2
|
+
_balder/_version.py,sha256=RidGLONbtMyaeTxRFsnFoG0JART6r-D1DZSuTpS3ikw,514
|
|
3
3
|
_balder/balder_plugin.py,sha256=EQzJP1dwwVDydhMLJtAmTCXOczlDuXBJur05lalmK_k,3136
|
|
4
4
|
_balder/balder_session.py,sha256=ezT86gC_VzPQZOQ4r5qQ75IEm6rXZHiIpEqZDczkRsE,16149
|
|
5
5
|
_balder/balder_settings.py,sha256=U96PVep7dGSaTXrMfeZMYf6oCIcEDPEqrBlFcoX476s,582
|
|
6
|
-
_balder/collector.py,sha256=
|
|
7
|
-
_balder/connection.py,sha256=
|
|
6
|
+
_balder/collector.py,sha256=rWpr7ZD64Dki-um7GaXlt9R_Jxl6E9OqTmMRSriDolg,44578
|
|
7
|
+
_balder/connection.py,sha256=X0zGAsAywNFck-DBie38N-9sJLAde7UJ0qYuHaiO5GE,40775
|
|
8
8
|
_balder/connection_metadata.py,sha256=FrTj6NNBBUl6QuFx8DWy6HRueufXB93WTBkdc41uFaE,13632
|
|
9
|
-
_balder/decorator_connect.py,sha256
|
|
10
|
-
_balder/decorator_covered_by.py,sha256=
|
|
9
|
+
_balder/decorator_connect.py,sha256=-DDHzTtEZVSHXAQNmqnu3x2gfOJu08Lq4piBDQ1R0no,5857
|
|
10
|
+
_balder/decorator_covered_by.py,sha256=5b5RuJF4C7VDhuxpWjZuN1B71E6q9sywhp8LLNGPlbg,3786
|
|
11
11
|
_balder/decorator_fixture.py,sha256=vVd3pXVWEaaVP2rxgW4nKoskmDByafHuSFHC0v_LMoI,1045
|
|
12
12
|
_balder/decorator_for_vdevice.py,sha256=adEzLc0otuvCpj2TntuJWMQX_mq2oLtYRXFFbIhQVYo,5917
|
|
13
13
|
_balder/decorator_gateway.py,sha256=Qa8Cjm50I1OSHhADU8LmeSQh2QSuH9qGRuedWAlLfu4,1381
|
|
@@ -17,48 +17,49 @@ _balder/decorator_parametrize_by_feature.py,sha256=r0iySfWcFxXIVu0BNWIRU_E6_o2-l
|
|
|
17
17
|
_balder/device.py,sha256=5O3tqj_iLKfHb5Zi_viJ76VH82cMOzX58OzRrMRRv0k,833
|
|
18
18
|
_balder/exceptions.py,sha256=_zQFUK4kYKaVGUtH9IcH0q-GOyBb9qzqSU6BOsUnG7Y,4375
|
|
19
19
|
_balder/exit_code.py,sha256=P0oFWKfjMo36Frv13ADRcm8eSPN3kE-WmZBE9qZJHdA,513
|
|
20
|
-
_balder/feature.py,sha256=
|
|
20
|
+
_balder/feature.py,sha256=ce9d7Ljaapypn5VacRK7iAhV4IS5RGPIEqlBZ-2jsEU,4015
|
|
21
|
+
_balder/feature_replacement_mapping.py,sha256=NjGNfg_Ut8mvPTAnc2SPx2kJYnGh14dOCR93EWH8NUE,4235
|
|
22
|
+
_balder/feature_vdevice_mapping.py,sha256=aAQ8R48orYiOr_9_L8nZCz3jq5-qlq9gfY7DeTzmUyM,3576
|
|
21
23
|
_balder/fixture_definition_scope.py,sha256=0MP0U2fcM9iS28Ytkfuu3TzZ4cUNG5u81GBWGBm9ucw,709
|
|
22
24
|
_balder/fixture_execution_level.py,sha256=-y7-4bihTSMzhYvM2O1Qc40ovyvW7SP25rHvWHZpD6g,655
|
|
23
|
-
_balder/fixture_manager.py,sha256=
|
|
24
|
-
_balder/fixture_metadata.py,sha256=
|
|
25
|
+
_balder/fixture_manager.py,sha256=UFVMmSezeHDlvV4ZoXmZPM7YcwaXNuKj7LlWhjYWfBU,29237
|
|
26
|
+
_balder/fixture_metadata.py,sha256=N3TQwa9-Y9kyPoEJDMn1QhnQqB5nhwvXM4XLmVEpU_I,880
|
|
25
27
|
_balder/node_gateway.py,sha256=64mv7Nx82JVknnQ09UXC-AcdDl6i_OB6NOsq_uBxeYo,4710
|
|
26
28
|
_balder/parametrization.py,sha256=SnaGeGpf7-5H-y107CBDx5V-onX-oiLS1KU1IquZwcU,2678
|
|
27
29
|
_balder/plugin_manager.py,sha256=Ev2jnx4NtFHDsZ3C6h0HrJtQisqLO-V34JRM3wzTnFM,6921
|
|
28
30
|
_balder/previous_executor_mark.py,sha256=gwpGu7d-kwPzQT8CmaPfuEG6fess2Upf5Q-zX6Oi6NY,835
|
|
29
|
-
_balder/routing_path.py,sha256=
|
|
30
|
-
_balder/scenario.py,sha256=
|
|
31
|
-
_balder/setup.py,sha256=
|
|
31
|
+
_balder/routing_path.py,sha256=icIp09sC51sBsNHZPrWzGOtLqrOT5Se_dj0Db7MwtwY,17093
|
|
32
|
+
_balder/scenario.py,sha256=beHkEqb9pnhrMOt1qfgATSBWVfHahw9RsOCT-uxK6TE,954
|
|
33
|
+
_balder/setup.py,sha256=sIyuqhDSCzxtkWXW48jRrLDvGWkZwgpL6NvEKrFM65E,890
|
|
32
34
|
_balder/solver.py,sha256=NbpAdvrGWdJTY6eZmNZFr7YDubyggY0yW64rDB3JkT0,13121
|
|
33
|
-
_balder/testresult.py,sha256=
|
|
35
|
+
_balder/testresult.py,sha256=AE_LWCwmR9aR36IHfPARaaqossBahv-P2URCZ8cFAvM,6893
|
|
34
36
|
_balder/unmapped_vdevice.py,sha256=oKr01YVTLViWtZkYz8kx8ccTx-KmwgNrHuQqqD4eLQw,513
|
|
35
|
-
_balder/utils.py,sha256=7bfjap7KKpFaRFusCimMpk-UYR4X1LR-pdA_q7DN28E,4271
|
|
36
37
|
_balder/vdevice.py,sha256=fc2xuMnTuN1RyfWh9mqFgLdSO9yGA75eERobTXUQ9JA,215
|
|
37
38
|
_balder/cnnrelations/__init__.py,sha256=LDnjVlJmclxmfKs3snKsK2RDMg8N7Xc6OeDVioxHR58,187
|
|
38
|
-
_balder/cnnrelations/and_connection_relation.py,sha256=
|
|
39
|
-
_balder/cnnrelations/base_connection_relation.py,sha256=
|
|
39
|
+
_balder/cnnrelations/and_connection_relation.py,sha256=PW9SPEKtwtj2jm9ROmqi4eqpTPN0ppRNkTqM8qHq2MU,9682
|
|
40
|
+
_balder/cnnrelations/base_connection_relation.py,sha256=g0jqCTXNI7cV8LYL5Ugfrs2YpmggH-7WoJhRGno4OEI,11418
|
|
40
41
|
_balder/cnnrelations/or_connection_relation.py,sha256=hPqC86qXRRgaOA6SeIzGnqxY6zd9OJ1KU5jwKbERo7s,2730
|
|
41
42
|
_balder/console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
43
|
_balder/console/balder.py,sha256=rF1qgW6h35hKqGijGbZgGD2_y0Sd9Mbs_EXF2v_EUCk,2581
|
|
43
44
|
_balder/controllers/__init__.py,sha256=UNb6QzMj4TqPI15OSvXyUJlA-NSai0CKkQhV5JIsba0,570
|
|
44
45
|
_balder/controllers/base_device_controller.py,sha256=g-vY2SqKFUC9yGOvHLfbdmILT3sK2YyaWKSfvTRcC0o,3174
|
|
45
46
|
_balder/controllers/controller.py,sha256=XGRE5LKWxxftEf-bZODvKxXwULu09iG131wMwRoz4Fk,803
|
|
46
|
-
_balder/controllers/device_controller.py,sha256=
|
|
47
|
-
_balder/controllers/feature_controller.py,sha256=
|
|
48
|
-
_balder/controllers/normal_scenario_setup_controller.py,sha256=
|
|
49
|
-
_balder/controllers/scenario_controller.py,sha256=
|
|
47
|
+
_balder/controllers/device_controller.py,sha256=vFR45CnJwqeqsmV8-SS6_fMhuMdWogsJ1VZlRFEwZl0,23274
|
|
48
|
+
_balder/controllers/feature_controller.py,sha256=0nDIn0OTzJPJiC6oYvLfumLvYV9cFfb6Jl8xHycJ9Vc,41362
|
|
49
|
+
_balder/controllers/normal_scenario_setup_controller.py,sha256=JmxmPThcxTADOOR30W0SYQDADHn-634QiQSpUZrKUpY,21884
|
|
50
|
+
_balder/controllers/scenario_controller.py,sha256=RT8Q68rp6iRVRqEaou-XxPgGgIaOVRTqhl-5hcYioAY,28477
|
|
50
51
|
_balder/controllers/setup_controller.py,sha256=1jX_K_7iHQ2jWBZv-urC0_9lCi4RjrwxvtW7oWMVb7s,7082
|
|
51
|
-
_balder/controllers/vdevice_controller.py,sha256=
|
|
52
|
+
_balder/controllers/vdevice_controller.py,sha256=rWK3oHzXbNlgXf0xbWyssDevx0qQ7Bmi7nsmHhAhFtg,4494
|
|
52
53
|
_balder/executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
53
|
-
_balder/executor/basic_executable_executor.py,sha256=
|
|
54
|
-
_balder/executor/basic_executor.py,sha256=
|
|
55
|
-
_balder/executor/executor_tree.py,sha256=
|
|
56
|
-
_balder/executor/parametrized_testcase_executor.py,sha256=
|
|
57
|
-
_balder/executor/scenario_executor.py,sha256=
|
|
58
|
-
_balder/executor/setup_executor.py,sha256=
|
|
59
|
-
_balder/executor/testcase_executor.py,sha256=
|
|
60
|
-
_balder/executor/unresolved_parametrized_testcase_executor.py,sha256=
|
|
61
|
-
_balder/executor/variation_executor.py,sha256=
|
|
54
|
+
_balder/executor/basic_executable_executor.py,sha256=RWwc8c4B7qO2BxlUB8dZH9IC64qm_KWh8tGCoBB8v6o,5395
|
|
55
|
+
_balder/executor/basic_executor.py,sha256=6rLSBrTGodlaRVfHV2kpXPjbAqUPEq9-2txCxz_-fXg,9327
|
|
56
|
+
_balder/executor/executor_tree.py,sha256=CfwUDUAgCb_k_haaqX7GC23DB2LLEpkL-NnSCEdufiA,10659
|
|
57
|
+
_balder/executor/parametrized_testcase_executor.py,sha256=Wk4XitAVOMGU7pSn7AOyvOsuL9CorcqFJ-iRuVtat1M,2149
|
|
58
|
+
_balder/executor/scenario_executor.py,sha256=tfQ1tKvmhAUgUkAcgJ94hI46hLcXAhIMD-d9qCmJiXg,8152
|
|
59
|
+
_balder/executor/setup_executor.py,sha256=QWMWhfzsssRT_fHOUKjw4gHfC2CaZjhL5NxF1eNl35w,8604
|
|
60
|
+
_balder/executor/testcase_executor.py,sha256=Yrifk_8hsm1KKrE6udd84EyBywmWiUN00MlcezMQ7xA,8216
|
|
61
|
+
_balder/executor/unresolved_parametrized_testcase_executor.py,sha256=Pb-LhEFNspb03pYTqTyFvSWPFMoRCjO8OVjjP2rHFMw,7628
|
|
62
|
+
_balder/executor/variation_executor.py,sha256=2VLXmPmRVFi69bkqVkHaz055l5OEPMNer1qSKD3SN9M,51515
|
|
62
63
|
_balder/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
64
|
_balder/objects/connections/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
65
|
_balder/objects/connections/osi_1_physical.py,sha256=74lKWJd6ETEtvNXH0_dmTbkZlStJ_af218pQkUht0aA,2189
|
|
@@ -70,14 +71,19 @@ _balder/objects/connections/osi_6_presentation.py,sha256=zCQXocR14CC8rFONFHUethv
|
|
|
70
71
|
_balder/objects/connections/osi_7_application.py,sha256=VPTlKKCEd9FFusce2wVbScIBPzpikPQtpSPE7PHxMUI,2304
|
|
71
72
|
_balder/objects/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
73
|
_balder/objects/devices/this_device.py,sha256=Ah0UNIqgUbtZ_B85fROjKbQS-NTDH1F3gscshB8UBsc,442
|
|
74
|
+
_balder/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
|
+
_balder/utils/functions.py,sha256=6qpHSSlUz-Xc0t00VPIKJzzJBJrjYi9ii4mTFX-fb_I,4276
|
|
76
|
+
_balder/utils/inner_device_managing_metaclass.py,sha256=5haJb6XNjhxULFW1Sy8Dp7SO9Hex-yuF0rK1FG0UOXk,570
|
|
77
|
+
_balder/utils/mixin_can_be_covered_by_executor.py,sha256=yDOsYh9mfhcLUAH0ahuFbdDKYsxaqbPsUEEctC3YenU,718
|
|
78
|
+
_balder/utils/typings.py,sha256=eh3mw8wRQjTkuitGJKJSKu2JmyOnpWYMI9bAzE9M_KU,118
|
|
73
79
|
balder/__init__.py,sha256=PvPDJT9-mnDt3PuidCkPM6mB6wvcETIoINld3Jt1TUU,1184
|
|
74
80
|
balder/connections.py,sha256=H6rf7UsiVY_FeZLngZXCT9WDw9cQqpiDiPbz_0J4yjM,2331
|
|
75
81
|
balder/devices.py,sha256=zupHtz8yaiEjzR8CrvgZU-RzsDQcZFeN5mObfhtjwSw,173
|
|
76
82
|
balder/exceptions.py,sha256=iaR4P2L7K3LggYSDnjCGLheZEaGgnMilxDQdoYD5KHQ,1954
|
|
77
83
|
balder/parametrization.py,sha256=R8U67f6DEnXdDc9cGOgS8yFTEAfhglv1v9mnAUAExUg,150
|
|
78
|
-
baldertest-0.1.
|
|
79
|
-
baldertest-0.1.
|
|
80
|
-
baldertest-0.1.
|
|
81
|
-
baldertest-0.1.
|
|
82
|
-
baldertest-0.1.
|
|
83
|
-
baldertest-0.1.
|
|
84
|
+
baldertest-0.1.0b13.dist-info/licenses/LICENSE,sha256=Daz9qTpqbiq-klWb2Q9lYOmn3rJ5oIQnbs62sGcqOZ4,1084
|
|
85
|
+
baldertest-0.1.0b13.dist-info/METADATA,sha256=H1qa7Y2O_dxTi1st-H9NpKKmU0bOIgDhJiouXU_dE9g,15806
|
|
86
|
+
baldertest-0.1.0b13.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
|
87
|
+
baldertest-0.1.0b13.dist-info/entry_points.txt,sha256=hzqu_nrMKTCi5IJqzS1fhIXWEiL7mTGZ-kgj2lUYlRU,65
|
|
88
|
+
baldertest-0.1.0b13.dist-info/top_level.txt,sha256=RUkIBkNLqHMemx2C9aEpoS65dpqb6_jU-oagIPxGQEA,15
|
|
89
|
+
baldertest-0.1.0b13.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|