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.
Files changed (41) hide show
  1. _balder/_version.py +8 -3
  2. _balder/cnnrelations/and_connection_relation.py +28 -1
  3. _balder/cnnrelations/base_connection_relation.py +1 -1
  4. _balder/collector.py +101 -113
  5. _balder/connection.py +76 -80
  6. _balder/controllers/device_controller.py +17 -29
  7. _balder/controllers/feature_controller.py +2 -2
  8. _balder/controllers/normal_scenario_setup_controller.py +1 -2
  9. _balder/controllers/scenario_controller.py +121 -0
  10. _balder/controllers/vdevice_controller.py +2 -23
  11. _balder/decorator_connect.py +3 -3
  12. _balder/decorator_covered_by.py +28 -36
  13. _balder/executor/basic_executable_executor.py +13 -6
  14. _balder/executor/basic_executor.py +31 -4
  15. _balder/executor/executor_tree.py +5 -4
  16. _balder/executor/parametrized_testcase_executor.py +2 -2
  17. _balder/executor/scenario_executor.py +12 -71
  18. _balder/executor/setup_executor.py +4 -3
  19. _balder/executor/testcase_executor.py +35 -19
  20. _balder/executor/unresolved_parametrized_testcase_executor.py +32 -57
  21. _balder/executor/variation_executor.py +127 -148
  22. _balder/feature.py +2 -1
  23. _balder/feature_replacement_mapping.py +107 -0
  24. _balder/feature_vdevice_mapping.py +88 -0
  25. _balder/fixture_manager.py +1 -1
  26. _balder/fixture_metadata.py +1 -1
  27. _balder/routing_path.py +27 -16
  28. _balder/scenario.py +2 -2
  29. _balder/setup.py +2 -1
  30. _balder/testresult.py +4 -3
  31. _balder/utils/__init__.py +0 -0
  32. _balder/{utils.py → utils/functions.py} +29 -31
  33. _balder/utils/inner_device_managing_metaclass.py +14 -0
  34. _balder/utils/mixin_can_be_covered_by_executor.py +24 -0
  35. _balder/utils/typings.py +4 -0
  36. {baldertest-0.1.0b11.dist-info → baldertest-0.1.0b13.dist-info}/METADATA +3 -2
  37. {baldertest-0.1.0b11.dist-info → baldertest-0.1.0b13.dist-info}/RECORD +41 -35
  38. {baldertest-0.1.0b11.dist-info → baldertest-0.1.0b13.dist-info}/WHEEL +1 -1
  39. {baldertest-0.1.0b11.dist-info → baldertest-0.1.0b13.dist-info}/entry_points.txt +0 -0
  40. {baldertest-0.1.0b11.dist-info → baldertest-0.1.0b13.dist-info/licenses}/LICENSE +0 -0
  41. {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')
@@ -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
 
@@ -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, device_mapping: Dict[Type[Device], Type[Device]],
63
- alternative_setup_device_cnns: Union[List[Connection], None] = None) \
64
- -> List[RoutingPath]:
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
- cur_from_setup_node = cur_from_setup_node_conn.from_node_name \
100
- if cur_from_setup_node_conn.from_device == from_setup_device \
101
- else cur_from_setup_node_conn.to_node_name
102
- new_route = RoutingPath(cur_from_setup_node_conn, start_device=from_setup_device,
103
- start_node_name=cur_from_setup_node)
104
- all_possible_routes.append(new_route)
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
- for cur_child in self._related_executor.all_child_executors:
110
- if priority_order.index(cur_child.executor_result) < priority_order.index(relative_result):
111
- relative_result = cur_child.executor_result
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, Tuple, Union, Literal, TYPE_CHECKING
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 .connection import Connection # pylint: disable=import-outside-toplevel
61
- from .cnnrelations.and_connection_relation import AndConnectionRelation # pylint: disable=import-outside-toplevel
62
- from .cnnrelations.or_connection_relation import OrConnectionRelation # pylint: disable=import-outside-toplevel
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 inspect_method(func) -> Tuple[Union[type, None], MethodLiteralType]:
72
+ def get_method_type(func_class, func) -> MethodLiteralType:
75
73
  """
76
- This helper function returns the related class and the type of the method (`staticmethod`, `classmethod`,
77
- `instancemethod` or `function`) as tuple.
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 get_func_class():
81
- """helper method to determine the class of the `func`"""
82
- classes = []
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
- if func.__name__ == func.__qualname__ or '.<locals>' in func.__qualname__:
92
- return None, 'function'
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
- if isinstance(fn_type, classmethod):
97
- return cls, 'classmethod'
86
+ if isinstance(fn_type, staticmethod):
87
+ return 'staticmethod'
98
88
 
99
- if isinstance(fn_type, staticmethod):
100
- return cls, 'staticmethod'
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
- if fn_type is not None and fn_type.__class__.__name__ == 'function':
103
- return cls, 'instancemethod'
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
- raise TypeError(f'unknown element type `{func}`')
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
+ """
@@ -0,0 +1,4 @@
1
+ from typing import Literal
2
+
3
+
4
+ MethodLiteralType = Literal["function", "classmethod", "staticmethod", "instancemethod"]
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: baldertest
3
- Version: 0.1.0b11
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=fgSwP5K0NJOmhZpDfiqSUfFysLGqMES9LZQlLZ92X9Q,414
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=uymS7CwymrZNxzKDG9_kPOK7HGKtnX3FNwX7Dk2LuC0,47567
7
- _balder/connection.py,sha256=j6wI7m3h23q9aCApRDmLyeerxUXQ0j267v4FgjP4p6E,41770
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=67CojFZH9dZ_qwnvb6rkqxe3adtQlgHVi_0etmP5Hyw,5881
10
- _balder/decorator_covered_by.py,sha256=Y6WMUuyn_uvFkjGfbts8OE5Bsir_7LTRB-jxYGaYk4Y,4069
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=Da6BP4H1X0eKm0DyQKRdSnrQeqV8QeCFE4JybI_wYSc,3888
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=RjAQjpvBBGy-loCVCHlkArvyr35rr4shNWUpeY-0QP4,29227
24
- _balder/fixture_metadata.py,sha256=4vls8-I0bsRxLDNbD5Du4Cm2ZPYwxqfuSeEY6D654jE,872
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=cHDjIIZbCeFHe_JX3kp3XADg3CApxGaKwTYQAPpCYZA,16767
30
- _balder/scenario.py,sha256=ATowBUl2HYQBmJHZ-eBpliqjPsWPnZAme9kwIeX3Tak,840
31
- _balder/setup.py,sha256=zSgtzNIWTVBjiZ5mn-qfpqIAnP3Im73t3Lqoaw0gWEI,763
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=Tm5m0Rnpn3JgdQp22izsMIPoVxRU0ngJjUuS73eRboM,6826
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=mrio_jyMuJ2VmJtiFAKQ8BMqjHYiKIpWmuc4KpgcIMM,8048
39
- _balder/cnnrelations/base_connection_relation.py,sha256=s9DufjB9EHkqVUHhjDurMGiPxtTte-yvwCQ2nFAHZeY,11402
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=MXX_Jr7MFhsEq-2GzneA0c09X-wdcPGEPfiYLlrtiSc,23985
47
- _balder/controllers/feature_controller.py,sha256=ve7t9zwhkPP-L_LZbKghdD6An2LO2TYWErAfN9dfRdQ,41405
48
- _balder/controllers/normal_scenario_setup_controller.py,sha256=w7VBxnrFu7_NBeTRD-XZBRflBjA8MPD_aL0DTh7w_pU,21924
49
- _balder/controllers/scenario_controller.py,sha256=sfCpR4NfWgEIksVV3dP8gko95vu_6FBMseU5Pb_CBZk,22354
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=6-PidCKgvUteZVJsbGkKX69f3cYYYnolONl5Gja16W8,5777
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=Mta7a9stCiKPMQ6Hafe4jhlhLSeP6Bk7EWIPXUzrwNE,5135
54
- _balder/executor/basic_executor.py,sha256=zX9lMkWThFXcqPzYaVMiELdg5WhjvvfxL_37j9vB5EA,8130
55
- _balder/executor/executor_tree.py,sha256=I3zy5qOrQWoT3_3YnGDvGvfJE829J0X9xT7WtSru-pI,10618
56
- _balder/executor/parametrized_testcase_executor.py,sha256=uR_CwdIRxiL1vqJP2P2htc0JPPevMGarIQs7cqHNzmU,2106
57
- _balder/executor/scenario_executor.py,sha256=3-CkamjyIatDxS3INcYGTXDOtGR-bokcMLaMxC10Ytg,11344
58
- _balder/executor/setup_executor.py,sha256=Icn-b3MHLMCGGOIGAPB01KWC6LkkZ-ikD_0XqcQjK0Y,8570
59
- _balder/executor/testcase_executor.py,sha256=xSOjDexvcUET6vfwn1ogOs1Xi-9yeCt2AsnivXZkTao,7702
60
- _balder/executor/unresolved_parametrized_testcase_executor.py,sha256=nwScqqiJD7Clkk3YcrPqXJnGEWjvunAlUYAwYvpUI2s,9075
61
- _balder/executor/variation_executor.py,sha256=lfBVnGC5O8DeS8e9rJQjDlRauAMa7Vrhtcd7Smrwagg,53649
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.0b11.dist-info/LICENSE,sha256=Daz9qTpqbiq-klWb2Q9lYOmn3rJ5oIQnbs62sGcqOZ4,1084
79
- baldertest-0.1.0b11.dist-info/METADATA,sha256=zFBAEOFb5RiSNIk31ATneqnYvTrqD6d-oLZjG_vOklU,15784
80
- baldertest-0.1.0b11.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
81
- baldertest-0.1.0b11.dist-info/entry_points.txt,sha256=hzqu_nrMKTCi5IJqzS1fhIXWEiL7mTGZ-kgj2lUYlRU,65
82
- baldertest-0.1.0b11.dist-info/top_level.txt,sha256=RUkIBkNLqHMemx2C9aEpoS65dpqb6_jU-oagIPxGQEA,15
83
- baldertest-0.1.0b11.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (77.0.3)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5