baldertest 0.1.0b9__py3-none-any.whl → 0.1.0b11__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 (53) hide show
  1. _balder/_version.py +1 -1
  2. _balder/balder_session.py +4 -2
  3. _balder/cnnrelations/__init__.py +7 -0
  4. _balder/cnnrelations/and_connection_relation.py +149 -0
  5. _balder/cnnrelations/base_connection_relation.py +270 -0
  6. _balder/cnnrelations/or_connection_relation.py +65 -0
  7. _balder/collector.py +116 -14
  8. _balder/connection.py +400 -881
  9. _balder/connection_metadata.py +255 -0
  10. _balder/console/balder.py +1 -1
  11. _balder/controllers/device_controller.py +26 -12
  12. _balder/controllers/feature_controller.py +63 -99
  13. _balder/controllers/normal_scenario_setup_controller.py +7 -7
  14. _balder/controllers/scenario_controller.py +97 -7
  15. _balder/controllers/setup_controller.py +2 -3
  16. _balder/decorator_connect.py +12 -10
  17. _balder/decorator_fixture.py +4 -7
  18. _balder/decorator_for_vdevice.py +21 -31
  19. _balder/decorator_gateway.py +3 -3
  20. _balder/decorator_parametrize.py +31 -0
  21. _balder/decorator_parametrize_by_feature.py +36 -0
  22. _balder/exceptions.py +6 -0
  23. _balder/executor/basic_executable_executor.py +126 -0
  24. _balder/executor/basic_executor.py +1 -78
  25. _balder/executor/executor_tree.py +7 -5
  26. _balder/executor/parametrized_testcase_executor.py +52 -0
  27. _balder/executor/scenario_executor.py +5 -2
  28. _balder/executor/setup_executor.py +5 -2
  29. _balder/executor/testcase_executor.py +41 -9
  30. _balder/executor/unresolved_parametrized_testcase_executor.py +209 -0
  31. _balder/executor/variation_executor.py +148 -123
  32. _balder/feature.py +1 -1
  33. _balder/fixture_definition_scope.py +19 -0
  34. _balder/fixture_execution_level.py +22 -0
  35. _balder/fixture_manager.py +170 -182
  36. _balder/fixture_metadata.py +26 -0
  37. _balder/objects/connections/osi_3_network.py +2 -2
  38. _balder/objects/connections/osi_4_transport.py +2 -2
  39. _balder/parametrization.py +75 -0
  40. _balder/routing_path.py +18 -25
  41. _balder/solver.py +52 -32
  42. _balder/testresult.py +1 -1
  43. _balder/utils.py +27 -1
  44. balder/__init__.py +6 -0
  45. balder/exceptions.py +4 -3
  46. balder/parametrization.py +8 -0
  47. {baldertest-0.1.0b9.dist-info → baldertest-0.1.0b11.dist-info}/METADATA +2 -2
  48. baldertest-0.1.0b11.dist-info/RECORD +83 -0
  49. {baldertest-0.1.0b9.dist-info → baldertest-0.1.0b11.dist-info}/WHEEL +1 -1
  50. baldertest-0.1.0b9.dist-info/RECORD +0 -68
  51. {baldertest-0.1.0b9.dist-info → baldertest-0.1.0b11.dist-info}/LICENSE +0 -0
  52. {baldertest-0.1.0b9.dist-info → baldertest-0.1.0b11.dist-info}/entry_points.txt +0 -0
  53. {baldertest-0.1.0b9.dist-info → baldertest-0.1.0b11.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,75 @@
1
+ from __future__ import annotations
2
+ from typing import Type, Dict, Any, TypeVar, List
3
+ import dataclasses
4
+
5
+ from _balder.device import Device
6
+
7
+ ValueTypeT = TypeVar("ValueTypeT")
8
+
9
+
10
+ @dataclasses.dataclass
11
+ class FeatureAccessSelector:
12
+ """helper object for dynamic parametrizing by feature method/property"""
13
+ device: Type[Device]
14
+ device_property_name: str
15
+ feature_property_name: str
16
+ parameters: Dict[str, FeatureAccessSelector | Value] = dataclasses.field(default_factory=dict)
17
+
18
+ def get_value(self, available_parameters: Dict[str, Any]) -> List[Any]:
19
+ """accesses the configured method/property"""
20
+ resolved_parameters = {}
21
+ for cur_key, cur_value in self.parameters.items():
22
+ if isinstance(cur_value, FeatureAccessSelector):
23
+ resolved_parameters[cur_key] = cur_value.get_value(available_parameters)
24
+ elif isinstance(cur_value, Parameter):
25
+ resolved_parameters[cur_key] = available_parameters[cur_value.name]
26
+ elif isinstance(cur_value, Value):
27
+ resolved_parameters[cur_key] = cur_value.value
28
+ else:
29
+ raise TypeError(f'go unexpected parameter type {type(cur_value)} in FeatureAccessSelector')
30
+
31
+ feature = getattr(self.device, self.device_property_name)
32
+
33
+ if isinstance(getattr(feature.__class__, self.feature_property_name), property):
34
+ return getattr(feature, self.feature_property_name)
35
+
36
+ return getattr(feature, self.feature_property_name)(**resolved_parameters)
37
+
38
+ def get_parameters(
39
+ self,
40
+ of_type: Type[FeatureAccessSelector | Parameter | Value] | None = None
41
+ ) -> Dict[str, FeatureAccessSelector | Parameter | Value]:
42
+ """
43
+ Returns the parameters of this access selector
44
+
45
+ :param of_type: allows to filter the parameters by the value's type
46
+ """
47
+ result = {}
48
+ for cur_attr, cur_value in self.parameters.items():
49
+ if of_type is None or isinstance(cur_value, of_type):
50
+ result[cur_attr] = cur_value
51
+ return result
52
+
53
+
54
+ class Parameter:
55
+ """allows to parametrize a parametrization by another parametrization value"""
56
+
57
+ def __init__(self, name: str) -> None:
58
+ self._name = name
59
+
60
+ @property
61
+ def name(self) -> str:
62
+ """returns the name of the parameter"""
63
+ return self._name
64
+
65
+
66
+ class Value:
67
+ """allows to parametrize a parametrization by a fix value"""
68
+
69
+ def __init__(self, value: ValueTypeT) -> None:
70
+ self._value = value
71
+
72
+ @property
73
+ def value(self) -> ValueTypeT:
74
+ """returns the value of the parametrization"""
75
+ return self._value
_balder/routing_path.py CHANGED
@@ -79,17 +79,13 @@ class RoutingPath:
79
79
  if alternative_setup_device_cnns is None:
80
80
  setup_devices_cnns = []
81
81
  for cur_setup_device in device_mapping.values():
82
- cur_setup_device_abs_cnns = \
83
- DeviceController.get_for(cur_setup_device).get_all_absolute_connections()
84
- for _, cur_cnn_list in cur_setup_device_abs_cnns.items():
85
- for cur_cnn in cur_cnn_list:
86
- if cur_cnn not in setup_devices_cnns:
87
- setup_devices_cnns.append(cur_cnn)
88
-
89
- from_scenario_device = scenario_connection.from_device
90
- to_scenario_device = scenario_connection.to_device
91
- from_setup_device = device_mapping[from_scenario_device]
92
- to_setup_device = device_mapping[to_scenario_device]
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))
86
+
87
+ from_setup_device = device_mapping[scenario_connection.from_device]
88
+ to_setup_device = device_mapping[scenario_connection.to_device]
93
89
 
