robotcode-robot 0.68.1__tar.gz → 0.68.2__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/PKG-INFO +4 -4
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/pyproject.toml +3 -3
- robotcode_robot-0.68.2/src/robotcode/robot/__version__.py +1 -0
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/src/robotcode/robot/config/loader.py +20 -6
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/src/robotcode/robot/config/model.py +120 -62
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/src/robotcode/robot/config/utils.py +14 -6
- robotcode_robot-0.68.2/src/robotcode/robot/diagnostics/__init__.py +0 -0
- robotcode_robot-0.68.2/src/robotcode/robot/diagnostics/entities.py +377 -0
- robotcode_robot-0.68.2/src/robotcode/robot/diagnostics/library_doc.py +2799 -0
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/src/robotcode/robot/utils/__init__.py +1 -2
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/src/robotcode/robot/utils/ast.py +34 -29
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/src/robotcode/robot/utils/markdownformatter.py +2 -2
- robotcode_robot-0.68.2/src/robotcode/robot/utils/match.py +23 -0
- robotcode_robot-0.68.2/src/robotcode/robot/utils/robot_path.py +70 -0
- robotcode_robot-0.68.2/src/robotcode/robot/utils/stubs.py +24 -0
- robotcode_robot-0.68.2/src/robotcode/robot/utils/variables.py +37 -0
- robotcode_robot-0.68.1/src/robotcode/robot/utils/visitors.py → robotcode_robot-0.68.2/src/robotcode/robot/utils/visitor.py +10 -21
- robotcode_robot-0.68.1/src/robotcode/robot/__version__.py +0 -1
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/.gitignore +0 -0
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/LICENSE.txt +0 -0
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/README.md +0 -0
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/src/robotcode/robot/__init__.py +0 -0
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/src/robotcode/robot/config/__init__.py +0 -0
- {robotcode_robot-0.68.1 → robotcode_robot-0.68.2}/src/robotcode/robot/py.typed +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: robotcode-robot
|
3
|
-
Version: 0.68.
|
3
|
+
Version: 0.68.2
|
4
4
|
Summary: Support classes for RobotCode for handling Robot Framework projects.
|
5
5
|
Project-URL: Homepage, https://robotcode.io
|
6
6
|
Project-URL: Donate, https://github.com/sponsors/d-biehl
|
@@ -9,7 +9,7 @@ Project-URL: Changelog, https://github.com/d-biehl/robotcode/blob/main/CHANGELOG
|
|
9
9
|
Project-URL: Issues, https://github.com/d-biehl/robotcode/issues
|
10
10
|
Project-URL: Source, https://github.com/d-biehl/robotcode
|
11
11
|
Author-email: Daniel Biehl <dbiehl@live.de>
|
12
|
-
License
|
12
|
+
License: Apache-2.0
|
13
13
|
License-File: LICENSE.txt
|
14
14
|
Classifier: Development Status :: 5 - Production/Stable
|
15
15
|
Classifier: Framework :: Robot Framework
|
@@ -25,8 +25,8 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
25
25
|
Classifier: Topic :: Utilities
|
26
26
|
Classifier: Typing :: Typed
|
27
27
|
Requires-Python: >=3.8
|
28
|
-
Requires-Dist: platformdirs<
|
29
|
-
Requires-Dist: robotcode-core==0.68.
|
28
|
+
Requires-Dist: platformdirs<4.2.0,>=3.2.0
|
29
|
+
Requires-Dist: robotcode-core==0.68.2
|
30
30
|
Requires-Dist: robotframework>=4.1.0
|
31
31
|
Requires-Dist: tomli>=1.1.0; python_version < '3.11'
|
32
32
|
Description-Content-Type: text/markdown
|
@@ -7,7 +7,7 @@ name = "robotcode-robot"
|
|
7
7
|
description = 'Support classes for RobotCode for handling Robot Framework projects.'
|
8
8
|
readme = { "file" = "README.md", "content-type" = "text/markdown" }
|
9
9
|
requires-python = ">=3.8"
|
10
|
-
license = "Apache-2.0"
|
10
|
+
license = {text = "Apache-2.0"}
|
11
11
|
keywords = []
|
12
12
|
authors = [{ name = "Daniel Biehl", email = "dbiehl@live.de" }]
|
13
13
|
classifiers = [
|
@@ -28,8 +28,8 @@ classifiers = [
|
|
28
28
|
dependencies = [
|
29
29
|
"robotframework>=4.1.0",
|
30
30
|
"tomli>=1.1.0; python_version < '3.11'",
|
31
|
-
"platformdirs
|
32
|
-
"robotcode-core==0.68.
|
31
|
+
"platformdirs>=3.2.0,<4.2.0",
|
32
|
+
"robotcode-core==0.68.2",
|
33
33
|
]
|
34
34
|
dynamic = ["version"]
|
35
35
|
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.68.2"
|
@@ -79,7 +79,10 @@ def load_config_from_pyproject_toml_str(config_type: Type[_ConfigType], tool_nam
|
|
79
79
|
|
80
80
|
|
81
81
|
def _load_config_data_from_path(
|
82
|
-
config_type: Type[_ConfigType],
|
82
|
+
config_type: Type[_ConfigType],
|
83
|
+
tool_name: str,
|
84
|
+
robot_toml_tool_name: Optional[str],
|
85
|
+
__path: Path,
|
83
86
|
) -> _ConfigType:
|
84
87
|
try:
|
85
88
|
if __path.name == PYPROJECT_TOML:
|
@@ -87,7 +90,9 @@ def _load_config_data_from_path(
|
|
87
90
|
|
88
91
|
if __path.name == ROBOT_TOML or __path.name == LOCAL_ROBOT_TOML or __path.suffix == ".toml":
|
89
92
|
return load_config_from_robot_toml_str(
|
90
|
-
config_type,
|
93
|
+
config_type,
|
94
|
+
__path.read_text("utf-8"),
|
95
|
+
tool_name=robot_toml_tool_name,
|
91
96
|
)
|
92
97
|
raise TypeError("Unknown config file type.")
|
93
98
|
|
@@ -115,18 +120,25 @@ def load_config_from_path(
|
|
115
120
|
for __path in __paths:
|
116
121
|
result.add_options(
|
117
122
|
_load_config_data_from_path(
|
118
|
-
config_type,
|
123
|
+
config_type,
|
124
|
+
tool_name,
|
125
|
+
robot_toml_tool_name,
|
126
|
+
__path if isinstance(__path, Path) else __path[0],
|
119
127
|
)
|
120
128
|
)
|
121
129
|
|
122
130
|
return result
|
123
131
|
|
124
132
|
|
125
|
-
def load_robot_config_from_path(
|
133
|
+
def load_robot_config_from_path(
|
134
|
+
*__paths: Union[Path, Tuple[Path, ConfigType]],
|
135
|
+
) -> RobotConfig:
|
126
136
|
return load_config_from_path(RobotConfig, *__paths, tool_name="robot")
|
127
137
|
|
128
138
|
|
129
|
-
def find_project_root(
|
139
|
+
def find_project_root(
|
140
|
+
*sources: Union[str, Path],
|
141
|
+
) -> Tuple[Optional[Path], DiscoverdBy]:
|
130
142
|
if not sources:
|
131
143
|
sources = (str(Path.cwd().absolute()),)
|
132
144
|
|
@@ -158,7 +170,9 @@ def find_project_root(*sources: Union[str, Path]) -> Tuple[Optional[Path], Disco
|
|
158
170
|
return None, DiscoverdBy.NOT_FOUND
|
159
171
|
|
160
172
|
|
161
|
-
def get_config_files_from_folder(
|
173
|
+
def get_config_files_from_folder(
|
174
|
+
folder: Path,
|
175
|
+
) -> Sequence[Tuple[Path, ConfigType]]:
|
162
176
|
result = []
|
163
177
|
|
164
178
|
pyproject_toml = folder / PYPROJECT_TOML
|
@@ -22,10 +22,16 @@ from typing import (
|
|
22
22
|
)
|
23
23
|
|
24
24
|
import tomli_w
|
25
|
-
from robotcode.core.utils.dataclasses import TypeValidationError, ValidateMixin, as_dict, validate_types
|
26
|
-
from robotcode.core.utils.safe_eval import safe_eval
|
27
25
|
from typing_extensions import Self
|
28
26
|
|
27
|
+
from robotcode.core.utils.dataclasses import (
|
28
|
+
TypeValidationError,
|
29
|
+
ValidateMixin,
|
30
|
+
as_dict,
|
31
|
+
validate_types,
|
32
|
+
)
|
33
|
+
from robotcode.core.utils.safe_eval import safe_eval
|
34
|
+
|
29
35
|
EXTEND_PREFIX_LEN = len("extend_")
|
30
36
|
|
31
37
|
|
@@ -260,7 +266,10 @@ class BaseOptions(ValidateMixin):
|
|
260
266
|
if value is None or value == Flag.DEFAULT:
|
261
267
|
continue
|
262
268
|
|
263
|
-
append_name(
|
269
|
+
append_name(
|
270
|
+
field,
|
271
|
+
bool(value) != field.metadata.get("robot_flag_default", True),
|
272
|
+
)
|
264
273
|
|
265
274
|
continue
|
266
275
|
|
@@ -292,7 +301,11 @@ class BaseOptions(ValidateMixin):
|
|
292
301
|
def _verified_value(name: str, value: Any, types: Union[type, Tuple[type, ...]], target: Any) -> Any:
|
293
302
|
errors = validate_types(types, value)
|
294
303
|
if errors:
|
295
|
-
raise TypeValidationError(
|
304
|
+
raise TypeValidationError(
|
305
|
+
"Dataclass Type Validation Error",
|
306
|
+
target=target,
|
307
|
+
errors={name: errors},
|
308
|
+
)
|
296
309
|
return value
|
297
310
|
|
298
311
|
def add_options(self, config: "BaseOptions", combine_extras: bool = False) -> None:
|
@@ -305,7 +318,10 @@ class BaseOptions(ValidateMixin):
|
|
305
318
|
continue
|
306
319
|
|
307
320
|
new = self._verified_value(
|
308
|
-
f.name,
|
321
|
+
f.name,
|
322
|
+
getattr(config, f.name),
|
323
|
+
type_hints[f.name[EXTEND_PREFIX_LEN:]],
|
324
|
+
config,
|
309
325
|
)
|
310
326
|
if new is None:
|
311
327
|
continue
|
@@ -447,7 +463,16 @@ class CommonOptions(BaseOptions):
|
|
447
463
|
robot_name="expandkeywords",
|
448
464
|
robot_priority=500,
|
449
465
|
)
|
450
|
-
flatten_keywords: Optional[
|
466
|
+
flatten_keywords: Optional[
|
467
|
+
List[
|
468
|
+
Union[
|
469
|
+
str,
|
470
|
+
Literal["for", "while", "iteration"],
|
471
|
+
NamePattern,
|
472
|
+
TagPattern,
|
473
|
+
]
|
474
|
+
]
|
475
|
+
] = field(
|
451
476
|
description="""\
|
452
477
|
Flattens matching keywords in the generated log file.
|
453
478
|
Matching keywords get all log messages from their
|
@@ -613,7 +638,14 @@ class CommonOptions(BaseOptions):
|
|
613
638
|
robot_short_name="P",
|
614
639
|
)
|
615
640
|
remove_keywords: Optional[
|
616
|
-
List[
|
641
|
+
List[
|
642
|
+
Union[
|
643
|
+
str,
|
644
|
+
Literal["all", "passed", "for", "wuks"],
|
645
|
+
NamePattern,
|
646
|
+
TagPattern,
|
647
|
+
]
|
648
|
+
]
|
617
649
|
] = field(
|
618
650
|
description="""\
|
619
651
|
Remove keyword data from the generated log file.
|
@@ -909,7 +941,7 @@ class CommonExtraOptions(BaseOptions):
|
|
909
941
|
matched using same rules as with --include.
|
910
942
|
|
911
943
|
corresponds to the `-e --exclude tag *` option of _robot_
|
912
|
-
"""
|
944
|
+
"""
|
913
945
|
)
|
914
946
|
extend_expand_keywords: Optional[List[Union[str, NamePattern, TagPattern]]] = field(
|
915
947
|
description="""\
|
@@ -927,10 +959,17 @@ class CommonExtraOptions(BaseOptions):
|
|
927
959
|
```
|
928
960
|
|
929
961
|
corresponds to the `--expandkeywords name:<pattern>|tag:<pattern> *` option of _robot_
|
930
|
-
"""
|
962
|
+
"""
|
931
963
|
)
|
932
964
|
extend_flatten_keywords: Optional[
|
933
|
-
List[
|
965
|
+
List[
|
966
|
+
Union[
|
967
|
+
str,
|
968
|
+
Literal["for", "while", "iteration"],
|
969
|
+
NamePattern,
|
970
|
+
TagPattern,
|
971
|
+
]
|
972
|
+
]
|
934
973
|
] = field(
|
935
974
|
description="""\
|
936
975
|
Appends entries to the --flattenkeywords option.
|
@@ -950,7 +989,7 @@ class CommonExtraOptions(BaseOptions):
|
|
950
989
|
`--removekeywords tag:<pattern>`
|
951
990
|
|
952
991
|
corresponds to the `--flattenkeywords for|while|iteration|name:<pattern>|tag:<pattern> *` option of _robot_
|
953
|
-
"""
|
992
|
+
"""
|
954
993
|
)
|
955
994
|
extend_includes: Optional[List[Union[str, StringExpression]]] = field(
|
956
995
|
description="""\
|
@@ -970,7 +1009,7 @@ class CommonExtraOptions(BaseOptions):
|
|
970
1009
|
```
|
971
1010
|
|
972
1011
|
corresponds to the `-i --include tag *` option of _robot_
|
973
|
-
"""
|
1012
|
+
"""
|
974
1013
|
)
|
975
1014
|
extend_metadata: Optional[Dict[str, Union[str, StringExpression]]] = field(
|
976
1015
|
description="""\
|
@@ -981,7 +1020,7 @@ class CommonExtraOptions(BaseOptions):
|
|
981
1020
|
as --doc. Example: --metadata Version:1.2
|
982
1021
|
|
983
1022
|
corresponds to the `-M --metadata name:value *` option of _robot_
|
984
|
-
"""
|
1023
|
+
"""
|
985
1024
|
)
|
986
1025
|
extend_parse_include: Optional[List[Union[str, StringExpression]]] = field(
|
987
1026
|
description="""\
|
@@ -995,7 +1034,7 @@ class CommonExtraOptions(BaseOptions):
|
|
995
1034
|
all files in that directory, recursively.
|
996
1035
|
|
997
1036
|
corresponds to the `-I --parseinclude pattern *` option of _robot_
|
998
|
-
"""
|
1037
|
+
"""
|
999
1038
|
)
|
1000
1039
|
extend_pre_rebot_modifiers: Optional[Dict[str, List[Union[str, StringExpression]]]] = field(
|
1001
1040
|
description="""\
|
@@ -1006,7 +1045,7 @@ class CommonExtraOptions(BaseOptions):
|
|
1006
1045
|
arguments the same way as with --listener.
|
1007
1046
|
|
1008
1047
|
corresponds to the `--prerebotmodifier modifier *` option of _robot_
|
1009
|
-
"""
|
1048
|
+
"""
|
1010
1049
|
)
|
1011
1050
|
extend_python_path: Optional[List[Union[str, StringExpression]]] = field(
|
1012
1051
|
description="""\
|
@@ -1027,10 +1066,17 @@ class CommonExtraOptions(BaseOptions):
|
|
1027
1066
|
```
|
1028
1067
|
|
1029
1068
|
corresponds to the `-P --pythonpath path *` option of _robot_
|
1030
|
-
"""
|
1069
|
+
"""
|
1031
1070
|
)
|
1032
1071
|
extend_remove_keywords: Optional[
|
1033
|
-
List[
|
1072
|
+
List[
|
1073
|
+
Union[
|
1074
|
+
str,
|
1075
|
+
Literal["all", "passed", "for", "wuks"],
|
1076
|
+
NamePattern,
|
1077
|
+
TagPattern,
|
1078
|
+
]
|
1079
|
+
]
|
1034
1080
|
] = field(
|
1035
1081
|
description="""\
|
1036
1082
|
Appends entries to the --removekeywords option.
|
@@ -1075,7 +1121,7 @@ class CommonExtraOptions(BaseOptions):
|
|
1075
1121
|
```
|
1076
1122
|
|
1077
1123
|
corresponds to the `--removekeywords all|passed|for|wuks|name:<pattern>|tag:<pattern> *` option of _robot_
|
1078
|
-
"""
|
1124
|
+
"""
|
1079
1125
|
)
|
1080
1126
|
extend_set_tag: Optional[List[Union[str, StringExpression]]] = field(
|
1081
1127
|
description="""\
|
@@ -1084,7 +1130,7 @@ class CommonExtraOptions(BaseOptions):
|
|
1084
1130
|
Sets given tag(s) to all executed tests.
|
1085
1131
|
|
1086
1132
|
corresponds to the `-G --settag tag *` option of _robot_
|
1087
|
-
"""
|
1133
|
+
"""
|
1088
1134
|
)
|
1089
1135
|
extend_suites: Optional[List[Union[str, StringExpression]]] = field(
|
1090
1136
|
description="""\
|
@@ -1099,7 +1145,7 @@ class CommonExtraOptions(BaseOptions):
|
|
1099
1145
|
selects suite `Y` only if its parent is `X`.
|
1100
1146
|
|
1101
1147
|
corresponds to the `-s --suite name *` option of _robot_
|
1102
|
-
"""
|
1148
|
+
"""
|
1103
1149
|
)
|
1104
1150
|
extend_tag_doc: Optional[Dict[str, Union[str, StringExpression]]] = field(
|
1105
1151
|
description="""\
|
@@ -1119,7 +1165,7 @@ class CommonExtraOptions(BaseOptions):
|
|
1119
1165
|
```
|
1120
1166
|
|
1121
1167
|
corresponds to the `--tagdoc pattern:doc *` option of _robot_
|
1122
|
-
"""
|
1168
|
+
"""
|
1123
1169
|
)
|
1124
1170
|
extend_tag_stat_combine: Optional[List[Union[str, Dict[str, str]]]] = field(
|
1125
1171
|
description="""\
|
@@ -1139,7 +1185,7 @@ class CommonExtraOptions(BaseOptions):
|
|
1139
1185
|
```
|
1140
1186
|
|
1141
1187
|
corresponds to the `--tagstatcombine tags:name *` option of _robot_
|
1142
|
-
"""
|
1188
|
+
"""
|
1143
1189
|
)
|
1144
1190
|
extend_tag_stat_exclude: Optional[List[Union[str, StringExpression]]] = field(
|
1145
1191
|
description="""\
|
@@ -1150,7 +1196,7 @@ class CommonExtraOptions(BaseOptions):
|
|
1150
1196
|
similarly as --exclude is used with --include.
|
1151
1197
|
|
1152
1198
|
corresponds to the `--tagstatexclude tag *` option of _robot_
|
1153
|
-
"""
|
1199
|
+
"""
|
1154
1200
|
)
|
1155
1201
|
extend_tag_stat_include: Optional[List[Union[str, StringExpression]]] = field(
|
1156
1202
|
description="""\
|
@@ -1161,7 +1207,7 @@ class CommonExtraOptions(BaseOptions):
|
|
1161
1207
|
Given tag can be a pattern like with --include.
|
1162
1208
|
|
1163
1209
|
corresponds to the `--tagstatinclude tag *` option of _robot_
|
1164
|
-
"""
|
1210
|
+
"""
|
1165
1211
|
)
|
1166
1212
|
extend_tag_stat_link: Optional[Dict[str, Union[str, StringExpression]]] = field(
|
1167
1213
|
description="""\
|
@@ -1181,7 +1227,7 @@ class CommonExtraOptions(BaseOptions):
|
|
1181
1227
|
```
|
1182
1228
|
|
1183
1229
|
corresponds to the `--tagstatlink pattern:link:title *` option of _robot_
|
1184
|
-
"""
|
1230
|
+
"""
|
1185
1231
|
)
|
1186
1232
|
extend_tasks: Optional[List[Union[str, StringExpression]]] = field(
|
1187
1233
|
description="""\
|
@@ -1190,7 +1236,7 @@ class CommonExtraOptions(BaseOptions):
|
|
1190
1236
|
Alias to --test. Especially applicable with --rpa.
|
1191
1237
|
|
1192
1238
|
corresponds to the `--task name *` option of _robot_
|
1193
|
-
"""
|
1239
|
+
"""
|
1194
1240
|
)
|
1195
1241
|
extend_tests: Optional[List[Union[str, StringExpression]]] = field(
|
1196
1242
|
description="""\
|
@@ -1204,7 +1250,7 @@ class CommonExtraOptions(BaseOptions):
|
|
1204
1250
|
in brackets.
|
1205
1251
|
|
1206
1252
|
corresponds to the `-t --test name *` option of _robot_
|
1207
|
-
"""
|
1253
|
+
"""
|
1208
1254
|
)
|
1209
1255
|
|
1210
1256
|
|
@@ -1589,7 +1635,7 @@ class RobotExtraOptions(BaseOptions):
|
|
1589
1635
|
a custom language file.
|
1590
1636
|
|
1591
1637
|
corresponds to the `--language lang *` option of _rebot_
|
1592
|
-
"""
|
1638
|
+
"""
|
1593
1639
|
)
|
1594
1640
|
extend_listeners: Optional[Dict[str, List[Union[str, StringExpression]]]] = field(
|
1595
1641
|
description="""\
|
@@ -1608,7 +1654,7 @@ class RobotExtraOptions(BaseOptions):
|
|
1608
1654
|
```
|
1609
1655
|
|
1610
1656
|
corresponds to the `--listener listener *` option of _rebot_
|
1611
|
-
"""
|
1657
|
+
"""
|
1612
1658
|
)
|
1613
1659
|
extend_parsers: Optional[Dict[str, List[Union[str, StringExpression]]]] = field(
|
1614
1660
|
description="""\
|
@@ -1618,7 +1664,7 @@ class RobotExtraOptions(BaseOptions):
|
|
1618
1664
|
arguments the same way as with --listener.
|
1619
1665
|
|
1620
1666
|
corresponds to the `--parser parser *` option of _rebot_
|
1621
|
-
"""
|
1667
|
+
"""
|
1622
1668
|
)
|
1623
1669
|
extend_pre_run_modifiers: Optional[Dict[str, List[Union[str, StringExpression]]]] = field(
|
1624
1670
|
description="""\
|
@@ -1629,7 +1675,7 @@ class RobotExtraOptions(BaseOptions):
|
|
1629
1675
|
same way as with --listener.
|
1630
1676
|
|
1631
1677
|
corresponds to the `--prerunmodifier modifier *` option of _rebot_
|
1632
|
-
"""
|
1678
|
+
"""
|
1633
1679
|
)
|
1634
1680
|
extend_skip: Optional[List[Union[str, StringExpression]]] = field(
|
1635
1681
|
description="""\
|
@@ -1639,7 +1685,7 @@ class RobotExtraOptions(BaseOptions):
|
|
1639
1685
|
a pattern.
|
1640
1686
|
|
1641
1687
|
corresponds to the `--skip tag *` option of _rebot_
|
1642
|
-
"""
|
1688
|
+
"""
|
1643
1689
|
)
|
1644
1690
|
extend_skip_on_failure: Optional[List[Union[str, StringExpression]]] = field(
|
1645
1691
|
description="""\
|
@@ -1649,7 +1695,7 @@ class RobotExtraOptions(BaseOptions):
|
|
1649
1695
|
Tag can be a pattern
|
1650
1696
|
|
1651
1697
|
corresponds to the `--skiponfailure tag *` option of _rebot_
|
1652
|
-
"""
|
1698
|
+
"""
|
1653
1699
|
)
|
1654
1700
|
extend_variables: Optional[Dict[str, Union[str, StringExpression]]] = field(
|
1655
1701
|
description="""\
|
@@ -1669,7 +1715,7 @@ class RobotExtraOptions(BaseOptions):
|
|
1669
1715
|
```
|
1670
1716
|
|
1671
1717
|
corresponds to the `-v --variable name:value *` option of _rebot_
|
1672
|
-
"""
|
1718
|
+
"""
|
1673
1719
|
)
|
1674
1720
|
extend_variable_files: Optional[List[Union[str, StringExpression]]] = field(
|
1675
1721
|
description="""\
|
@@ -1687,7 +1733,7 @@ class RobotExtraOptions(BaseOptions):
|
|
1687
1733
|
```
|
1688
1734
|
|
1689
1735
|
corresponds to the `-V --variablefile path *` option of _rebot_
|
1690
|
-
"""
|
1736
|
+
"""
|
1691
1737
|
)
|
1692
1738
|
|
1693
1739
|
|
@@ -1889,7 +1935,7 @@ class LibDocExtraOptions(BaseOptions):
|
|
1889
1935
|
and resources.
|
1890
1936
|
|
1891
1937
|
corresponds to the `-P --pythonpath path *` option of _libdoc_
|
1892
|
-
"""
|
1938
|
+
"""
|
1893
1939
|
)
|
1894
1940
|
|
1895
1941
|
|
@@ -2002,7 +2048,7 @@ class TestDocExtraOptions(BaseOptions):
|
|
2002
2048
|
Exclude tests by tags.
|
2003
2049
|
|
2004
2050
|
corresponds to the `-e --exclude tag *` option of _testdoc_
|
2005
|
-
"""
|
2051
|
+
"""
|
2006
2052
|
)
|
2007
2053
|
extend_includes: Optional[List[Union[str, StringExpression]]] = field(
|
2008
2054
|
description="""\
|
@@ -2011,7 +2057,7 @@ class TestDocExtraOptions(BaseOptions):
|
|
2011
2057
|
Include tests by tags.
|
2012
2058
|
|
2013
2059
|
corresponds to the `-i --include tag *` option of _testdoc_
|
2014
|
-
"""
|
2060
|
+
"""
|
2015
2061
|
)
|
2016
2062
|
extend_metadata: Optional[Dict[str, Union[str, StringExpression]]] = field(
|
2017
2063
|
description="""\
|
@@ -2020,7 +2066,7 @@ class TestDocExtraOptions(BaseOptions):
|
|
2020
2066
|
Set/override metadata of the top level suite.
|
2021
2067
|
|
2022
2068
|
corresponds to the `-M --metadata name:value *` option of _testdoc_
|
2023
|
-
"""
|
2069
|
+
"""
|
2024
2070
|
)
|
2025
2071
|
extend_set_tag: Optional[List[Union[str, StringExpression]]] = field(
|
2026
2072
|
description="""\
|
@@ -2029,7 +2075,7 @@ class TestDocExtraOptions(BaseOptions):
|
|
2029
2075
|
Set given tag(s) to all test cases.
|
2030
2076
|
|
2031
2077
|
corresponds to the `-G --settag tag *` option of _testdoc_
|
2032
|
-
"""
|
2078
|
+
"""
|
2033
2079
|
)
|
2034
2080
|
extend_suites: Optional[List[Union[str, StringExpression]]] = field(
|
2035
2081
|
description="""\
|
@@ -2038,7 +2084,7 @@ class TestDocExtraOptions(BaseOptions):
|
|
2038
2084
|
Include suites by name.
|
2039
2085
|
|
2040
2086
|
corresponds to the `-s --suite name *` option of _testdoc_
|
2041
|
-
"""
|
2087
|
+
"""
|
2042
2088
|
)
|
2043
2089
|
extend_tests: Optional[List[Union[str, StringExpression]]] = field(
|
2044
2090
|
description="""\
|
@@ -2047,7 +2093,7 @@ class TestDocExtraOptions(BaseOptions):
|
|
2047
2093
|
Include tests by name.
|
2048
2094
|
|
2049
2095
|
corresponds to the `-t --test name *` option of _testdoc_
|
2050
|
-
"""
|
2096
|
+
"""
|
2051
2097
|
)
|
2052
2098
|
|
2053
2099
|
|
@@ -2107,7 +2153,7 @@ class RobotBaseProfile(CommonOptions, CommonExtraOptions, RobotOptions, RobotExt
|
|
2107
2153
|
TEST_VAR = "test"
|
2108
2154
|
SECRET = "password"
|
2109
2155
|
```
|
2110
|
-
"""
|
2156
|
+
"""
|
2111
2157
|
)
|
2112
2158
|
|
2113
2159
|
rebot: Optional[RebotProfile] = field(
|
@@ -2141,13 +2187,13 @@ class RobotExtraBaseProfile(RobotBaseProfile):
|
|
2141
2187
|
extend_args: Optional[List[str]] = field(
|
2142
2188
|
description="""\
|
2143
2189
|
Append extra arguments to be passed to _robot_.
|
2144
|
-
"""
|
2190
|
+
"""
|
2145
2191
|
)
|
2146
2192
|
|
2147
2193
|
extend_env: Optional[Dict[str, str]] = field(
|
2148
2194
|
description="""\
|
2149
2195
|
Append extra environment variables to be set before tests.
|
2150
|
-
"""
|
2196
|
+
"""
|
2151
2197
|
)
|
2152
2198
|
|
2153
2199
|
extend_paths: Union[str, List[str], None] = field(
|
@@ -2172,7 +2218,7 @@ class RobotProfile(RobotExtraBaseProfile):
|
|
2172
2218
|
description="""\
|
2173
2219
|
The profile should be detached.
|
2174
2220
|
Detached means it is not inherited from the main profile.
|
2175
|
-
"""
|
2221
|
+
"""
|
2176
2222
|
)
|
2177
2223
|
|
2178
2224
|
enabled: Union[bool, Condition, None] = field(
|
@@ -2216,22 +2262,18 @@ class RobotConfig(RobotExtraBaseProfile):
|
|
2216
2262
|
```toml
|
2217
2263
|
default_profiles = ["default", "Firefox"]
|
2218
2264
|
```
|
2219
|
-
"""
|
2220
|
-
)
|
2221
|
-
profiles: Optional[Dict[str, RobotProfile]] = field(
|
2222
|
-
description="Execution profiles.",
|
2265
|
+
"""
|
2223
2266
|
)
|
2267
|
+
profiles: Optional[Dict[str, RobotProfile]] = field(description="Execution profiles.")
|
2224
2268
|
|
2225
|
-
extend_profiles: Optional[Dict[str, RobotProfile]] = field(
|
2226
|
-
description="Extra execution profiles.",
|
2227
|
-
)
|
2269
|
+
extend_profiles: Optional[Dict[str, RobotProfile]] = field(description="Extra execution profiles.")
|
2228
2270
|
|
2229
|
-
tool: Any = field(
|
2230
|
-
description="Tool configurations.",
|
2231
|
-
)
|
2271
|
+
tool: Any = field(description="Tool configurations.")
|
2232
2272
|
|
2233
2273
|
def select_profiles(
|
2234
|
-
self,
|
2274
|
+
self,
|
2275
|
+
*names: str,
|
2276
|
+
verbose_callback: Optional[Callable[..., None]] = None,
|
2235
2277
|
) -> Dict[str, RobotProfile]:
|
2236
2278
|
result: Dict[str, RobotProfile] = {}
|
2237
2279
|
|
@@ -2246,7 +2288,7 @@ class RobotConfig(RobotExtraBaseProfile):
|
|
2246
2288
|
)
|
2247
2289
|
|
2248
2290
|
if verbose_callback and default_profile:
|
2249
|
-
verbose_callback(f"Using default profiles: {', '.join(
|
2291
|
+
verbose_callback(f"Using default profiles: {', '.join(default_profile)}.")
|
2250
2292
|
|
2251
2293
|
names = (*(default_profile or ()),)
|
2252
2294
|
|
@@ -2261,7 +2303,11 @@ class RobotConfig(RobotExtraBaseProfile):
|
|
2261
2303
|
|
2262
2304
|
return result
|
2263
2305
|
|
2264
|
-
def combine_profiles(
|
2306
|
+
def combine_profiles(
|
2307
|
+
self,
|
2308
|
+
*names: str,
|
2309
|
+
verbose_callback: Optional[Callable[..., None]] = None,
|
2310
|
+
) -> RobotBaseProfile:
|
2265
2311
|
type_hints = get_type_hints(RobotBaseProfile)
|
2266
2312
|
base_field_names = [f.name for f in dataclasses.fields(RobotBaseProfile)]
|
2267
2313
|
|
@@ -2298,7 +2344,10 @@ class RobotConfig(RobotExtraBaseProfile):
|
|
2298
2344
|
for f in dataclasses.fields(profile):
|
2299
2345
|
if f.name.startswith("extend_"):
|
2300
2346
|
new = self._verified_value(
|
2301
|
-
f.name,
|
2347
|
+
f.name,
|
2348
|
+
getattr(profile, f.name),
|
2349
|
+
type_hints[f.name[EXTEND_PREFIX_LEN:]],
|
2350
|
+
profile,
|
2302
2351
|
)
|
2303
2352
|
if new is None:
|
2304
2353
|
continue
|
@@ -2308,7 +2357,11 @@ class RobotConfig(RobotExtraBaseProfile):
|
|
2308
2357
|
setattr(result, f.name[EXTEND_PREFIX_LEN:], new)
|
2309
2358
|
else:
|
2310
2359
|
if isinstance(old, dict):
|
2311
|
-
setattr(
|
2360
|
+
setattr(
|
2361
|
+
result,
|
2362
|
+
f.name[EXTEND_PREFIX_LEN:],
|
2363
|
+
{**old, **new},
|
2364
|
+
)
|
2312
2365
|
elif isinstance(old, list):
|
2313
2366
|
setattr(result, f.name[EXTEND_PREFIX_LEN:], [*old, *new])
|
2314
2367
|
elif isinstance(old, tuple):
|
@@ -2323,7 +2376,12 @@ class RobotConfig(RobotExtraBaseProfile):
|
|
2323
2376
|
if getattr(profile, f"extend_{f.name}", None) is not None:
|
2324
2377
|
continue
|
2325
2378
|
|
2326
|
-
new = self._verified_value(
|
2379
|
+
new = self._verified_value(
|
2380
|
+
f.name,
|
2381
|
+
getattr(profile, f.name),
|
2382
|
+
type_hints[f.name],
|
2383
|
+
profile,
|
2384
|
+
)
|
2327
2385
|
if new is not None:
|
2328
2386
|
setattr(result, f.name, new)
|
2329
2387
|
|
@@ -3,11 +3,18 @@ from typing import Callable, Optional, Sequence, Tuple, Union
|
|
3
3
|
|
4
4
|
import platformdirs
|
5
5
|
|
6
|
-
from .loader import
|
6
|
+
from .loader import (
|
7
|
+
ConfigType,
|
8
|
+
DiscoverdBy,
|
9
|
+
find_project_root,
|
10
|
+
get_config_files_from_folder,
|
11
|
+
get_default_config,
|
12
|
+
)
|
7
13
|
|
8
14
|
|
9
15
|
def get_user_config_file(
|
10
|
-
create: bool = True,
|
16
|
+
create: bool = True,
|
17
|
+
verbose_callback: Optional[Callable[[str], None]] = None,
|
11
18
|
) -> Optional[Path]:
|
12
19
|
result = Path(platformdirs.user_config_dir("robotcode", appauthor=False), "robot.toml")
|
13
20
|
if result.is_file():
|
@@ -58,16 +65,17 @@ def get_config_files(
|
|
58
65
|
|
59
66
|
if verbose_callback:
|
60
67
|
if result:
|
61
|
-
verbose_callback(
|
62
|
-
"Found configuration files:\n " + "\n ".join(str(f[0]) for f in result),
|
63
|
-
)
|
68
|
+
verbose_callback("Found configuration files:\n " + "\n ".join(str(f[0]) for f in result))
|
64
69
|
else:
|
65
70
|
verbose_callback("No configuration files found.")
|
66
71
|
|
67
72
|
user_config = get_user_config_file(verbose_callback=verbose_callback)
|
68
73
|
|
69
74
|
return (
|
70
|
-
[
|
75
|
+
[
|
76
|
+
*([(user_config, ConfigType.USER_DEFAULT_CONFIG_TOML)] if user_config else []),
|
77
|
+
*result,
|
78
|
+
],
|
71
79
|
root_folder,
|
72
80
|
discovered_by,
|
73
81
|
)
|
File without changes
|