robotframework 6.1rc1__zip → 7.0__zip

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 (307) hide show
  1. {robotframework-6.1rc1 → robotframework-7.0}/INSTALL.rst +25 -25
  2. {robotframework-6.1rc1 → robotframework-7.0}/PKG-INFO +6 -8
  3. {robotframework-6.1rc1 → robotframework-7.0}/README.rst +3 -2
  4. {robotframework-6.1rc1 → robotframework-7.0}/setup.py +3 -6
  5. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/__init__.py +4 -1
  6. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/deco.py +60 -14
  7. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/exceptions.py +6 -6
  8. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/interfaces.py +403 -68
  9. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/logger.py +27 -20
  10. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/api/parsing.py +4 -2
  11. robotframework-7.0/src/robot/api/py.typed +0 -0
  12. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/conf/gatherfailed.py +2 -2
  13. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/conf/languages.py +61 -25
  14. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/conf/settings.py +21 -14
  15. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/common/storage.js +11 -6
  16. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/htmlfilewriter.py +1 -1
  17. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/libdoc.css +10 -2
  18. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/libdoc.html +10 -0
  19. robotframework-7.0/src/robot/htmldata/rebot/common.css +362 -0
  20. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/doc_formatting.css +13 -7
  21. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/log.css +51 -10
  22. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/log.html +14 -23
  23. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/model.js +2 -4
  24. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/report.css +83 -19
  25. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/report.html +22 -7
  26. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/testdata.js +10 -3
  27. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/view.js +84 -0
  28. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/template.py +3 -3
  29. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/builder.py +0 -8
  30. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/datatypes.py +9 -10
  31. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/htmlutils.py +4 -7
  32. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/jsonbuilder.py +38 -20
  33. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/model.py +21 -28
  34. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/robotbuilder.py +50 -31
  35. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/standardtypes.py +9 -1
  36. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/xmlbuilder.py +35 -20
  37. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/xmlwriter.py +18 -38
  38. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/BuiltIn.py +255 -205
  39. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Collections.py +384 -240
  40. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/DateTime.py +73 -60
  41. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/OperatingSystem.py +6 -5
  42. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Process.py +26 -27
  43. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Remote.py +40 -36
  44. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/String.py +66 -76
  45. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/XML.py +66 -59
  46. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/__init__.py +2 -2
  47. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/dialogs_py.py +14 -2
  48. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/__init__.py +5 -5
  49. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/body.py +44 -13
  50. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/configurer.py +19 -15
  51. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/control.py +230 -88
  52. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/filter.py +31 -25
  53. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/itemlist.py +9 -8
  54. robotframework-7.0/src/robot/model/keyword.py +77 -0
  55. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/message.py +19 -10
  56. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/modelobject.py +27 -15
  57. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/modifier.py +1 -1
  58. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/namepatterns.py +3 -25
  59. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/stats.py +9 -15
  60. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/tags.py +1 -1
  61. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/testcase.py +15 -27
  62. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/testsuite.py +44 -28
  63. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/visitor.py +35 -8
  64. robotframework-7.0/src/robot/output/console/dotted.py +90 -0
  65. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/console/quiet.py +3 -2
  66. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/console/verbose.py +61 -61
  67. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/debugfile.py +39 -24
  68. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/filelogger.py +18 -15
  69. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/librarylogger.py +3 -2
  70. robotframework-7.0/src/robot/output/listeners.py +753 -0
  71. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/logger.py +216 -80
  72. robotframework-7.0/src/robot/output/loggerapi.py +215 -0
  73. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/loggerhelper.py +23 -56
  74. robotframework-7.0/src/robot/output/output.py +185 -0
  75. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/stdoutlogsplitter.py +8 -5
  76. robotframework-7.0/src/robot/output/xmllogger.py +459 -0
  77. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/blocklexers.py +17 -13
  78. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/context.py +12 -2
  79. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/lexer.py +1 -1
  80. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/settings.py +6 -3
  81. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/statementlexers.py +39 -10
  82. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/tokens.py +27 -29
  83. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/model/blocks.py +19 -6
  84. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/model/statements.py +193 -94
  85. robotframework-7.0/src/robot/parsing/model/visitor.py +100 -0
  86. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/rebot.py +2 -0
  87. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/expandkeywordmatcher.py +1 -1
  88. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/jsbuildingcontext.py +8 -6
  89. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/jsmodelbuilders.py +88 -61
  90. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/logreportwriters.py +16 -10
  91. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/outputwriter.py +18 -2
  92. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/resultwriter.py +4 -4
  93. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/stringcache.py +3 -3
  94. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/xunitwriter.py +15 -21
  95. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/__init__.py +3 -2
  96. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/configurer.py +12 -9
  97. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/executionresult.py +56 -8
  98. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/flattenkeywordmatcher.py +48 -9
  99. robotframework-7.0/src/robot/result/keywordremover.py +207 -0
  100. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/merger.py +1 -1
  101. robotframework-7.0/src/robot/result/model.py +1185 -0
  102. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/modeldeprecation.py +9 -3
  103. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/resultbuilder.py +46 -36
  104. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/xmlelementhandlers.py +83 -43
  105. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/run.py +3 -1
  106. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/__init__.py +14 -4
  107. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/__init__.py +2 -1
  108. robotframework-7.0/src/robot/running/arguments/argumentconverter.py +100 -0
  109. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/argumentmapper.py +26 -24
  110. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/argumentparser.py +85 -61
  111. robotframework-7.0/src/robot/running/arguments/argumentresolver.py +158 -0
  112. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/argumentspec.py +83 -116
  113. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/argumentvalidator.py +33 -27
  114. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/customconverters.py +15 -12
  115. robotframework-7.0/src/robot/running/arguments/embedded.py +145 -0
  116. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/arguments/typeconverters.py +268 -220
  117. robotframework-7.0/src/robot/running/arguments/typeinfo.py +317 -0
  118. robotframework-7.0/src/robot/running/arguments/typeinfoparser.py +219 -0
  119. robotframework-7.0/src/robot/running/arguments/typevalidator.py +60 -0
  120. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/bodyrunner.py +147 -129
  121. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/builder/builders.py +17 -26
  122. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/builder/parsers.py +17 -11
  123. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/builder/settings.py +9 -17
  124. robotframework-7.0/src/robot/running/builder/transformers.py +535 -0
  125. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/context.py +113 -31
  126. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/dynamicmethods.py +62 -34
  127. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/importer.py +27 -49
  128. robotframework-7.0/src/robot/running/invalidkeyword.py +67 -0
  129. robotframework-7.0/src/robot/running/keywordfinder.py +91 -0
  130. robotframework-7.0/src/robot/running/keywordimplementation.py +164 -0
  131. robotframework-7.0/src/robot/running/librarykeyword.py +392 -0
  132. robotframework-7.0/src/robot/running/librarykeywordrunner.py +250 -0
  133. robotframework-7.0/src/robot/running/libraryscopes.py +115 -0
  134. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/model.py +198 -337
  135. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/namespace.py +124 -137
  136. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/outputcapture.py +20 -12
  137. robotframework-7.0/src/robot/running/resourcemodel.py +448 -0
  138. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/statusreporter.py +16 -13
  139. robotframework-7.0/src/robot/running/suiterunner.py +265 -0
  140. robotframework-7.0/src/robot/running/testlibraries.py +500 -0
  141. robotframework-7.0/src/robot/running/userkeywordrunner.py +260 -0
  142. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/testdoc.py +18 -13
  143. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/__init__.py +53 -35
  144. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/connectioncache.py +64 -59
  145. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/dotdict.py +3 -0
  146. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/encodingsniffer.py +9 -4
  147. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/escaping.py +19 -19
  148. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/importer.py +2 -2
  149. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/markupwriters.py +23 -15
  150. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/misc.py +1 -2
  151. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/normalizing.py +9 -24
  152. robotframework-7.0/src/robot/utils/notset.py +33 -0
  153. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/platform.py +15 -5
  154. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robotio.py +9 -9
  155. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robotpath.py +1 -0
  156. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robottime.py +122 -90
  157. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robottypes.py +21 -31
  158. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/setter.py +0 -5
  159. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/text.py +7 -4
  160. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/unic.py +2 -2
  161. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/__init__.py +2 -2
  162. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/assigner.py +17 -19
  163. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/evaluation.py +20 -17
  164. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/filesetter.py +80 -80
  165. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/replacer.py +33 -36
  166. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/scopes.py +17 -12
  167. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/search.py +66 -41
  168. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/store.py +14 -16
  169. robotframework-7.0/src/robot/variables/tablesetter.py +164 -0
  170. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/variables.py +1 -1
  171. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/version.py +1 -1
  172. {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/PKG-INFO +6 -8
  173. {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/SOURCES.txt +10 -8
  174. {robotframework-6.1rc1 → robotframework-7.0}/tasks.py +6 -6
  175. robotframework-6.1rc1/src/robot/htmldata/rebot/common.css +0 -239
  176. robotframework-6.1rc1/src/robot/libraries/Reserved.py +0 -48
  177. robotframework-6.1rc1/src/robot/model/keyword.py +0 -173
  178. robotframework-6.1rc1/src/robot/output/console/dotted.py +0 -90
  179. robotframework-6.1rc1/src/robot/output/listenerarguments.py +0 -165
  180. robotframework-6.1rc1/src/robot/output/listenermethods.py +0 -113
  181. robotframework-6.1rc1/src/robot/output/listeners.py +0 -174
  182. robotframework-6.1rc1/src/robot/output/output.py +0 -95
  183. robotframework-6.1rc1/src/robot/output/xmllogger.py +0 -354
  184. robotframework-6.1rc1/src/robot/parsing/model/visitor.py +0 -67
  185. robotframework-6.1rc1/src/robot/result/keywordremover.py +0 -183
  186. robotframework-6.1rc1/src/robot/result/model.py +0 -957
  187. robotframework-6.1rc1/src/robot/running/arguments/argumentconverter.py +0 -79
  188. robotframework-6.1rc1/src/robot/running/arguments/argumentresolver.py +0 -131
  189. robotframework-6.1rc1/src/robot/running/arguments/embedded.py +0 -146
  190. robotframework-6.1rc1/src/robot/running/arguments/typevalidator.py +0 -56
  191. robotframework-6.1rc1/src/robot/running/builder/transformers.py +0 -642
  192. robotframework-6.1rc1/src/robot/running/handlers.py +0 -321
  193. robotframework-6.1rc1/src/robot/running/handlerstore.py +0 -66
  194. robotframework-6.1rc1/src/robot/running/librarykeywordrunner.py +0 -238
  195. robotframework-6.1rc1/src/robot/running/libraryscopes.py +0 -97
  196. robotframework-6.1rc1/src/robot/running/modelcombiner.py +0 -32
  197. robotframework-6.1rc1/src/robot/running/suiterunner.py +0 -249
  198. robotframework-6.1rc1/src/robot/running/testlibraries.py +0 -420
  199. robotframework-6.1rc1/src/robot/running/usererrorhandler.py +0 -75
  200. robotframework-6.1rc1/src/robot/running/userkeyword.py +0 -111
  201. robotframework-6.1rc1/src/robot/running/userkeywordrunner.py +0 -274
  202. robotframework-6.1rc1/src/robot/variables/tablesetter.py +0 -156
  203. {robotframework-6.1rc1 → robotframework-7.0}/AUTHORS.rst +0 -0
  204. {robotframework-6.1rc1 → robotframework-7.0}/BUILD.rst +0 -0
  205. {robotframework-6.1rc1 → robotframework-7.0}/CONTRIBUTING.rst +0 -0
  206. {robotframework-6.1rc1 → robotframework-7.0}/COPYRIGHT.txt +0 -0
  207. {robotframework-6.1rc1 → robotframework-7.0}/LICENSE.txt +0 -0
  208. {robotframework-6.1rc1 → robotframework-7.0}/MANIFEST.in +0 -0
  209. {robotframework-6.1rc1 → robotframework-7.0}/setup.cfg +0 -0
  210. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/__init__.py +0 -0
  211. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/__main__.py +0 -0
  212. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/conf/__init__.py +0 -0
  213. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/errors.py +0 -0
  214. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/__init__.py +0 -0
  215. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/common/__init__.py +0 -0
  216. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/common/js_disabled.css +0 -0
  217. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/jsonwriter.py +0 -0
  218. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/__init__.py +0 -0
  219. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.highlight.min.js +0 -0
  220. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.min.js +0 -0
  221. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.tablesorter.min.js +0 -0
  222. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jquery.tmpl.min.js +0 -0
  223. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/lib/jsxcompressor.min.js +0 -0
  224. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/__init__.py +0 -0
  225. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/doc_formatting.css +0 -0
  226. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/print.css +0 -0
  227. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/libdoc/pygments.css +0 -0
  228. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/__init__.py +0 -0
  229. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/fileloading.js +0 -0
  230. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/log.js +0 -0
  231. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/print.css +0 -0
  232. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/rebot/util.js +0 -0
  233. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/testdoc/__init__.py +0 -0
  234. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/testdoc/testdoc.css +0 -0
  235. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/htmldata/testdoc/testdoc.html +0 -0
  236. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdoc.py +0 -0
  237. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/__init__.py +0 -0
  238. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/consoleviewer.py +0 -0
  239. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/htmlwriter.py +0 -0
  240. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/jsonwriter.py +0 -0
  241. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/output.py +0 -0
  242. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libdocpkg/writer.py +0 -0
  243. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Dialogs.py +0 -0
  244. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Easter.py +0 -0
  245. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Screenshot.py +0 -0
  246. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/libraries/Telnet.py +0 -0
  247. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/fixture.py +0 -0
  248. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/metadata.py +0 -0
  249. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/statistics.py +0 -0
  250. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/suitestatistics.py +0 -0
  251. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/tagsetter.py +0 -0
  252. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/tagstatistics.py +0 -0
  253. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/model/totalstatistics.py +0 -0
  254. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/__init__.py +0 -0
  255. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/console/__init__.py +0 -0
  256. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/console/highlighting.py +0 -0
  257. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/output/pyloggingconf.py +0 -0
  258. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/__init__.py +0 -0
  259. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/__init__.py +0 -0
  260. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/lexer/tokenizer.py +0 -0
  261. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/model/__init__.py +0 -0
  262. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/parser/__init__.py +0 -0
  263. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/parser/blockparsers.py +0 -0
  264. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/parser/fileparser.py +0 -0
  265. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/parser/parser.py +0 -0
  266. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/parsing/suitestructure.py +0 -0
  267. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/pythonpathsetter.py +0 -0
  268. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/__init__.py +0 -0
  269. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/jsexecutionresult.py +0 -0
  270. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/reporting/jswriter.py +0 -0
  271. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/executionerrors.py +0 -0
  272. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/messagefilter.py +0 -0
  273. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/suiteteardownfailed.py +0 -0
  274. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/result/visitor.py +0 -0
  275. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/builder/__init__.py +0 -0
  276. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/randomizer.py +0 -0
  277. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/runkwregister.py +0 -0
  278. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/signalhandler.py +0 -0
  279. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/status.py +0 -0
  280. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/timeouts/__init__.py +0 -0
  281. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/timeouts/posix.py +0 -0
  282. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/running/timeouts/windows.py +0 -0
  283. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/application.py +0 -0
  284. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/argumentparser.py +0 -0
  285. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/asserts.py +0 -0
  286. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/charwidth.py +0 -0
  287. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/compress.py +0 -0
  288. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/encoding.py +0 -0
  289. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/error.py +0 -0
  290. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/etreewrapper.py +0 -0
  291. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/filereader.py +0 -0
  292. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/frange.py +0 -0
  293. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/htmlformatters.py +0 -0
  294. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/markuputils.py +0 -0
  295. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/match.py +0 -0
  296. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/recommendations.py +0 -0
  297. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/restreader.py +0 -0
  298. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robotenv.py +0 -0
  299. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/robotinspect.py +0 -0
  300. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/sortable.py +0 -0
  301. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/utils/typehints.py +0 -0
  302. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/finders.py +0 -0
  303. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/notfound.py +0 -0
  304. {robotframework-6.1rc1 → robotframework-7.0}/src/robot/variables/resolvable.py +0 -0
  305. {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/dependency_links.txt +0 -0
  306. {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/entry_points.txt +0 -0
  307. {robotframework-6.1rc1 → robotframework-7.0}/src/robotframework.egg-info/top_level.txt +0 -0
@@ -14,59 +14,79 @@
14
14
  # limitations under the License.
15
15
 
16
16
  import re
17
+ from typing import Iterator, Sequence
17
18
 
18
19
  from robot.errors import VariableError
19
20
  from robot.utils import is_string
20
21
 
21
22
 
22
- def search_variable(string, identifiers='$@&%*', ignore_errors=False):
23
+ def search_variable(string: str, identifiers: Sequence[str] = '$@&%*',
24
+ ignore_errors: bool = False) -> 'VariableMatch':
23
25
  if not (is_string(string) and '{' in string):
24
26
  return VariableMatch(string)
25
27
  return _search_variable(string, identifiers, ignore_errors)
26
28
 
27
29
 
28
- def contains_variable(string, identifiers='$@&'):
30
+ def contains_variable(string: str, identifiers: Sequence[str] = '$@&') -> bool:
29
31
  match = search_variable(string, identifiers, ignore_errors=True)
30
32
  return bool(match)
31
33
 
32
34
 
33
- def is_variable(string, identifiers='$@&'):
35
+ def is_variable(string: str, identifiers: Sequence[str] = '$@&') -> bool:
34
36
  match = search_variable(string, identifiers, ignore_errors=True)
35
37
  return match.is_variable()
36
38
 
37
39
 
38
- def is_scalar_variable(string):
40
+ def is_scalar_variable(string: str) -> bool:
39
41
  return is_variable(string, '$')
40
42
 
41
43
 
42
- def is_list_variable(string):
44
+ def is_list_variable(string: str) -> bool:
43
45
  return is_variable(string, '@')
44
46
 
45
47
 
46
- def is_dict_variable(string):
48
+ def is_dict_variable(string: str) -> bool:
47
49
  return is_variable(string, '&')
48
50
 
49
51
 
50
- def is_assign(string, identifiers='$@&', allow_assign_mark=False, allow_items=False):
52
+ def is_assign(string: str,
53
+ identifiers: Sequence[str] = '$@&',
54
+ allow_assign_mark: bool = False,
55
+ allow_nested: bool = False,
56
+ allow_items: bool = False) -> bool:
51
57
  match = search_variable(string, identifiers, ignore_errors=True)
52
- return match.is_assign(allow_assign_mark, allow_items=allow_items)
58
+ return match.is_assign(allow_assign_mark, allow_nested, allow_items)
53
59
 
54
60
 
55
- def is_scalar_assign(string, allow_assign_mark=False, allow_items=False):
56
- return is_assign(string, '$', allow_assign_mark, allow_items)
61
+ def is_scalar_assign(string: str,
62
+ allow_assign_mark: bool = False,
63
+ allow_nested: bool = False,
64
+ allow_items: bool = False) -> bool:
65
+ return is_assign(string, '$', allow_assign_mark, allow_nested, allow_items)
57
66
 
58
67
 
59
- def is_list_assign(string, allow_assign_mark=False, allow_items=False):
60
- return is_assign(string, '@', allow_assign_mark, allow_items)
68
+ def is_list_assign(string: str,
69
+ allow_assign_mark: bool = False,
70
+ allow_nested: bool = False,
71
+ allow_items: bool = False) -> bool:
72
+ return is_assign(string, '@', allow_assign_mark, allow_nested, allow_items)
61
73
 
62
74
 
63
- def is_dict_assign(string, allow_assign_mark=False, allow_items=False):
64
- return is_assign(string, '&', allow_assign_mark, allow_items)
75
+ def is_dict_assign(string: str,
76
+ allow_assign_mark: bool = False,
77
+ allow_nested: bool = False,
78
+ allow_items: bool = False) -> bool:
79
+ return is_assign(string, '&', allow_assign_mark, allow_nested, allow_items)
65
80
 
66
81
 
67
82
  class VariableMatch:
68
83
 
69
- def __init__(self, string, identifier=None, base=None, items=(), start=-1, end=-1):
84
+ def __init__(self, string: str,
85
+ identifier: 'str|None' = None,
86
+ base: 'str|None' = None,
87
+ items: 'tuple[str, ...]' = (),
88
+ start: int = -1,
89
+ end: int = -1):
70
90
  self.string = string
71
91
  self.identifier = identifier
72
92
  self.base = base
@@ -84,66 +104,70 @@ class VariableMatch:
84
104
  )
85
105
 
86
106
  @property
87
- def name(self):
88
- return '%s{%s}' % (self.identifier, self.base) if self else None
107
+ def name(self) -> 'str|None':
108
+ return f'{self.identifier}{{{self.base}}}' if self.identifier else None
89
109
 
90
110
  @property
91
- def before(self):
111
+ def before(self) -> str:
92
112
  return self.string[:self.start] if self.identifier else self.string
93
113
 
94
114
  @property
95
- def match(self):
115
+ def match(self) -> 'str|None':
96
116
  return self.string[self.start:self.end] if self.identifier else None
97
117
 
98
118
  @property
99
- def after(self):
100
- return self.string[self.end:] if self.identifier else None
119
+ def after(self) -> str:
120
+ return self.string[self.end:] if self.identifier else ''
101
121
 
102
- def is_variable(self):
122
+ def is_variable(self) -> bool:
103
123
  return bool(self.identifier
104
124
  and self.base
105
125
  and self.start == 0
106
126
  and self.end == len(self.string))
107
127
 
108
- def is_scalar_variable(self):
128
+ def is_scalar_variable(self) -> bool:
109
129
  return self.identifier == '$' and self.is_variable()
110
130
 
111
- def is_list_variable(self):
131
+ def is_list_variable(self) -> bool:
112
132
  return self.identifier == '@' and self.is_variable()
113
133
 
114
- def is_dict_variable(self):
134
+ def is_dict_variable(self) -> bool:
115
135
  return self.identifier == '&' and self.is_variable()
116
136
 
117
- def is_assign(self,
118
- allow_assign_mark=False, allow_nested=False, allow_items=False):
137
+ def is_assign(self, allow_assign_mark: bool = False, allow_nested: bool = False,
138
+ allow_items: bool = False) -> bool:
119
139
  if allow_assign_mark and self.string.endswith('='):
120
140
  match = search_variable(self.string[:-1].rstrip(), ignore_errors=True)
121
- return match.is_assign(allow_items=allow_items)
141
+ return match.is_assign(allow_nested=allow_nested, allow_items=allow_items)
122
142
  return (self.is_variable()
123
143
  and self.identifier in '$@&'
124
144
  and (allow_items or not self.items)
125
145
  and (allow_nested or not search_variable(self.base)))
126
146
 
127
- def is_scalar_assign(self, allow_assign_mark=False, allow_nested=False):
147
+ def is_scalar_assign(self, allow_assign_mark: bool = False,
148
+ allow_nested: bool = False) -> bool:
128
149
  return self.identifier == '$' and self.is_assign(allow_assign_mark, allow_nested)
129
150
 
130
- def is_list_assign(self, allow_assign_mark=False, allow_nested=False):
151
+ def is_list_assign(self, allow_assign_mark: bool = False,
152
+ allow_nested: bool = False) -> bool:
131
153
  return self.identifier == '@' and self.is_assign(allow_assign_mark, allow_nested)
132
154
 
133
- def is_dict_assign(self, allow_assign_mark=False, allow_nested=False):
155
+ def is_dict_assign(self, allow_assign_mark: bool = False,
156
+ allow_nested: bool = False) -> bool:
134
157
  return self.identifier == '&' and self.is_assign(allow_assign_mark, allow_nested)
135
158
 
136
- def __bool__(self):
159
+ def __bool__(self) -> bool:
137
160
  return self.identifier is not None
138
161
 
139
- def __str__(self):
162
+ def __str__(self) -> str:
140
163
  if not self:
141
164
  return '<no match>'
142
165
  items = ''.join('[%s]' % i for i in self.items) if self.items else ''
143
166
  return '%s{%s}%s' % (self.identifier, self.base, items)
144
167
 
145
168
 
146
- def _search_variable(string, identifiers, ignore_errors=False):
169
+ def _search_variable(string: str, identifiers: Sequence[str],
170
+ ignore_errors: bool = False) -> VariableMatch:
147
171
  start = _find_variable_start(string, identifiers)
148
172
  if start < 0:
149
173
  return VariableMatch(string)
@@ -194,7 +218,7 @@ def _search_variable(string, identifiers, ignore_errors=False):
194
218
  raise VariableError(f"Variable '{incomplete}' was not closed properly.")
195
219
  raise VariableError(f"Variable item '{incomplete}' was not closed properly.")
196
220
 
197
- return match if match else VariableMatch(match)
221
+ return match
198
222
 
199
223
 
200
224
  def _find_variable_start(string, identifiers):
@@ -233,26 +257,27 @@ def unescape_variable_syntax(item):
233
257
  return re.sub(r'(\\+)(?=(.+))', handle_escapes, item)
234
258
 
235
259
 
236
- class VariableIterator:
260
+ class VariableMatches:
237
261
 
238
- def __init__(self, string, identifiers='$@&%', ignore_errors=False):
262
+ def __init__(self, string: str, identifiers: Sequence[str] = '$@&%',
263
+ ignore_errors: bool = False):
239
264
  self.string = string
240
265
  self.identifiers = identifiers
241
266
  self.ignore_errors = ignore_errors
242
267
 
243
- def __iter__(self):
268
+ def __iter__(self) -> Iterator[VariableMatch]:
244
269
  remaining = self.string
245
270
  while True:
246
271
  match = search_variable(remaining, self.identifiers, self.ignore_errors)
247
272
  if not match:
248
273
  break
249
274
  remaining = match.after
250
- yield match.before, match.match, remaining
275
+ yield match
251
276
 
252
- def __len__(self):
277
+ def __len__(self) -> int:
253
278
  return sum(1 for _ in self)
254
279
 
255
- def __bool__(self):
280
+ def __bool__(self) -> bool:
256
281
  try:
257
282
  next(iter(self))
258
283
  except StopIteration:
@@ -14,14 +14,12 @@
14
14
  # limitations under the License.
15
15
 
16
16
  from robot.errors import DataError, VariableError
17
- from robot.utils import DotDict, is_dict_like, is_list_like, NormalizedDict, type_name
17
+ from robot.utils import (DotDict, is_dict_like, is_list_like, NormalizedDict, NOT_SET,
18
+ type_name)
18
19
 
19
20
  from .notfound import variable_not_found
20
21
  from .resolvable import GlobalVariableValue, Resolvable
21
- from .search import is_assign
22
-
23
-
24
- NOT_SET = object()
22
+ from .search import is_assign, unescape_variable_syntax
25
23
 
26
24
 
27
25
  class VariableStore:
@@ -48,7 +46,7 @@ class VariableStore:
48
46
  # Recursive resolving may have already removed variable.
49
47
  if name in self.data:
50
48
  self.data.pop(name)
51
- value.report_error(err)
49
+ value.report_error(str(err))
52
50
  variable_not_found('${%s}' % name, self.data)
53
51
  return self.data[name]
54
52
 
@@ -68,7 +66,7 @@ class VariableStore:
68
66
  if decorated:
69
67
  name = self._undecorate(name)
70
68
  return self[name]
71
- except VariableError:
69
+ except DataError:
72
70
  if default is NOT_SET:
73
71
  raise
74
72
  return default
@@ -88,26 +86,26 @@ class VariableStore:
88
86
  self.data[name] = value
89
87
 
90
88
  def _undecorate(self, name):
91
- if not is_assign(name):
92
- raise VariableError("Invalid variable name '%s'." % name)
93
- return name[2:-1]
89
+ if not is_assign(name, allow_nested=True):
90
+ raise DataError(f"Invalid variable name '{name}'.")
91
+ return self._variables.replace_string(
92
+ name[2:-1], custom_unescaper=unescape_variable_syntax
93
+ )
94
94
 
95
95
  def _undecorate_and_validate(self, name, value):
96
96
  undecorated = self._undecorate(name)
97
+ if isinstance(value, Resolvable):
98
+ return undecorated, value
97
99
  if name[0] == '@':
98
100
  if not is_list_like(value):
99
- self._raise_cannot_set_type(name, value, 'list')
101
+ raise DataError(f'Expected list-like value, got {type_name(value)}.')
100
102
  value = list(value)
101
103
  if name[0] == '&':
102
104
  if not is_dict_like(value):
103
- self._raise_cannot_set_type(name, value, 'dictionary')
105
+ raise DataError(f'Expected dictionary-like value, got {type_name(value)}.')
104
106
  value = DotDict(value)
105
107
  return undecorated, value
106
108
 
107
- def _raise_cannot_set_type(self, name, value, expected):
108
- raise VariableError("Cannot set variable '%s': Expected %s-like value, got %s."
109
- % (name, expected, type_name(value)))
110
-
111
109
  def __len__(self):
112
110
  return len(self.data)
113
111
 
@@ -0,0 +1,164 @@
1
+ # Copyright 2008-2015 Nokia Networks
2
+ # Copyright 2016- Robot Framework Foundation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ from contextlib import contextmanager
17
+ from typing import Sequence, TYPE_CHECKING
18
+
19
+ from robot.errors import DataError
20
+ from robot.utils import DotDict, split_from_equals
21
+
22
+ from .resolvable import Resolvable
23
+ from .search import is_assign, is_list_variable, is_dict_variable
24
+
25
+ if TYPE_CHECKING:
26
+ from robot.running.model import Var, Variable
27
+ from .store import VariableStore
28
+
29
+
30
+ class VariableTableSetter:
31
+
32
+ def __init__(self, store: 'VariableStore'):
33
+ self.store = store
34
+
35
+ def set(self, variables: 'Sequence[Variable]', overwrite: bool = False):
36
+ for var in variables:
37
+ try:
38
+ value = VariableResolver.from_variable(var)
39
+ self.store.add(var.name, value, overwrite)
40
+ except DataError as err:
41
+ var.report_error(str(err))
42
+
43
+
44
+ class VariableResolver(Resolvable):
45
+
46
+ def __init__(self, value: Sequence[str], error_reporter=None):
47
+ self.value = tuple(value)
48
+ self.error_reporter = error_reporter
49
+ self._resolving = False
50
+
51
+ @classmethod
52
+ def from_name_and_value(cls, name: str, value: 'str|Sequence[str]',
53
+ separator: 'str|None' = None,
54
+ error_reporter=None) -> 'VariableResolver':
55
+ if not is_assign(name, allow_nested=True):
56
+ raise DataError(f"Invalid variable name '{name}'.")
57
+ if name[0] == '$':
58
+ return ScalarVariableResolver(value, separator, error_reporter)
59
+ if separator is not None:
60
+ raise DataError('Only scalar variables support separators.')
61
+ klass = {'@': ListVariableResolver,
62
+ '&': DictVariableResolver}[name[0]]
63
+ return klass(value, error_reporter)
64
+
65
+ @classmethod
66
+ def from_variable(cls, var: 'Var|Variable') -> 'VariableResolver':
67
+ if var.error:
68
+ raise DataError(var.error)
69
+ return cls.from_name_and_value(var.name, var.value, var.separator,
70
+ getattr(var, 'report_error', None))
71
+
72
+ def resolve(self, variables):
73
+ with self._avoid_recursion:
74
+ return self._replace_variables(variables)
75
+
76
+ @property
77
+ @contextmanager
78
+ def _avoid_recursion(self):
79
+ if self._resolving:
80
+ raise DataError('Recursive variable definition.')
81
+ self._resolving = True
82
+ try:
83
+ yield
84
+ finally:
85
+ self._resolving = False
86
+
87
+ def _replace_variables(self, variables):
88
+ raise NotImplementedError
89
+
90
+ def report_error(self, error):
91
+ if self.error_reporter:
92
+ self.error_reporter(error)
93
+ else:
94
+ raise DataError(f'Error reporter not set. Reported error was: {error}')
95
+
96
+
97
+ class ScalarVariableResolver(VariableResolver):
98
+
99
+ def __init__(self, value: 'str|Sequence[str]', separator: 'str|None' = None,
100
+ error_reporter=None):
101
+ value, separator = self._get_value_and_separator(value, separator)
102
+ super().__init__(value, error_reporter)
103
+ self.separator = separator
104
+
105
+ def _get_value_and_separator(self, value, separator):
106
+ if isinstance(value, str):
107
+ value = [value]
108
+ elif separator is None and value and value[0].startswith('SEPARATOR='):
109
+ separator = value[0][10:]
110
+ value = value[1:]
111
+ return value, separator
112
+
113
+ def _replace_variables(self, variables):
114
+ value, separator = self.value, self.separator
115
+ if self._is_single_value(value, separator):
116
+ return variables.replace_scalar(value[0])
117
+ if separator is None:
118
+ separator = ' '
119
+ else:
120
+ separator = variables.replace_string(separator)
121
+ value = variables.replace_list(value)
122
+ return separator.join(str(item) for item in value)
123
+
124
+ def _is_single_value(self, value, separator):
125
+ return separator is None and len(value) == 1 and not is_list_variable(value[0])
126
+
127
+
128
+ class ListVariableResolver(VariableResolver):
129
+
130
+ def _replace_variables(self, variables):
131
+ return variables.replace_list(self.value)
132
+
133
+
134
+ class DictVariableResolver(VariableResolver):
135
+
136
+ def __init__(self, value: Sequence[str], error_reporter=None):
137
+ super().__init__(tuple(self._yield_formatted(value)), error_reporter)
138
+
139
+ def _yield_formatted(self, values):
140
+ for item in values:
141
+ if is_dict_variable(item):
142
+ yield item
143
+ else:
144
+ name, value = split_from_equals(item)
145
+ if value is None:
146
+ raise DataError(
147
+ f"Invalid dictionary variable item '{item}'. Items must use "
148
+ f"'name=value' syntax or be dictionary variables themselves."
149
+ )
150
+ yield name, value
151
+
152
+ def _replace_variables(self, variables):
153
+ try:
154
+ return DotDict(self._yield_replaced(self.value, variables.replace_scalar))
155
+ except TypeError as err:
156
+ raise DataError(f'Creating dictionary variable failed: {err}')
157
+
158
+ def _yield_replaced(self, values, replace_scalar):
159
+ for item in values:
160
+ if isinstance(item, tuple):
161
+ key, values = item
162
+ yield replace_scalar(key), replace_scalar(values)
163
+ else:
164
+ yield from replace_scalar(item).items()
@@ -61,7 +61,7 @@ class Variables:
61
61
  setter = VariableFileSetter(self.store)
62
62
  return setter.set(path_or_variables, args, overwrite)
63
63
 
64
- def set_from_variable_table(self, variables, overwrite=False):
64
+ def set_from_variable_section(self, variables, overwrite=False):
65
65
  setter = VariableTableSetter(self.store)
66
66
  setter.set(variables, overwrite)
67
67
 
@@ -18,7 +18,7 @@ import sys
18
18
 
19
19
  # Version number typically updated by running `invoke set-version <version>`.
20
20
  # Run `invoke --help set-version` or see tasks.py for details.
21
- VERSION = '6.1rc1'
21
+ VERSION = '7.0'
22
22
 
23
23
 
24
24
  def get_version(naked=False):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: robotframework
3
- Version: 6.1rc1
3
+ Version: 7.0
4
4
  Summary: Generic automation framework for acceptance testing and robotic process automation (RPA)
5
5
  Home-page: https://robotframework.org
6
6
  Author: Pekka Klärck
@@ -10,9 +10,8 @@ Download-URL: https://pypi.org/project/robotframework
10
10
  Project-URL: Source, https://github.com/robotframework/robotframework
11
11
  Project-URL: Issue Tracker, https://github.com/robotframework/robotframework/issues
12
12
  Project-URL: Documentation, https://robotframework.org/robotframework
13
- Project-URL: Release Notes, https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-6.1rc1.rst
13
+ Project-URL: Release Notes, https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-7.0.rst
14
14
  Project-URL: Slack, http://slack.robotframework.org
15
- Project-URL: Twitter, https://twitter.com/robotframework
16
15
  Description: Robot Framework
17
16
  ===============
18
17
 
@@ -64,10 +63,12 @@ Description: Robot Framework
64
63
  For more detailed installation instructions, including installing Python, see
65
64
  `INSTALL.rst <https://github.com/robotframework/robotframework/blob/master/INSTALL.rst>`__.
66
65
 
67
- Robot Framework requires Python 3.6 or newer and runs also on `PyPy <http://pypy.org>`_.
66
+ Robot Framework requires Python 3.8 or newer and runs also on `PyPy <http://pypy.org>`_.
67
+ The latest version that supports Python 3.6 and 3.7 is `Robot Framework 6.1.1`__.
68
68
  If you need to use Python 2, `Jython <http://jython.org>`_ or
69
69
  `IronPython <http://ironpython.net>`_, you can use `Robot Framework 4.1.3`__.
70
70
 
71
+ __ https://github.com/robotframework/robotframework/tree/v6.1.1#readme
71
72
  __ https://github.com/robotframework/robotframework/tree/v4.1.3#readme
72
73
 
73
74
  Example
@@ -132,7 +133,6 @@ Description: Robot Framework
132
133
  - `Forum <https://forum.robotframework.org/>`_
133
134
  - `robotframework-users
134
135
  <https://groups.google.com/group/robotframework-users/>`_ mailing list
135
- - `@robotframework <https://twitter.com/robotframework>`_ on Twitter
136
136
 
137
137
  Contributing
138
138
  ------------
@@ -171,8 +171,6 @@ Classifier: License :: OSI Approved :: Apache Software License
171
171
  Classifier: Operating System :: OS Independent
172
172
  Classifier: Programming Language :: Python :: 3
173
173
  Classifier: Programming Language :: Python :: 3 :: Only
174
- Classifier: Programming Language :: Python :: 3.6
175
- Classifier: Programming Language :: Python :: 3.7
176
174
  Classifier: Programming Language :: Python :: 3.8
177
175
  Classifier: Programming Language :: Python :: 3.9
178
176
  Classifier: Programming Language :: Python :: 3.10
@@ -184,5 +182,5 @@ Classifier: Topic :: Software Development :: Testing
184
182
  Classifier: Topic :: Software Development :: Testing :: Acceptance
185
183
  Classifier: Topic :: Software Development :: Testing :: BDD
186
184
  Classifier: Framework :: Robot Framework
187
- Requires-Python: >=3.6
185
+ Requires-Python: >=3.8
188
186
  Description-Content-Type: text/x-rst
@@ -23,6 +23,7 @@ src/robot/api/exceptions.py
23
23
  src/robot/api/interfaces.py
24
24
  src/robot/api/logger.py
25
25
  src/robot/api/parsing.py
26
+ src/robot/api/py.typed
26
27
  src/robot/conf/__init__.py
27
28
  src/robot/conf/gatherfailed.py
28
29
  src/robot/conf/languages.py
@@ -86,7 +87,6 @@ src/robot/libraries/Easter.py
86
87
  src/robot/libraries/OperatingSystem.py
87
88
  src/robot/libraries/Process.py
88
89
  src/robot/libraries/Remote.py
89
- src/robot/libraries/Reserved.py
90
90
  src/robot/libraries/Screenshot.py
91
91
  src/robot/libraries/String.py
92
92
  src/robot/libraries/Telnet.py
@@ -120,10 +120,9 @@ src/robot/output/__init__.py
120
120
  src/robot/output/debugfile.py
121
121
  src/robot/output/filelogger.py
122
122
  src/robot/output/librarylogger.py
123
- src/robot/output/listenerarguments.py
124
- src/robot/output/listenermethods.py
125
123
  src/robot/output/listeners.py
126
124
  src/robot/output/logger.py
125
+ src/robot/output/loggerapi.py
127
126
  src/robot/output/loggerhelper.py
128
127
  src/robot/output/output.py
129
128
  src/robot/output/pyloggingconf.py
@@ -181,24 +180,24 @@ src/robot/running/__init__.py
181
180
  src/robot/running/bodyrunner.py
182
181
  src/robot/running/context.py
183
182
  src/robot/running/dynamicmethods.py
184
- src/robot/running/handlers.py
185
- src/robot/running/handlerstore.py
186
183
  src/robot/running/importer.py
184
+ src/robot/running/invalidkeyword.py
185
+ src/robot/running/keywordfinder.py
186
+ src/robot/running/keywordimplementation.py
187
+ src/robot/running/librarykeyword.py
187
188
  src/robot/running/librarykeywordrunner.py
188
189
  src/robot/running/libraryscopes.py
189
190
  src/robot/running/model.py
190
- src/robot/running/modelcombiner.py
191
191
  src/robot/running/namespace.py
192
192
  src/robot/running/outputcapture.py
193
193
  src/robot/running/randomizer.py
194
+ src/robot/running/resourcemodel.py
194
195
  src/robot/running/runkwregister.py
195
196
  src/robot/running/signalhandler.py
196
197
  src/robot/running/status.py
197
198
  src/robot/running/statusreporter.py
198
199
  src/robot/running/suiterunner.py
199
200
  src/robot/running/testlibraries.py
200
- src/robot/running/usererrorhandler.py
201
- src/robot/running/userkeyword.py
202
201
  src/robot/running/userkeywordrunner.py
203
202
  src/robot/running/arguments/__init__.py
204
203
  src/robot/running/arguments/argumentconverter.py
@@ -210,6 +209,8 @@ src/robot/running/arguments/argumentvalidator.py
210
209
  src/robot/running/arguments/customconverters.py
211
210
  src/robot/running/arguments/embedded.py
212
211
  src/robot/running/arguments/typeconverters.py
212
+ src/robot/running/arguments/typeinfo.py
213
+ src/robot/running/arguments/typeinfoparser.py
213
214
  src/robot/running/arguments/typevalidator.py
214
215
  src/robot/running/builder/__init__.py
215
216
  src/robot/running/builder/builders.py
@@ -241,6 +242,7 @@ src/robot/utils/markupwriters.py
241
242
  src/robot/utils/match.py
242
243
  src/robot/utils/misc.py
243
244
  src/robot/utils/normalizing.py
245
+ src/robot/utils/notset.py
244
246
  src/robot/utils/platform.py
245
247
  src/robot/utils/recommendations.py
246
248
  src/robot/utils/restreader.py
@@ -33,9 +33,9 @@ and bug fixes. **MORE intro stuff...**
33
33
  All issues targeted for Robot Framework {version.milestone} can be found
34
34
  from the `issue tracker milestone`_.
35
35
 
36
- Questions and comments related to the release can be sent to the
37
- `robotframework-users`_ mailing list or to `Robot Framework Slack`_,
38
- and possible bugs submitted to the `issue tracker`_.
36
+ Questions and comments related to the release can be sent to the `#devel`
37
+ channel on `Robot Framework Slack`_ and possible bugs submitted to
38
+ the `issue tracker`_.
39
39
 
40
40
  **REMOVE ``--pre`` from the next command with final releases.**
41
41
  If you have pip_ installed, just run
@@ -50,9 +50,9 @@ to install the latest available release or use
50
50
 
51
51
  pip install robotframework=={version}
52
52
 
53
- to install exactly this version. Alternatively you can download the source
54
- distribution from PyPI_ and install it manually. For more details and other
55
- installation approaches, see the `installation instructions`_.
53
+ to install exactly this version. Alternatively you can download the package
54
+ from PyPI_ and install it manually. For more details and other installation
55
+ approaches, see the `installation instructions`_.
56
56
 
57
57
  Robot Framework {version} was released on {date}.
58
58