94
90
  # contains a list with all routes that start and end correctly
95
91
  all_completed_routes = []
@@ -111,16 +107,14 @@ class RoutingPath:
111
107
  while len(all_possible_routes) > 0:
112
108
 
113
109
  # remove all routings that have a loop
114
- for cur_routing in all_possible_routes.copy():
115
- if cur_routing.has_loop():
116
- all_possible_routes.remove(cur_routing)
110
+ all_possible_routes = [route for route in all_possible_routes.copy() if not route.has_loop()]
117
111
 
118
- # remove all routings which do not work because they have the wrong connection type
119
- for cur_routing in all_possible_routes.copy():
120
- # check that one part connection matches the requirements of the given `scenario_connection`
121
- if not scenario_connection.contained_in(cur_routing.get_virtual_connection(), ignore_metadata=True):
122
- # the virtual connection doesn't match the requirement -> delete possibility
123
- all_possible_routes.remove(cur_routing)
112
+ # remove all not working routing because they have the wrong connection type, by checking that one part
113
+ # connection matches the requirements of the given `scenario_connection`
114
+ all_possible_routes = [
115
+ r for r in all_possible_routes
116
+ if scenario_connection.contained_in(r.get_virtual_connection(), ignore_metadata=True)
117
+ ]
124
118
 
125
119
  # move all completely routed connections to `all_completed_routes`
126
120
  for cur_routing in all_possible_routes.copy():
@@ -167,7 +161,7 @@ class RoutingPath:
167
161
  # ---------------------------------- PROPERTIES --------------------------------------------------------------------
168
162
 
169
163
  @property
170
- def elements(self) -> List[Connection, NodeGateway]:
164
+ def elements(self) -> List[Union[Connection, NodeGateway]]:
171
165
  """returns all elements that belongs to this routing path"""
172
166
  return self._routing_elems
173
167
 
@@ -269,7 +263,7 @@ class RoutingPath:
269
263
  """
270
264
  copied_elem = copy.copy(self)
271
265
  # also copy list reference
272
- copied_elem._routing_elems = self._routing_elems.copy()
266
+ copied_elem._routing_elems = self._routing_elems.copy() # pylint: disable=protected-access
273
267
  return copied_elem
274
268
 
275
269
  def append_element(self, elem: Union[Connection, NodeGateway]) -> None:
@@ -324,8 +318,7 @@ class RoutingPath:
324
318
  # todo
325
319
  pass
326
320
  # set metadata based on this routing
327
- virtual_connection.set_devices(from_device=self.start_device, to_device=self.end_device)
328
- virtual_connection.update_node_names(from_device_node_name=self.start_node_name,
329
- to_device_node_name=self.end_node_name)
321
+ virtual_connection.metadata.set_from(from_device=self.start_device, from_device_node_name=self.start_node_name)
322
+ virtual_connection.metadata.set_to(to_device=self.end_device, to_device_node_name=self.end_node_name)
330
323
 
331
324
  return virtual_connection
_balder/solver.py CHANGED
@@ -2,13 +2,14 @@ from __future__ import annotations
2
2
  from typing import List, Dict, Tuple, Type, Union, Callable, TYPE_CHECKING
3
3
 
4
4
  import itertools
5
- from _balder.utils import inspect_method
6
5
  from _balder.fixture_manager import FixtureManager
7
6
  from _balder.executor.executor_tree import ExecutorTree
8
7
  from _balder.executor.setup_executor import SetupExecutor
9
8
  from _balder.executor.scenario_executor import ScenarioExecutor
10
9
  from _balder.executor.testcase_executor import TestcaseExecutor
11
10
  from _balder.executor.variation_executor import VariationExecutor
11
+ from _balder.executor.parametrized_testcase_executor import ParametrizedTestcaseExecutor
12
+ from _balder.executor.unresolved_parametrized_testcase_executor import UnresolvedParametrizedTestcaseExecutor
12
13
  from _balder.previous_executor_mark import PreviousExecutorMark
13
14
  from _balder.controllers import ScenarioController, SetupController
14
15
 
@@ -27,7 +28,7 @@ class Solver:
27
28
  """
