testbench2robotframework 0.9.1a2__tar.gz → 0.9.2a1__tar.gz
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.
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/PKG-INFO +1 -1
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/__init__.py +1 -1
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/config.py +2 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/model.py +39 -9
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/result_writer.py +7 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/testbench2rf.py +25 -17
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/utils.py +19 -52
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/.gitignore +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/CreatePiPWheel.bat +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/CreatePiPWheel.sh +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/DEVELOPMENT.md +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/ExampleConfiguration/json_config.json +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/ExampleConfiguration/pyproject_example.toml +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/ExampleConfiguration/toml_config.toml +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/LICENSE +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/MANIFEST.in +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/README.md +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/README_old.md +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/atest/json_config_tests/1_tfs.robot +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/atest/robot/libs/json_config.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/atest/robot/libs/pyproject_config.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/atest/robot/resources/file_management.resource +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/atest/robot/resources/testbench2robotframework_cli.resource +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/atest/robot/rf_tests/cli_interface/write/json_config.robot +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/atest/robot/rf_tests/cli_interface/write/no_config_argument.robot +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/atest/robot/rf_tests/cli_interface/write/toml_config.robot +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/create_json_schema.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/images/LibrarySubdivision.PNG +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/images/Unbenannt.PNG +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/images/generated.png +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/images/libraries.PNG +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/images/resources.PNG +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/images/rfLibraryRootsTestBench.PNG +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/images/testbench_rfLibraryRegex.PNG +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/images/testbench_rfResourceRegex.PNG +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/images/testthemen.PNG +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/oldModel.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/pydantic_model.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/pyproject.toml +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/requirements.txt +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/robot.toml +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/tasks.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench-tools.zip +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/__main__.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/cli.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/execution_artifacts.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/html_parser.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/json_reader.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/json_writer.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/log.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/model_utils.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/robotframework2testbench.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/testbench2robotframework.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/testbench2robotframework/testsuite_write.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/tests/test_data/configurations/invalid_config.json +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/tests/test_data/configurations/valid_config.json +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/tests/test_missing_files.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/tests/test_robot_files_should_not_contain_invalid_characters.py +0 -0
- {testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/tests/test_zip_file_generation.py +0 -0
|
@@ -60,6 +60,8 @@ def find_private_robot_toml() -> Path:
|
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
def get_testbench2robotframework_toml_dict(toml_path: Path):
|
|
63
|
+
if not toml_path or not toml_path.is_file():
|
|
64
|
+
return {}
|
|
63
65
|
try:
|
|
64
66
|
with Path(toml_path).open("rb") as toml_file:
|
|
65
67
|
toml_dict = tomllib.load(toml_file)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: openapi.yml
|
|
3
|
-
# timestamp: 2025-
|
|
3
|
+
# timestamp: 2025-12-15T08:54:07+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -505,7 +505,7 @@ class TOVResponse:
|
|
|
505
505
|
|
|
506
506
|
|
|
507
507
|
@dataclass
|
|
508
|
-
class
|
|
508
|
+
class OptionalLocalDate:
|
|
509
509
|
optional: Optional[str] = None
|
|
510
510
|
|
|
511
511
|
|
|
@@ -993,6 +993,7 @@ class TestCaseSpecification(TestStructureSpecification):
|
|
|
993
993
|
class TestStructureItemBaseInformation:
|
|
994
994
|
key: str
|
|
995
995
|
numbering: str
|
|
996
|
+
path: str
|
|
996
997
|
parentKey: str
|
|
997
998
|
name: str
|
|
998
999
|
uniqueID: str
|
|
@@ -1128,6 +1129,7 @@ class TestThemeDetails:
|
|
|
1128
1129
|
name: str
|
|
1129
1130
|
uniqueID: str
|
|
1130
1131
|
numbering: str
|
|
1132
|
+
path: str
|
|
1131
1133
|
spec: TestThemeSpecification
|
|
1132
1134
|
exec: Optional[TestThemeExecution] = None
|
|
1133
1135
|
|
|
@@ -1403,6 +1405,19 @@ class DefaultValue:
|
|
|
1403
1405
|
valueType: ArgumentValueType
|
|
1404
1406
|
|
|
1405
1407
|
|
|
1408
|
+
@dataclass
|
|
1409
|
+
class SubdivisionDetails:
|
|
1410
|
+
key: str
|
|
1411
|
+
name: str
|
|
1412
|
+
uniqueID: str
|
|
1413
|
+
description: str
|
|
1414
|
+
path: str
|
|
1415
|
+
references: List[str]
|
|
1416
|
+
locker: Optional[UserReference] = None
|
|
1417
|
+
parentUniqueID: Optional[str] = None
|
|
1418
|
+
libraryKey: Optional[str] = None
|
|
1419
|
+
|
|
1420
|
+
|
|
1406
1421
|
@dataclass
|
|
1407
1422
|
class KeywordParameterForInsert:
|
|
1408
1423
|
name: str
|
|
@@ -1767,6 +1782,20 @@ class KeywordForInsert:
|
|
|
1767
1782
|
callType: Optional[KeywordCallType] = None
|
|
1768
1783
|
|
|
1769
1784
|
|
|
1785
|
+
@dataclass
|
|
1786
|
+
class SubdivisionForInsert:
|
|
1787
|
+
name: str
|
|
1788
|
+
parentKey: Optional[str] = None
|
|
1789
|
+
uid: Optional[str] = None
|
|
1790
|
+
description: Optional[RichTextInfo] = None
|
|
1791
|
+
|
|
1792
|
+
|
|
1793
|
+
@dataclass
|
|
1794
|
+
class SubdivisionForUpdate:
|
|
1795
|
+
name: Optional[str] = None
|
|
1796
|
+
description: Optional[RichTextInfo] = None
|
|
1797
|
+
|
|
1798
|
+
|
|
1770
1799
|
@dataclass
|
|
1771
1800
|
class KeywordDetailsForUpdate:
|
|
1772
1801
|
name: Optional[str] = None
|
|
@@ -1782,7 +1811,7 @@ class SpecificationDetailsForUpdate:
|
|
|
1782
1811
|
reviewer: Optional[OptionalUser] = None
|
|
1783
1812
|
locker: Optional[OptionalUser] = None
|
|
1784
1813
|
priority: Optional[Priority] = None
|
|
1785
|
-
dueDate: Optional[
|
|
1814
|
+
dueDate: Optional[OptionalLocalDate] = None
|
|
1786
1815
|
description: Optional[RichTextInfo] = None
|
|
1787
1816
|
reviewComment: Optional[RichTextInfo] = None
|
|
1788
1817
|
|
|
@@ -1801,8 +1830,8 @@ class ProjectDetailsForUpdate:
|
|
|
1801
1830
|
isVisibleToTester: Optional[bool] = None
|
|
1802
1831
|
isTestingIntelligenceActive: Optional[bool] = None
|
|
1803
1832
|
description: Optional[RichTextInfo] = None
|
|
1804
|
-
startDate: Optional[
|
|
1805
|
-
endDate: Optional[
|
|
1833
|
+
startDate: Optional[OptionalLocalDate] = None
|
|
1834
|
+
endDate: Optional[OptionalLocalDate] = None
|
|
1806
1835
|
inspections: Optional[List[str]] = None
|
|
1807
1836
|
variantsManagementEnabled: Optional[OperationalState] = None
|
|
1808
1837
|
|
|
@@ -1810,13 +1839,13 @@ class ProjectDetailsForUpdate:
|
|
|
1810
1839
|
@dataclass
|
|
1811
1840
|
class TOVForUpdate:
|
|
1812
1841
|
name: Optional[str] = None
|
|
1813
|
-
endDate: Optional[
|
|
1842
|
+
endDate: Optional[OptionalLocalDate] = None
|
|
1814
1843
|
visible: Optional[bool] = None
|
|
1815
1844
|
description: Optional[RichTextInfo] = None
|
|
1816
1845
|
isBaseTov: Optional[bool] = None
|
|
1817
1846
|
status: Optional[ProjectStatus] = None
|
|
1818
1847
|
testingIntelligence: Optional[bool] = None
|
|
1819
|
-
startDate: Optional[
|
|
1848
|
+
startDate: Optional[OptionalLocalDate] = None
|
|
1820
1849
|
cloningVisibility: Optional[bool] = None
|
|
1821
1850
|
|
|
1822
1851
|
|
|
@@ -1824,6 +1853,7 @@ class TOVForUpdate:
|
|
|
1824
1853
|
class TestCaseSetDetails:
|
|
1825
1854
|
key: str
|
|
1826
1855
|
numbering: str
|
|
1856
|
+
path: str
|
|
1827
1857
|
uniqueID: str
|
|
1828
1858
|
name: str
|
|
1829
1859
|
spec: TestCaseSetSpecificationSummary
|
|
@@ -1848,9 +1878,9 @@ class TestCaseDetails:
|
|
|
1848
1878
|
@dataclass
|
|
1849
1879
|
class CycleForUpdate:
|
|
1850
1880
|
name: Optional[str] = None
|
|
1851
|
-
endDate: Optional[
|
|
1881
|
+
endDate: Optional[OptionalLocalDate] = None
|
|
1852
1882
|
visible: Optional[bool] = None
|
|
1853
1883
|
description: Optional[RichTextInfo] = None
|
|
1854
1884
|
status: Optional[ProjectStatus] = None
|
|
1855
1885
|
testingIntelligence: Optional[bool] = None
|
|
1856
|
-
startDate: Optional[
|
|
1886
|
+
startDate: Optional[OptionalLocalDate] = None
|
|
@@ -160,6 +160,13 @@ class ResultWriter(ResultVisitor):
|
|
|
160
160
|
self._set_compound_keyword_execution_verdict(
|
|
161
161
|
keyword, itb_test_case.testSequence
|
|
162
162
|
)
|
|
163
|
+
textual_interactions = list(
|
|
164
|
+
self._get_interactions_by_type(itb_test_case.interactions, KeywordType.Textual)
|
|
165
|
+
)
|
|
166
|
+
for step in textual_interactions:
|
|
167
|
+
if step.exec is None:
|
|
168
|
+
step.exec = KeywordCallExecution.from_dict({})
|
|
169
|
+
step.exec.verdict = KeywordVerdict.Skipped
|
|
163
170
|
self._set_itb_testcase_execution_result(itb_test_case, self.test_chain)
|
|
164
171
|
self._set_itb_testcase_execution_comment(itb_test_case, self.test_chain)
|
|
165
172
|
self._set_itb_testcase_references(itb_test_case, self.test_chain)
|
|
@@ -20,18 +20,22 @@ from robot.parsing.model.blocks import (
|
|
|
20
20
|
from robot.parsing.model.statements import (
|
|
21
21
|
Comment,
|
|
22
22
|
EmptyLine,
|
|
23
|
-
KeywordCall as RFKeywordCall,
|
|
24
23
|
LibraryImport,
|
|
25
24
|
Metadata,
|
|
26
25
|
ResourceImport,
|
|
27
26
|
SectionHeader,
|
|
28
27
|
Setup,
|
|
29
28
|
Statement,
|
|
30
|
-
Tags as RFTags,
|
|
31
29
|
Teardown,
|
|
32
30
|
TestCaseName,
|
|
33
31
|
VariablesImport,
|
|
34
32
|
)
|
|
33
|
+
from robot.parsing.model.statements import (
|
|
34
|
+
KeywordCall as RFKeywordCall,
|
|
35
|
+
)
|
|
36
|
+
from robot.parsing.model.statements import (
|
|
37
|
+
Tags as RFTags,
|
|
38
|
+
)
|
|
35
39
|
|
|
36
40
|
from testbench2robotframework.utils import robot_tag_from_udf
|
|
37
41
|
|
|
@@ -45,6 +49,8 @@ from .json_reader import TestCaseSet
|
|
|
45
49
|
from .log import logger
|
|
46
50
|
from .model import (
|
|
47
51
|
KeywordCall as TBKeywordCall,
|
|
52
|
+
)
|
|
53
|
+
from .model import (
|
|
48
54
|
KeywordDetails,
|
|
49
55
|
KeywordType,
|
|
50
56
|
ParameterEvaluationType,
|
|
@@ -825,21 +831,23 @@ class RobotSuiteFileBuilder:
|
|
|
825
831
|
setting_section.body.extend(self._create_rf_resource_imports(subdivisions))
|
|
826
832
|
setting_section.body.extend(self._create_rf_unknown_imports(subdivisions))
|
|
827
833
|
setting_section_meta_data = self.test_case_set.metadata
|
|
828
|
-
for md_name, md_expression in self.config.metadata.items():
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
834
|
+
# for md_name, md_expression in self.config.metadata.items():
|
|
835
|
+
# try:
|
|
836
|
+
# md_expression = re.sub(r"\$tcs", "tcs", md_expression)
|
|
837
|
+
# for match in re.finditer(r"(\{[^}]*\})", md_expression):
|
|
838
|
+
# re.sub() = safe_eval(
|
|
839
|
+
# md_expression, {"tcs": self.test_case_set.details}
|
|
840
|
+
# )
|
|
841
|
+
# print(match.group(1))
|
|
842
|
+
# setting_section_meta_data[md_name] = str(md_expression)
|
|
843
|
+
# except ValueError as ve:
|
|
844
|
+
# logger.warning(
|
|
845
|
+
# f"Value '{md_expression}' from the custom metadata setting could not be evaluated: {ve}"
|
|
846
|
+
# )
|
|
847
|
+
# except Exception as e:
|
|
848
|
+
# logger.error(
|
|
849
|
+
# f"Error while evaluating the custom metadata setting '{md_expression}': {e}"
|
|
850
|
+
# )
|
|
843
851
|
setting_section.body.extend(
|
|
844
852
|
[
|
|
845
853
|
create_meta_data(metadata_name, metadata_value)
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import ast
|
|
2
1
|
import re
|
|
3
2
|
import shutil
|
|
4
3
|
import sys
|
|
5
4
|
from pathlib import Path, PurePath
|
|
6
5
|
from typing import Optional
|
|
7
6
|
from zipfile import ZipFile
|
|
8
|
-
from .log import logger
|
|
9
7
|
|
|
10
8
|
from testbench2robotframework.model import (
|
|
11
9
|
RootNode,
|
|
@@ -18,6 +16,8 @@ from testbench2robotframework.model import (
|
|
|
18
16
|
UserDefinedField,
|
|
19
17
|
)
|
|
20
18
|
|
|
19
|
+
from .log import logger
|
|
20
|
+
|
|
21
21
|
|
|
22
22
|
def robot_tag_from_udf(udf: UserDefinedField) -> Optional[str]:
|
|
23
23
|
if (udf.udfType == UDFType.Enumeration and udf.value) or (
|
|
@@ -88,7 +88,7 @@ class PathResolver:
|
|
|
88
88
|
self.tt_catalog[tse.base.uniqueID] = tse
|
|
89
89
|
|
|
90
90
|
def _file_prefix(self, tse) -> str:
|
|
91
|
-
prefix_separator = "_" * self._log_suite_numbers
|
|
91
|
+
prefix_separator = "_" * (not self._log_suite_numbers)
|
|
92
92
|
return f"{self._get_padded_index(tse)}_{prefix_separator}"
|
|
93
93
|
|
|
94
94
|
def _get_padded_index(self, tse) -> str:
|
|
@@ -97,55 +97,22 @@ class PathResolver:
|
|
|
97
97
|
return index.zfill(max_length)
|
|
98
98
|
|
|
99
99
|
|
|
100
|
-
def safe_eval(expr: str, names: dict):
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
ast.FormattedValue,
|
|
117
|
-
ast.BinOp,
|
|
118
|
-
ast.UnaryOp,
|
|
119
|
-
ast.Compare,
|
|
120
|
-
ast.BoolOp,
|
|
121
|
-
ast.Eq,
|
|
122
|
-
ast.NotEq,
|
|
123
|
-
ast.Gt,
|
|
124
|
-
ast.Lt,
|
|
125
|
-
ast.GtE,
|
|
126
|
-
ast.LtE,
|
|
127
|
-
ast.In,
|
|
128
|
-
ast.And,
|
|
129
|
-
ast.Or,
|
|
130
|
-
ast.Not,
|
|
131
|
-
ast.Add,
|
|
132
|
-
ast.Sub,
|
|
133
|
-
ast.Mult,
|
|
134
|
-
ast.Div,
|
|
135
|
-
ast.Mod,
|
|
136
|
-
ast.Store,
|
|
137
|
-
ast.keyword,
|
|
138
|
-
)
|
|
139
|
-
for node in ast.walk(tree):
|
|
140
|
-
if not isinstance(node, allowed_nodes):
|
|
141
|
-
raise ValueError(f"Disallowed expression: {type(node).__name__}")
|
|
142
|
-
if isinstance(node, ast.Attribute) and node.attr.startswith("_"):
|
|
143
|
-
raise ValueError(f"Access to private attribute {node.attr} is not allowed")
|
|
144
|
-
if isinstance(node, ast.Name) and node.id == "__import__":
|
|
145
|
-
raise ValueError("Use of __import__ is forbidden")
|
|
146
|
-
|
|
147
|
-
code = compile(tree, "<safe_eval>", "eval")
|
|
148
|
-
return eval(code, {"__builtins__": {}}, names)
|
|
100
|
+
# def safe_eval(expr: str, names: dict):
|
|
101
|
+
# tree = ast.parse(expr, mode="eval")
|
|
102
|
+
# def resolve(node):
|
|
103
|
+
# if isinstance(node, ast.Name):
|
|
104
|
+
# if node.id not in names:
|
|
105
|
+
# raise ValueError(f"Unknown name: {node.id}")
|
|
106
|
+
# return names[node.id]
|
|
107
|
+
# if isinstance(node, ast.Attribute):
|
|
108
|
+
# if node.attr.startswith("_"):
|
|
109
|
+
# raise ValueError("Private attributes are forbidden")
|
|
110
|
+
# value = resolve(node.value)
|
|
111
|
+
# return getattr(value, node.attr)
|
|
112
|
+
# raise ValueError(f"Disallowed expression: {type(node).__name__}")
|
|
113
|
+
# if not isinstance(tree.body, (ast.Name, ast.Attribute)):
|
|
114
|
+
# raise ValueError("Only attribute access is allowed")
|
|
115
|
+
# return resolve(tree.body)
|
|
149
116
|
|
|
150
117
|
|
|
151
118
|
def get_directory(json_report_path: Optional[str]) -> str:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/images/LibrarySubdivision.PNG
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{testbench2robotframework-0.9.1a2 → testbench2robotframework-0.9.2a1}/tests/test_missing_files.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|