28
29
 
29
30
  def __init__(self, setups: List[Type[Setup]], scenarios: List[Type[Scenario]], connections: List[Type[Connection]],
30
- raw_fixtures: Dict[str, List[Callable]]):
31
+ fixture_manager: Union[FixtureManager, None]):
31
32
  #: contains all available setup classes
32
33
  self._all_existing_setups = setups
33
34
  #: contains all available scenario classes
@@ -40,8 +41,7 @@ class Solver:
40
41
  self._mapping: List[Tuple[Type[Setup], Type[Scenario], Dict[Type[Device], Type[Device]]]] = []
41
42
  self._resolving_was_executed = False
42
43
 
43
- self._raw_fixtures = raw_fixtures
44
- self._fixture_manager: Union[FixtureManager, None] = None
44
+ self._fixture_manager = fixture_manager
45
45
 
46
46
  # ---------------------------------- STATIC METHODS ----------------------------------------------------------------
47
47
 
@@ -117,23 +117,7 @@ class Solver:
117
117
 
118
118
  # ---------------------------------- METHODS -----------------------------------------------------------------------
119
119
 
120
- def get_fixture_manager(self) -> FixtureManager:
121
- """
122
- Resolves all fixtures and returns the fixture manager for this session
123
- :return: the fixture manager that is valid for this session
124
- """
125
- resolved_dict = {}
126
- for cur_level, cur_module_fixture_dict in self._raw_fixtures.items():
127
- resolved_dict[cur_level] = {}
128
- for cur_fn in cur_module_fixture_dict:
129
- cls, func_type = inspect_method(cur_fn)
130
- # mechanism also works for balderglob fixtures (`func_type` is 'function' and `cls` is None)
131
- if cls not in resolved_dict[cur_level].keys():
132
- resolved_dict[cur_level][cls] = []
133
- resolved_dict[cur_level][cls].append((func_type, cur_fn))
134
- return FixtureManager(resolved_dict)
135
-
136
- def get_initial_mapping(self) -> List[Tuple[Type[Setup], Type[Scenario], Dict[Device, Device]]]:
120
+ def get_initial_mapping(self) -> List[Tuple[Type[Setup], Type[Scenario], Dict[Type[Device], Type[Device]]]]:
137
121
  """
138
122
  This method creates the initial amount of data for `self._mapping`. Only those elements are returned where the
139
123
  :meth:`Setup` class has more or the same amount of :meth:`Device`'s than the :meth:`Scenario` class.
@@ -163,13 +147,44 @@ class Solver:
163
147
  This method carries out the entire resolve process and saves the end result in the object property
164
148
  `self._mapping`.
165
149
  """
166
- self._fixture_manager = self.get_fixture_manager()
167
150
  # reset mapping list
168
151
  self._mapping = []
169
152
  initial_mapping = self.get_initial_mapping()
170
153
  self._mapping = initial_mapping
171
154
  self._resolving_was_executed = True
172
155
 
156
+ def get_static_parametrized_testcase_executor_for(
157
+ self,
158
+ variation_executor: VariationExecutor,
159
+ testcase: Callable
160
+ ) -> List[UnresolvedParametrizedTestcaseExecutor | ParametrizedTestcaseExecutor]:
161
+ """
162
+ returns a list of all testcase executors, with already resolved static parametrization -
163
+ :class:`UnresolvedParametrizedTest` will be returned for unresolved dynamic parametrization
164
+
165
+ :param variation_executor: the current variation executor
166
+ :param testcase: the current testcase
167
+ """
168
+
169
+ scenario_controller = variation_executor.parent_executor.base_scenario_controller
170
+ if scenario_controller.get_parametrization_for(testcase) is None:
171
+ raise ValueError(f'can not determine parametrization for test `{testcase.__qualname__}` because no '
172
+ f'parametrization exist')
173
+ static_parametrization = scenario_controller.get_parametrization_for(testcase, static=True, dynamic=False)
174
+ executor_typ = UnresolvedParametrizedTestcaseExecutor \
175
+ if scenario_controller.get_parametrization_for(testcase, static=False, dynamic=True) \
176
+ else ParametrizedTestcaseExecutor
177
+
178
+ if not static_parametrization:
179
+ return [executor_typ(testcase, parent=variation_executor)]
180
+
181
+ # generate product
182
+ result = []
183
+ for cur_product in itertools.product(*static_parametrization.values()):
184
+ cur_product_parametrization = dict(zip(static_parametrization.keys(), cur_product))
185
+ result.append(executor_typ(testcase, variation_executor, cur_product_parametrization))
186
+ return result
187
+
173
188
  # pylint: disable-next=unused-argument
174
189
  def get_executor_tree(self, plugin_manager: PluginManager, add_discarded=False) -> ExecutorTree:
175
190
  """
@@ -204,17 +219,22 @@ class Solver:
204
219
  variation_executor = VariationExecutor(device_mapping=cur_device_mapping, parent=scenario_executor)
205
220
  variation_executor.verify_applicability()
206
221
 
222
+ if not variation_executor.can_be_applied():
223
+ continue
224
+
207
225
  scenario_executor.add_variation_executor(variation_executor)
208
- for cur_testcase in ScenarioController.get_for(cur_scenario).get_all_test_methods():
209
- cur_testcase_executor = TestcaseExecutor(cur_testcase, parent=variation_executor)
210
- variation_executor.add_testcase_executor(cur_testcase_executor)
211
-
212
- # determine prev_mark IGNORE/SKIP for the testcase
213
- if cur_testcase_executor.should_be_skipped():
214
- cur_testcase_executor.prev_mark = PreviousExecutorMark.SKIP
215
- # always overwrite if it should be ignored
216
- if cur_testcase_executor.should_be_ignored():
217
- cur_testcase_executor.prev_mark = PreviousExecutorMark.IGNORE
226
+
227
+ for cur_testcase in scenario_executor.base_scenario_controller.get_all_test_methods():
228
+ # we have a parametrization for this test case
229
+ if scenario_executor.base_scenario_controller.get_parametrization_for(cur_testcase):
230
+ testcase_executors = self.get_static_parametrized_testcase_executor_for(
231
+ variation_executor, cur_testcase
232
+ )
233
+ for cur_testcase_executor in testcase_executors:
234
+ variation_executor.add_testcase_executor(cur_testcase_executor)
235
+ else:
236
+ testcase_executor = TestcaseExecutor(cur_testcase, parent=variation_executor)
237
+ variation_executor.add_testcase_executor(testcase_executor)
218
238
 
219
239
  # now filter all elements that have no child elements
220
240
  # -> these are items that have no valid matching, because no variation can be applied for it (there are no
_balder/testresult.py CHANGED
@@ -95,7 +95,7 @@ class BranchBodyResult(_Result):
95
95
  """
96
96
 
97
97
  def __init__(self, executor: BasicExecutor):
98
- from _balder.executor.testcase_executor import TestcaseExecutor
98
+ from _balder.executor.testcase_executor import TestcaseExecutor # pylint: disable=import-outside-toplevel
99
99
 
100
100
  if isinstance(executor, TestcaseExecutor):
101
101
  raise TypeError("testcase executors are not allowed to use in `BranchBodyResult`")
_balder/utils.py CHANGED
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from typing import List, Type, Tuple, Union, Literal
2
+ from typing import List, Type, Tuple, Union, Literal, TYPE_CHECKING
3
3
 
4
4
  import sys
5
5
  import inspect
@@ -8,6 +8,10 @@ from _balder.exceptions import InheritanceError
8
8
 
9
9
  MethodLiteralType = Literal["function", "classmethod", "staticmethod", "instancemethod"]
10
10
 
11
+ if TYPE_CHECKING:
12
+ from _balder.connection import Connection
13
+ from _balder.cnnrelations.base_connection_relation import BaseConnectionRelationT
14
+
11
15
 
12
16
  def get_scenario_inheritance_list_of(scenario: Type[Scenario]) -> List[Type[Scenario]]:
13
17
  """
@@ -45,6 +49,28 @@ def get_class_that_defines_method(meth):
45
49
  return None # not required since None would have been implicitly returned anyway
46
50
 
47
51
 
52
+ def cnn_type_check_and_convert(elem: Union[Connection, Type[Connection], BaseConnectionRelationT]) \
53
+ -> Union[Connection, BaseConnectionRelationT]:
54
+ """
55
+ converts possible type object to instance and checks if the element is a connection type
56
+
57
+ :param elem: the connection object to be converted/checked
58
+ """
59
+
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
63
+
64
+ if isinstance(elem, type):
65
+ if issubclass(elem, Connection):
66
+ return elem()
67
+ elif isinstance(elem, (Connection, AndConnectionRelation, OrConnectionRelation)):
68
+ # okay
69
+ return elem
70
+ raise TypeError(f'object needs to be a `Connection`, a connection relation or a `Type[Connection]` - no '
71
+ f'`{elem}`')
72
+
73
+
48
74
  def inspect_method(func) -> Tuple[Union[type, None], MethodLiteralType]:
49
75
  """
50
76
  This helper function returns the related class and the type of the method (`staticmethod`, `classmethod`,
balder/__init__.py CHANGED
@@ -13,6 +13,8 @@ from _balder.decorator_connect import connect
13
13
  from _balder.decorator_covered_by import covered_by
14
14
  from _balder.decorator_for_vdevice import for_vdevice
15
15
  from _balder.decorator_insert_into_tree import insert_into_tree
16
+ from _balder.decorator_parametrize import parametrize
17
+ from _balder.decorator_parametrize_by_feature import parametrize_by_feature
16
18
 
17
19
 
18
20
  __all__ = [
@@ -30,6 +32,10 @@ __all__ = [
30
32
 
31
33
  'covered_by',
32
34
 
35
+ 'parametrize',
36
+
37
+ 'parametrize_by_feature',
38
+
33
39
  'Setup',
34
40
 
35
41
  'Device',
balder/exceptions.py CHANGED
@@ -1,12 +1,12 @@
1
1
  from _balder.exceptions import BalderException, BalderWarning
2
- from _balder.exceptions import FixtureScopeError, FixtureReferenceError, UnclearSetupScopedFixtureReference, \
2
+ from _balder.exceptions import (FixtureScopeError, FixtureReferenceError, UnclearSetupScopedFixtureReference, \
3
3
  UnclearUniqueClassReference, LostInExecutorTreeException, DeviceResolvingException, NodeNotExistsError, \
4
4
  DuplicateForVDeviceError, DuplicateBalderSettingError, DeviceOverwritingError, VDeviceOverwritingError, \
5
5
  AccessToUnmappedVDeviceException, FeatureOverwritingError, UnknownVDeviceException, RoutingBrokenChainError, \
6
6
  IllegalConnectionTypeError, ConnectionMetadataConflictError, DeviceScopeError, ConnectionIntersectionError, \
7
7
  UnclearAssignableFeatureConnectionError, InheritanceError, MultiInheritanceError, InnerFeatureResolvingError, \
8
- VDeviceResolvingError, IllegalVDeviceMappingError, NotApplicableVariationException, UnclearMethodVariationError, \
9
- UnexpectedPluginMethodReturnValue
8
+ VDeviceResolvingError, IllegalVDeviceMappingError, MissingFeaturesOfVDeviceError, NotApplicableVariationException, \
9
+ UnclearMethodVariationError, UnexpectedPluginMethodReturnValue)
10
10
 
11
11
  __all__ = [
12
12
 
@@ -37,6 +37,7 @@ __all__ = [
37
37
  "InnerFeatureResolvingError",
38
38
  "VDeviceResolvingError",
39
39
  "IllegalVDeviceMappingError",
40
+ "MissingFeaturesOfVDeviceError",
40
41
  "NotApplicableVariationException",
41
42
  "UnclearMethodVariationError",
42
43
  "UnexpectedPluginMethodReturnValue",
@@ -0,0 +1,8 @@
1
+ from _balder.parametrization import FeatureAccessSelector, Parameter, Value
2
+
3
+
4
+ __all__ = [
5
+ 'FeatureAccessSelector',
6
+ 'Parameter',
7
+ 'Value'
8
+ ]
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: baldertest
3
- Version: 0.1.0b9
3
+ Version: 0.1.0b11
4
4
  Summary: balder: reusable scenario based test framework
5
5
  Home-page: https://docs.balder.dev
6
6
  Author: Max Stahlschmidt and others
@@ -0,0 +1,83 @@
1
+ _balder/__init__.py,sha256=Qk4wkVInPlXLFV36Yco5K7PDawJoeeWQVakzj6g5pmA,195
2
+ _balder/_version.py,sha256=fgSwP5K0NJOmhZpDfiqSUfFysLGqMES9LZQlLZ92X9Q,414
3
+ _balder/balder_plugin.py,sha256=EQzJP1dwwVDydhMLJtAmTCXOczlDuXBJur05lalmK_k,3136
4
+ _balder/balder_session.py,sha256=ezT86gC_VzPQZOQ4r5qQ75IEm6rXZHiIpEqZDczkRsE,16149
5
+ _balder/balder_settings.py,sha256=U96PVep7dGSaTXrMfeZMYf6oCIcEDPEqrBlFcoX476s,582
6
+ _balder/collector.py,sha256=uymS7CwymrZNxzKDG9_kPOK7HGKtnX3FNwX7Dk2LuC0,47567
7
+ _balder/connection.py,sha256=j6wI7m3h23q9aCApRDmLyeerxUXQ0j267v4FgjP4p6E,41770
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
11
+ _balder/decorator_fixture.py,sha256=vVd3pXVWEaaVP2rxgW4nKoskmDByafHuSFHC0v_LMoI,1045
12
+ _balder/decorator_for_vdevice.py,sha256=adEzLc0otuvCpj2TntuJWMQX_mq2oLtYRXFFbIhQVYo,5917
13
+ _balder/decorator_gateway.py,sha256=Qa8Cjm50I1OSHhADU8LmeSQh2QSuH9qGRuedWAlLfu4,1381
14
+ _balder/decorator_insert_into_tree.py,sha256=l3nkaTzKzt3TIFYLJoehYwT3xxRRNz83fq8JhvR6DfQ,2069
15
+ _balder/decorator_parametrize.py,sha256=lHxADbHZVnWOhvQTUQgaYU1hQ8NF3ghMU57Z3r_oWVE,912
16
+ _balder/decorator_parametrize_by_feature.py,sha256=r0iySfWcFxXIVu0BNWIRU_E6_o2-lSzpL5aUifoqiyU,1381
17
+ _balder/device.py,sha256=5O3tqj_iLKfHb5Zi_viJ76VH82cMOzX58OzRrMRRv0k,833
18
+ _balder/exceptions.py,sha256=_zQFUK4kYKaVGUtH9IcH0q-GOyBb9qzqSU6BOsUnG7Y,4375
19
+ _balder/exit_code.py,sha256=P0oFWKfjMo36Frv13ADRcm8eSPN3kE-WmZBE9qZJHdA,513
20
+ _balder/feature.py,sha256=Da6BP4H1X0eKm0DyQKRdSnrQeqV8QeCFE4JybI_wYSc,3888
21
+ _balder/fixture_definition_scope.py,sha256=0MP0U2fcM9iS28Ytkfuu3TzZ4cUNG5u81GBWGBm9ucw,709
22
+ _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/node_gateway.py,sha256=64mv7Nx82JVknnQ09UXC-AcdDl6i_OB6NOsq_uBxeYo,4710
26
+ _balder/parametrization.py,sha256=SnaGeGpf7-5H-y107CBDx5V-onX-oiLS1KU1IquZwcU,2678
27
+ _balder/plugin_manager.py,sha256=Ev2jnx4NtFHDsZ3C6h0HrJtQisqLO-V34JRM3wzTnFM,6921
28
+ _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
32
+ _balder/solver.py,sha256=NbpAdvrGWdJTY6eZmNZFr7YDubyggY0yW64rDB3JkT0,13121
33
+ _balder/testresult.py,sha256=Tm5m0Rnpn3JgdQp22izsMIPoVxRU0ngJjUuS73eRboM,6826
34
+ _balder/unmapped_vdevice.py,sha256=oKr01YVTLViWtZkYz8kx8ccTx-KmwgNrHuQqqD4eLQw,513
35
+ _balder/utils.py,sha256=7bfjap7KKpFaRFusCimMpk-UYR4X1LR-pdA_q7DN28E,4271
36
+ _balder/vdevice.py,sha256=fc2xuMnTuN1RyfWh9mqFgLdSO9yGA75eERobTXUQ9JA,215
37
+ _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
40
+ _balder/cnnrelations/or_connection_relation.py,sha256=hPqC86qXRRgaOA6SeIzGnqxY6zd9OJ1KU5jwKbERo7s,2730
41
+ _balder/console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ _balder/console/balder.py,sha256=rF1qgW6h35hKqGijGbZgGD2_y0Sd9Mbs_EXF2v_EUCk,2581
43
+ _balder/controllers/__init__.py,sha256=UNb6QzMj4TqPI15OSvXyUJlA-NSai0CKkQhV5JIsba0,570
44
+ _balder/controllers/base_device_controller.py,sha256=g-vY2SqKFUC9yGOvHLfbdmILT3sK2YyaWKSfvTRcC0o,3174
45
+ _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
50
+ _balder/controllers/setup_controller.py,sha256=1jX_K_7iHQ2jWBZv-urC0_9lCi4RjrwxvtW7oWMVb7s,7082
51
+ _balder/controllers/vdevice_controller.py,sha256=6-PidCKgvUteZVJsbGkKX69f3cYYYnolONl5Gja16W8,5777
52
+ _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
62
+ _balder/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ _balder/objects/connections/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
+ _balder/objects/connections/osi_1_physical.py,sha256=74lKWJd6ETEtvNXH0_dmTbkZlStJ_af218pQkUht0aA,2189
65
+ _balder/objects/connections/osi_2_datalink.py,sha256=0k1imyx6x_YeSvtf5CG27rcLeDzpmz76DUbjWyIGJqg,875
66
+ _balder/objects/connections/osi_3_network.py,sha256=7s4gEYxR38LE3yUTPoDaYT6kJiWBQdcU9OBFO29E2j0,1175
67
+ _balder/objects/connections/osi_4_transport.py,sha256=9INPME_TWiZQ9rXUzIV__yOPsLQXcdf-7F336WijFOo,983
68
+ _balder/objects/connections/osi_5_session.py,sha256=cMSIBMGk80VSgmFdqWaYI3HQLOvJHi4uTaqDMqWaU5Q,390
69
+ _balder/objects/connections/osi_6_presentation.py,sha256=zCQXocR14CC8rFONFHUethvsoHh4b92e0CC3nLDqNZs,394
70
+ _balder/objects/connections/osi_7_application.py,sha256=VPTlKKCEd9FFusce2wVbScIBPzpikPQtpSPE7PHxMUI,2304
71
+ _balder/objects/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
+ _balder/objects/devices/this_device.py,sha256=Ah0UNIqgUbtZ_B85fROjKbQS-NTDH1F3gscshB8UBsc,442
73
+ balder/__init__.py,sha256=PvPDJT9-mnDt3PuidCkPM6mB6wvcETIoINld3Jt1TUU,1184
74
+ balder/connections.py,sha256=H6rf7UsiVY_FeZLngZXCT9WDw9cQqpiDiPbz_0J4yjM,2331
75
+ balder/devices.py,sha256=zupHtz8yaiEjzR8CrvgZU-RzsDQcZFeN5mObfhtjwSw,173
76
+ balder/exceptions.py,sha256=iaR4P2L7K3LggYSDnjCGLheZEaGgnMilxDQdoYD5KHQ,1954
77
+ 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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.1.1)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,68 +0,0 @@
1
- _balder/__init__.py,sha256=Qk4wkVInPlXLFV36Yco5K7PDawJoeeWQVakzj6g5pmA,195
2
- _balder/_version.py,sha256=xdDxoDc8nbJHb9-aJOnXPcJO9u_wtajm1m932_7HjoI,413
3
- _balder/balder_plugin.py,sha256=EQzJP1dwwVDydhMLJtAmTCXOczlDuXBJur05lalmK_k,3136
4
- _balder/balder_session.py,sha256=WPOcarZQhTzMeAQt-hRqI8GtXN5TdMIqzyhgYD2h4rw,16079
5
- _balder/balder_settings.py,sha256=U96PVep7dGSaTXrMfeZMYf6oCIcEDPEqrBlFcoX476s,582
6
- _balder/collector.py,sha256=T_7LO8ZNty8EyOmM-U-uhU9-umdAv1fbuMVNjQWUwj0,42156
7
- _balder/connection.py,sha256=MNazK97CIEJCA4o1krjKjtilVhOYMWD8TZT0YT5nCJs,71778
8
- _balder/decorator_connect.py,sha256=TvyJNIslBAYVQWhsfSeFgXKp_DP7sZF1BmcP6RhIdKo,5988
9
- _balder/decorator_covered_by.py,sha256=Y6WMUuyn_uvFkjGfbts8OE5Bsir_7LTRB-jxYGaYk4Y,4069
10
- _balder/decorator_fixture.py,sha256=Nvr3H-r8LlPiGSGEst3D1M-KQaBqSA1u1u13qzZrSwk,1138
11
- _balder/decorator_for_vdevice.py,sha256=j92TNH6kAz6jtQhOPcNszzmEAWezEFbX8KAh3HaNvSU,6643
12
- _balder/decorator_gateway.py,sha256=w6-1UFh8ydt81U6ymGxeBUFAIh2aaZ3U9pHpEANMlj8,1284
13
- _balder/decorator_insert_into_tree.py,sha256=l3nkaTzKzt3TIFYLJoehYwT3xxRRNz83fq8JhvR6DfQ,2069
14
- _balder/device.py,sha256=5O3tqj_iLKfHb5Zi_viJ76VH82cMOzX58OzRrMRRv0k,833
15
- _balder/exceptions.py,sha256=d0YSw8zVax2bFakG_1hcLlAXlyQh5jXnOuIPL1HLfI4,4202
16
- _balder/exit_code.py,sha256=P0oFWKfjMo36Frv13ADRcm8eSPN3kE-WmZBE9qZJHdA,513
17
- _balder/feature.py,sha256=B3yPc-WZwLt1Q4dO9s2j9g1MBTcMBjn6oWoLnRgrwSs,3845
18
- _balder/fixture_manager.py,sha256=_fJZAaBK8Pej96juvdkigi7rjKJ-RTbfxhkSs78OBvg,28656
19
- _balder/node_gateway.py,sha256=64mv7Nx82JVknnQ09UXC-AcdDl6i_OB6NOsq_uBxeYo,4710
20
- _balder/plugin_manager.py,sha256=Ev2jnx4NtFHDsZ3C6h0HrJtQisqLO-V34JRM3wzTnFM,6921
21
- _balder/previous_executor_mark.py,sha256=gwpGu7d-kwPzQT8CmaPfuEG6fess2Upf5Q-zX6Oi6NY,835
22
- _balder/routing_path.py,sha256=6MJkhzBTHow2ESXzKQ2otwRFbPcKhLTYVy-zh7c5HeE,17172
23
- _balder/scenario.py,sha256=ATowBUl2HYQBmJHZ-eBpliqjPsWPnZAme9kwIeX3Tak,840
24
- _balder/setup.py,sha256=zSgtzNIWTVBjiZ5mn-qfpqIAnP3Im73t3Lqoaw0gWEI,763
25
- _balder/solver.py,sha256=qgcCRyLg3nsO2d3H0pukxmm2oe_h6t0pBGyZ-FgQYKc,11998
26
- _balder/testresult.py,sha256=byJD3F84TNH40k30pjnxeLHXAAE-lqbVlk1JOSBtdNo,6783
27
- _balder/unmapped_vdevice.py,sha256=oKr01YVTLViWtZkYz8kx8ccTx-KmwgNrHuQqqD4eLQw,513
28
- _balder/utils.py,sha256=2kcX6bZIJW9Z8g-Hv0ue2mdOLBQYq4T2XSZpH2in1MQ,3092
29
- _balder/vdevice.py,sha256=fc2xuMnTuN1RyfWh9mqFgLdSO9yGA75eERobTXUQ9JA,215
30
- _balder/console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- _balder/console/balder.py,sha256=0Ezl6KMXqmayLweyj6wLDctuq2JWs52UA6DxO_HmkDc,2539
32
- _balder/controllers/__init__.py,sha256=UNb6QzMj4TqPI15OSvXyUJlA-NSai0CKkQhV5JIsba0,570
33
- _balder/controllers/base_device_controller.py,sha256=g-vY2SqKFUC9yGOvHLfbdmILT3sK2YyaWKSfvTRcC0o,3174
34
- _balder/controllers/controller.py,sha256=XGRE5LKWxxftEf-bZODvKxXwULu09iG131wMwRoz4Fk,803
35
- _balder/controllers/device_controller.py,sha256=bT8c0_9UmrAmzuZ-dsleSnw2pIppfITDG4ttEZjWlC8,23477
36
- _balder/controllers/feature_controller.py,sha256=jaIbKbiEOdYRpYWuGdaByQBtlThK-u7OAr_xYhAfnEg,43737
37
- _balder/controllers/normal_scenario_setup_controller.py,sha256=cF2U-tC3LEyWdZDqZP_mN3Q_7uIzg9jiY_J--Pi5kk8,21877
38
- _balder/controllers/scenario_controller.py,sha256=gpN_wxEYcHlh6DVk7pRbPj_x2cmM6iIAskcpLstQo2g,17973
39
- _balder/controllers/setup_controller.py,sha256=iNIMFjawYJWaSToUUfpmRK6ssycPyZGNlcvms8c7GKM,7135
40
- _balder/controllers/vdevice_controller.py,sha256=6-PidCKgvUteZVJsbGkKX69f3cYYYnolONl5Gja16W8,5777
41
- _balder/executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
- _balder/executor/basic_executor.py,sha256=PYuQ1TKXKnbnQirCmayjDSyPyBmqJws1HWqkHmGKZtw,11137
43
- _balder/executor/executor_tree.py,sha256=nEZ2bwWuayPZQrGSucFiDzuFSrYDnUVzqnVCtDLq2Ys,10439
44
- _balder/executor/scenario_executor.py,sha256=3j5lAFCA4zCxhivjMPFGlWMi_ieZGkdwnZ_JQoAt4Rw,11094
45
- _balder/executor/setup_executor.py,sha256=FsPTPsXZMoVB7xibEpCcwjC-BpkfGVZmx5lVbuebduw,8326
46
- _balder/executor/testcase_executor.py,sha256=jNfACO-AuOktIgCVcsavh0rHbUr5MmI-jML-LPMvo0w,6639
47
- _balder/executor/variation_executor.py,sha256=Ms8dfZPIL5-sYzMg2c1-WANDz8ZBHqNHXgegDobm7Gg,53106
48
- _balder/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- _balder/objects/connections/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- _balder/objects/connections/osi_1_physical.py,sha256=74lKWJd6ETEtvNXH0_dmTbkZlStJ_af218pQkUht0aA,2189
51
- _balder/objects/connections/osi_2_datalink.py,sha256=0k1imyx6x_YeSvtf5CG27rcLeDzpmz76DUbjWyIGJqg,875
52
- _balder/objects/connections/osi_3_network.py,sha256=qbDAIdgvQu7gs_BTYKeWug3bSWLVDPX2-W57I5Tygw0,1173
53
- _balder/objects/connections/osi_4_transport.py,sha256=dXp4pbEK6VW9FaKQbH1utEEfut-XwlwEX0h2xVSts3k,981
54
- _balder/objects/connections/osi_5_session.py,sha256=cMSIBMGk80VSgmFdqWaYI3HQLOvJHi4uTaqDMqWaU5Q,390
55
- _balder/objects/connections/osi_6_presentation.py,sha256=zCQXocR14CC8rFONFHUethvsoHh4b92e0CC3nLDqNZs,394
56
- _balder/objects/connections/osi_7_application.py,sha256=VPTlKKCEd9FFusce2wVbScIBPzpikPQtpSPE7PHxMUI,2304
57
- _balder/objects/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
- _balder/objects/devices/this_device.py,sha256=Ah0UNIqgUbtZ_B85fROjKbQS-NTDH1F3gscshB8UBsc,442
59
- balder/__init__.py,sha256=BfbdkW_CZCXWGqtdg1gpAjO0AY8b4h-P-flWsIMG-X0,1003
60
- balder/connections.py,sha256=H6rf7UsiVY_FeZLngZXCT9WDw9cQqpiDiPbz_0J4yjM,2331
61
- balder/devices.py,sha256=zupHtz8yaiEjzR8CrvgZU-RzsDQcZFeN5mObfhtjwSw,173
62
- balder/exceptions.py,sha256=z_vlipJIsFwwJy9Ae_oGDJGPTINiAInMNZuCvEy6SUE,1884
63
- baldertest-0.1.0b9.dist-info/LICENSE,sha256=Daz9qTpqbiq-klWb2Q9lYOmn3rJ5oIQnbs62sGcqOZ4,1084
64
- baldertest-0.1.0b9.dist-info/METADATA,sha256=HzdUqwAR2FIIYoAWg6RxXoFOJzUOqpkxcA7q-V3SHbM,15783
65
- baldertest-0.1.0b9.dist-info/WHEEL,sha256=mguMlWGMX-VHnMpKOjjQidIo1ssRlCFu4a4mBpz1s2M,91
66
- baldertest-0.1.0b9.dist-info/entry_points.txt,sha256=hzqu_nrMKTCi5IJqzS1fhIXWEiL7mTGZ-kgj2lUYlRU,65
67
- baldertest-0.1.0b9.dist-info/top_level.txt,sha256=RUkIBkNLqHMemx2C9aEpoS65dpqb6_jU-oagIPxGQEA,15
68
- baldertest-0.1.0b9.dist-info/RECORD,,