robotframework 6.1.1__zip → 7.0a1__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 (288) hide show
  1. {robotframework-6.1.1/src/robotframework.egg-info → robotframework-7.0a1}/PKG-INFO +3 -6
  2. {robotframework-6.1.1 → robotframework-7.0a1}/setup.py +2 -5
  3. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/api/interfaces.py +35 -48
  4. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/api/parsing.py +4 -2
  5. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/conf/gatherfailed.py +2 -2
  6. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/conf/languages.py +0 -9
  7. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/conf/settings.py +8 -5
  8. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/log.css +4 -0
  9. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/log.html +9 -1
  10. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/model.js +2 -4
  11. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/testdata.js +10 -3
  12. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/template.py +3 -3
  13. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/builder.py +0 -8
  14. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/datatypes.py +9 -10
  15. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/htmlutils.py +4 -7
  16. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/jsonbuilder.py +14 -10
  17. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/model.py +13 -25
  18. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/robotbuilder.py +13 -3
  19. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/xmlbuilder.py +8 -8
  20. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/xmlwriter.py +12 -38
  21. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/BuiltIn.py +215 -189
  22. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Collections.py +2 -9
  23. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/DateTime.py +1 -1
  24. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/OperatingSystem.py +4 -3
  25. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Process.py +26 -27
  26. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Remote.py +40 -36
  27. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/String.py +4 -4
  28. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/XML.py +7 -8
  29. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/__init__.py +2 -2
  30. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/__init__.py +4 -4
  31. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/body.py +14 -6
  32. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/configurer.py +15 -11
  33. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/control.py +151 -81
  34. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/filter.py +31 -25
  35. robotframework-7.0a1/src/robot/model/keyword.py +70 -0
  36. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/message.py +19 -10
  37. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/namepatterns.py +3 -25
  38. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/stats.py +9 -15
  39. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/tags.py +1 -1
  40. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/testcase.py +12 -21
  41. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/testsuite.py +16 -22
  42. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/visitor.py +35 -8
  43. robotframework-7.0a1/src/robot/output/console/dotted.py +90 -0
  44. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/console/quiet.py +3 -2
  45. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/console/verbose.py +60 -60
  46. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/debugfile.py +36 -23
  47. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/filelogger.py +16 -13
  48. robotframework-7.0a1/src/robot/output/listeners.py +586 -0
  49. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/logger.py +164 -77
  50. robotframework-7.0a1/src/robot/output/loggerapi.py +152 -0
  51. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/loggerhelper.py +23 -56
  52. robotframework-7.0a1/src/robot/output/output.py +158 -0
  53. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/stdoutlogsplitter.py +8 -5
  54. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/xmllogger.py +163 -109
  55. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/blocklexers.py +17 -13
  56. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/context.py +12 -2
  57. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/lexer.py +1 -1
  58. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/settings.py +6 -3
  59. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/statementlexers.py +39 -10
  60. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/tokens.py +27 -29
  61. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/model/blocks.py +19 -6
  62. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/model/statements.py +184 -84
  63. robotframework-7.0a1/src/robot/parsing/model/visitor.py +102 -0
  64. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/expandkeywordmatcher.py +1 -1
  65. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/jsbuildingcontext.py +8 -6
  66. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/jsmodelbuilders.py +88 -61
  67. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/stringcache.py +4 -3
  68. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/xunitwriter.py +15 -21
  69. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/__init__.py +3 -2
  70. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/configurer.py +12 -9
  71. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/flattenkeywordmatcher.py +8 -8
  72. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/keywordremover.py +71 -54
  73. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/merger.py +1 -1
  74. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/model.py +400 -316
  75. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/modeldeprecation.py +9 -3
  76. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/resultbuilder.py +21 -23
  77. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/xmlelementhandlers.py +76 -40
  78. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/__init__.py +1 -1
  79. robotframework-7.0a1/src/robot/running/arguments/argumentconverter.py +101 -0
  80. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/argumentmapper.py +16 -14
  81. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/argumentresolver.py +41 -33
  82. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/argumentspec.py +24 -90
  83. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/argumentvalidator.py +34 -27
  84. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/customconverters.py +14 -11
  85. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/embedded.py +23 -26
  86. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/typeconverters.py +175 -213
  87. robotframework-7.0a1/src/robot/running/arguments/typeinfo.py +367 -0
  88. robotframework-7.0a1/src/robot/running/arguments/typevalidator.py +62 -0
  89. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/bodyrunner.py +83 -68
  90. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/builder/parsers.py +8 -10
  91. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/builder/settings.py +9 -17
  92. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/builder/transformers.py +166 -308
  93. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/context.py +80 -25
  94. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/handlers.py +11 -16
  95. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/handlerstore.py +1 -1
  96. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/librarykeywordrunner.py +9 -17
  97. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/model.py +109 -32
  98. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/namespace.py +18 -19
  99. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/statusreporter.py +13 -12
  100. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/suiterunner.py +15 -17
  101. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/testlibraries.py +33 -40
  102. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/usererrorhandler.py +8 -8
  103. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/userkeyword.py +13 -8
  104. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/userkeywordrunner.py +18 -21
  105. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/testdoc.py +18 -13
  106. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/__init__.py +50 -35
  107. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/connectioncache.py +64 -59
  108. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/encodingsniffer.py +1 -1
  109. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/escaping.py +11 -9
  110. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/markupwriters.py +20 -13
  111. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/normalizing.py +9 -24
  112. robotframework-7.0a1/src/robot/utils/notset.py +33 -0
  113. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/platform.py +15 -5
  114. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/robotpath.py +1 -0
  115. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/robottime.py +120 -88
  116. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/robottypes.py +16 -31
  117. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/setter.py +0 -5
  118. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/text.py +7 -4
  119. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/unic.py +2 -2
  120. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/__init__.py +2 -2
  121. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/assigner.py +17 -19
  122. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/evaluation.py +20 -17
  123. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/filesetter.py +80 -80
  124. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/replacer.py +33 -36
  125. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/scopes.py +3 -3
  126. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/search.py +66 -41
  127. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/store.py +14 -16
  128. robotframework-7.0a1/src/robot/variables/tablesetter.py +164 -0
  129. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/variables.py +1 -1
  130. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/version.py +1 -1
  131. {robotframework-6.1.1 → robotframework-7.0a1/src/robotframework.egg-info}/PKG-INFO +3 -6
  132. {robotframework-6.1.1 → robotframework-7.0a1}/src/robotframework.egg-info/SOURCES.txt +3 -4
  133. {robotframework-6.1.1 → robotframework-7.0a1}/tasks.py +6 -6
  134. robotframework-6.1.1/src/robot/libraries/Reserved.py +0 -48
  135. robotframework-6.1.1/src/robot/model/keyword.py +0 -173
  136. robotframework-6.1.1/src/robot/output/console/dotted.py +0 -90
  137. robotframework-6.1.1/src/robot/output/listenerarguments.py +0 -165
  138. robotframework-6.1.1/src/robot/output/listenermethods.py +0 -113
  139. robotframework-6.1.1/src/robot/output/listeners.py +0 -174
  140. robotframework-6.1.1/src/robot/output/output.py +0 -95
  141. robotframework-6.1.1/src/robot/parsing/model/visitor.py +0 -67
  142. robotframework-6.1.1/src/robot/running/arguments/argumentconverter.py +0 -79
  143. robotframework-6.1.1/src/robot/running/arguments/typevalidator.py +0 -56
  144. robotframework-6.1.1/src/robot/running/modelcombiner.py +0 -32
  145. robotframework-6.1.1/src/robot/variables/tablesetter.py +0 -156
  146. {robotframework-6.1.1 → robotframework-7.0a1}/AUTHORS.rst +0 -0
  147. {robotframework-6.1.1 → robotframework-7.0a1}/BUILD.rst +0 -0
  148. {robotframework-6.1.1 → robotframework-7.0a1}/CONTRIBUTING.rst +0 -0
  149. {robotframework-6.1.1 → robotframework-7.0a1}/COPYRIGHT.txt +0 -0
  150. {robotframework-6.1.1 → robotframework-7.0a1}/INSTALL.rst +0 -0
  151. {robotframework-6.1.1 → robotframework-7.0a1}/LICENSE.txt +0 -0
  152. {robotframework-6.1.1 → robotframework-7.0a1}/MANIFEST.in +0 -0
  153. {robotframework-6.1.1 → robotframework-7.0a1}/README.rst +0 -0
  154. {robotframework-6.1.1 → robotframework-7.0a1}/setup.cfg +0 -0
  155. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/__init__.py +0 -0
  156. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/__main__.py +0 -0
  157. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/api/__init__.py +0 -0
  158. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/api/deco.py +0 -0
  159. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/api/exceptions.py +0 -0
  160. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/api/logger.py +0 -0
  161. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/conf/__init__.py +0 -0
  162. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/errors.py +0 -0
  163. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/__init__.py +0 -0
  164. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/common/__init__.py +0 -0
  165. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/common/js_disabled.css +0 -0
  166. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/common/storage.js +0 -0
  167. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/htmlfilewriter.py +0 -0
  168. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/jsonwriter.py +0 -0
  169. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/lib/__init__.py +0 -0
  170. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/lib/jquery.highlight.min.js +0 -0
  171. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/lib/jquery.min.js +0 -0
  172. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/lib/jquery.tablesorter.min.js +0 -0
  173. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/lib/jquery.tmpl.min.js +0 -0
  174. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/lib/jsxcompressor.min.js +0 -0
  175. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/__init__.py +0 -0
  176. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/doc_formatting.css +0 -0
  177. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/libdoc.css +0 -0
  178. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/libdoc.html +0 -0
  179. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/print.css +0 -0
  180. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/pygments.css +0 -0
  181. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/__init__.py +0 -0
  182. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/common.css +0 -0
  183. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/doc_formatting.css +0 -0
  184. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/fileloading.js +0 -0
  185. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/log.js +0 -0
  186. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/print.css +0 -0
  187. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/report.css +0 -0
  188. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/report.html +0 -0
  189. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/util.js +0 -0
  190. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/rebot/view.js +0 -0
  191. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/testdoc/__init__.py +0 -0
  192. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/testdoc/testdoc.css +0 -0
  193. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/htmldata/testdoc/testdoc.html +0 -0
  194. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdoc.py +0 -0
  195. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/__init__.py +0 -0
  196. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/consoleviewer.py +0 -0
  197. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/htmlwriter.py +0 -0
  198. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/jsonwriter.py +0 -0
  199. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/output.py +0 -0
  200. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/standardtypes.py +0 -0
  201. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libdocpkg/writer.py +0 -0
  202. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Dialogs.py +0 -0
  203. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Easter.py +0 -0
  204. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Screenshot.py +0 -0
  205. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/Telnet.py +0 -0
  206. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/libraries/dialogs_py.py +0 -0
  207. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/fixture.py +0 -0
  208. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/itemlist.py +0 -0
  209. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/metadata.py +0 -0
  210. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/modelobject.py +0 -0
  211. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/modifier.py +0 -0
  212. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/statistics.py +0 -0
  213. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/suitestatistics.py +0 -0
  214. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/tagsetter.py +0 -0
  215. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/tagstatistics.py +0 -0
  216. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/model/totalstatistics.py +0 -0
  217. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/__init__.py +0 -0
  218. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/console/__init__.py +0 -0
  219. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/console/highlighting.py +0 -0
  220. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/librarylogger.py +0 -0
  221. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/output/pyloggingconf.py +0 -0
  222. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/__init__.py +0 -0
  223. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/__init__.py +0 -0
  224. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/lexer/tokenizer.py +0 -0
  225. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/model/__init__.py +0 -0
  226. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/parser/__init__.py +0 -0
  227. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/parser/blockparsers.py +0 -0
  228. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/parser/fileparser.py +0 -0
  229. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/parser/parser.py +0 -0
  230. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/parsing/suitestructure.py +0 -0
  231. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/pythonpathsetter.py +0 -0
  232. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/rebot.py +0 -0
  233. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/__init__.py +0 -0
  234. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/jsexecutionresult.py +0 -0
  235. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/jswriter.py +0 -0
  236. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/logreportwriters.py +0 -0
  237. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/outputwriter.py +0 -0
  238. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/reporting/resultwriter.py +0 -0
  239. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/executionerrors.py +0 -0
  240. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/executionresult.py +0 -0
  241. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/messagefilter.py +0 -0
  242. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/suiteteardownfailed.py +0 -0
  243. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/result/visitor.py +0 -0
  244. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/run.py +0 -0
  245. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/__init__.py +0 -0
  246. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/arguments/argumentparser.py +0 -0
  247. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/builder/__init__.py +0 -0
  248. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/builder/builders.py +0 -0
  249. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/dynamicmethods.py +0 -0
  250. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/importer.py +0 -0
  251. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/libraryscopes.py +0 -0
  252. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/outputcapture.py +0 -0
  253. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/randomizer.py +0 -0
  254. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/runkwregister.py +0 -0
  255. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/signalhandler.py +0 -0
  256. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/status.py +0 -0
  257. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/timeouts/__init__.py +0 -0
  258. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/timeouts/posix.py +0 -0
  259. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/running/timeouts/windows.py +0 -0
  260. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/application.py +0 -0
  261. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/argumentparser.py +0 -0
  262. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/asserts.py +0 -0
  263. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/charwidth.py +0 -0
  264. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/compress.py +0 -0
  265. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/dotdict.py +0 -0
  266. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/encoding.py +0 -0
  267. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/error.py +0 -0
  268. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/etreewrapper.py +0 -0
  269. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/filereader.py +0 -0
  270. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/frange.py +0 -0
  271. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/htmlformatters.py +0 -0
  272. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/importer.py +0 -0
  273. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/markuputils.py +0 -0
  274. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/match.py +0 -0
  275. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/misc.py +0 -0
  276. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/recommendations.py +0 -0
  277. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/restreader.py +0 -0
  278. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/robotenv.py +0 -0
  279. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/robotinspect.py +0 -0
  280. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/robotio.py +0 -0
  281. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/sortable.py +0 -0
  282. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/utils/typehints.py +0 -0
  283. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/finders.py +0 -0
  284. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/notfound.py +0 -0
  285. {robotframework-6.1.1 → robotframework-7.0a1}/src/robot/variables/resolvable.py +0 -0
  286. {robotframework-6.1.1 → robotframework-7.0a1}/src/robotframework.egg-info/dependency_links.txt +0 -0
  287. {robotframework-6.1.1 → robotframework-7.0a1}/src/robotframework.egg-info/entry_points.txt +0 -0
  288. {robotframework-6.1.1 → robotframework-7.0a1}/src/robotframework.egg-info/top_level.txt +0 -0
@@ -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.1.1'
21
+ VERSION = '7.0a1'
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.1.1
3
+ Version: 7.0a1
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.1.1.rst
13
+ Project-URL: Release Notes, https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-7.0a1.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
 
@@ -171,8 +170,6 @@ Classifier: License :: OSI Approved :: Apache Software License
171
170
  Classifier: Operating System :: OS Independent
172
171
  Classifier: Programming Language :: Python :: 3
173
172
  Classifier: Programming Language :: Python :: 3 :: Only
174
- Classifier: Programming Language :: Python :: 3.6
175
- Classifier: Programming Language :: Python :: 3.7
176
173
  Classifier: Programming Language :: Python :: 3.8
177
174
  Classifier: Programming Language :: Python :: 3.9
178
175
  Classifier: Programming Language :: Python :: 3.10
@@ -184,5 +181,5 @@ Classifier: Topic :: Software Development :: Testing
184
181
  Classifier: Topic :: Software Development :: Testing :: Acceptance
185
182
  Classifier: Topic :: Software Development :: Testing :: BDD
186
183
  Classifier: Framework :: Robot Framework
187
- Requires-Python: >=3.6
184
+ Requires-Python: >=3.8
188
185
  Description-Content-Type: text/x-rst
@@ -86,7 +86,6 @@ src/robot/libraries/Easter.py
86
86
  src/robot/libraries/OperatingSystem.py
87
87
  src/robot/libraries/Process.py
88
88
  src/robot/libraries/Remote.py
89
- src/robot/libraries/Reserved.py
90
89
  src/robot/libraries/Screenshot.py
91
90
  src/robot/libraries/String.py
92
91
  src/robot/libraries/Telnet.py
@@ -120,10 +119,9 @@ src/robot/output/__init__.py
120
119
  src/robot/output/debugfile.py
121
120
  src/robot/output/filelogger.py
122
121
  src/robot/output/librarylogger.py
123
- src/robot/output/listenerarguments.py
124
- src/robot/output/listenermethods.py
125
122
  src/robot/output/listeners.py
126
123
  src/robot/output/logger.py
124
+ src/robot/output/loggerapi.py
127
125
  src/robot/output/loggerhelper.py
128
126
  src/robot/output/output.py
129
127
  src/robot/output/pyloggingconf.py
@@ -187,7 +185,6 @@ src/robot/running/importer.py
187
185
  src/robot/running/librarykeywordrunner.py
188
186
  src/robot/running/libraryscopes.py
189
187
  src/robot/running/model.py
190
- src/robot/running/modelcombiner.py
191
188
  src/robot/running/namespace.py
192
189
  src/robot/running/outputcapture.py
193
190
  src/robot/running/randomizer.py
@@ -210,6 +207,7 @@ src/robot/running/arguments/argumentvalidator.py
210
207
  src/robot/running/arguments/customconverters.py
211
208
  src/robot/running/arguments/embedded.py
212
209
  src/robot/running/arguments/typeconverters.py
210
+ src/robot/running/arguments/typeinfo.py
213
211
  src/robot/running/arguments/typevalidator.py
214
212
  src/robot/running/builder/__init__.py
215
213
  src/robot/running/builder/builders.py
@@ -241,6 +239,7 @@ src/robot/utils/markupwriters.py
241
239
  src/robot/utils/match.py
242
240
  src/robot/utils/misc.py
243
241
  src/robot/utils/normalizing.py
242
+ src/robot/utils/notset.py
244
243
  src/robot/utils/platform.py
245
244
  src/robot/utils/recommendations.py
246
245
  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
 
@@ -1,48 +0,0 @@
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 robot.running import RUN_KW_REGISTER
17
-
18
-
19
- RESERVED_KEYWORDS = ['for', 'while', 'break', 'continue', 'end',
20
- 'if', 'else', 'elif', 'else if', 'return']
21
-
22
-
23
- class Reserved:
24
- ROBOT_LIBRARY_SCOPE = 'GLOBAL'
25
-
26
- def __init__(self):
27
- for kw in RESERVED_KEYWORDS:
28
- self._add_reserved(kw)
29
-
30
- def _add_reserved(self, kw):
31
- RUN_KW_REGISTER.register_run_keyword('Reserved', kw,
32
- args_to_process=0,
33
- deprecation_warning=False)
34
- self.__dict__[kw] = lambda *args, **kwargs: self._run_reserved(kw)
35
-
36
- def _run_reserved(self, kw):
37
- error = "'%s' is a reserved keyword." % kw.title()
38
- if kw in ('for', 'end', 'if', 'else', 'else if'):
39
- error += " It must be an upper case '%s'" % kw.upper()
40
- if kw in ('else', 'else if'):
41
- error += " and follow an opening 'IF'"
42
- if kw == 'end':
43
- error += " when used as a marker to close a block."
44
- else:
45
- error += " when used as a marker."
46
- if kw == 'elif':
47
- error += " The marker to use with 'IF' is 'ELSE IF'."
48
- raise Exception(error)
@@ -1,173 +0,0 @@
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 typing import cast, Sequence, Type, TYPE_CHECKING
17
- import warnings
18
-
19
- from .body import Body, BodyItem, BodyItemParent
20
- from .itemlist import ItemList
21
- from .modelobject import DataDict
22
-
23
- if TYPE_CHECKING:
24
- from .visitor import SuiteVisitor
25
-
26
-
27
- @Body.register
28
- class Keyword(BodyItem):
29
- """Base model for a single keyword.
30
-
31
- Extended by :class:`robot.running.model.Keyword` and
32
- :class:`robot.result.model.Keyword`.
33
- """
34
- repr_args = ('name', 'args', 'assign')
35
- __slots__ = ['_name', 'args', 'assign', 'type']
36
-
37
- def __init__(self, name: 'str|None' = '',
38
- args: Sequence[str] = (),
39
- assign: Sequence[str] = (),
40
- type: str = BodyItem.KEYWORD,
41
- parent: BodyItemParent = None):
42
- self.name = name
43
- self.args = tuple(args)
44
- self.assign = tuple(assign)
45
- self.type = type
46
- self.parent = parent
47
-
48
- @property
49
- def name(self) -> 'str|None':
50
- return self._name
51
-
52
- @name.setter
53
- def name(self, name: 'str|None'):
54
- self._name = name
55
-
56
- @property
57
- def id(self) -> 'str|None':
58
- if not self:
59
- return None
60
- return super().id
61
-
62
- def visit(self, visitor: 'SuiteVisitor'):
63
- """:mod:`Visitor interface <robot.model.visitor>` entry-point."""
64
- if self:
65
- visitor.visit_keyword(self)
66
-
67
- def __bool__(self) -> bool:
68
- return self.name is not None
69
-
70
- def __str__(self) -> str:
71
- parts = list(self.assign) + [self.name] + list(self.args)
72
- return ' '.join(str(p) for p in parts)
73
-
74
- def to_dict(self) -> DataDict:
75
- data: DataDict = {'name': self.name}
76
- if self.args:
77
- data['args'] = self.args
78
- if self.assign:
79
- data['assign'] = self.assign
80
- return data
81
-
82
-
83
- # FIXME: Remote in RF 7.
84
- class Keywords(ItemList[BodyItem]):
85
- """A list-like object representing keywords in a suite, a test or a keyword.
86
-
87
- Read-only and deprecated since Robot Framework 4.0.
88
- """
89
- __slots__ = []
90
- deprecation_message = (
91
- "'keywords' attribute is read-only and deprecated since Robot Framework 4.0. "
92
- "Use 'body', 'setup' or 'teardown' instead."
93
- )
94
-
95
- def __init__(self, parent: BodyItemParent = None,
96
- keywords: Sequence[BodyItem] = ()):
97
- warnings.warn(self.deprecation_message, UserWarning)
98
- ItemList.__init__(self, object, {'parent': parent})
99
- if keywords:
100
- ItemList.extend(self, keywords)
101
-
102
- @property
103
- def setup(self) -> 'Keyword|None':
104
- if self and self[0].type == 'SETUP':
105
- return cast(Keyword, self[0])
106
- return None
107
-
108
- @setup.setter
109
- def setup(self, kw):
110
- self.raise_deprecation_error()
111
-
112
- def create_setup(self, *args, **kwargs):
113
- self.raise_deprecation_error()
114
-
115
- @property
116
- def teardown(self) -> 'Keyword|None':
117
- if self and self[-1].type == 'TEARDOWN':
118
- return cast(Keyword, self[-1])
119
- return None
120
-
121
- @teardown.setter
122
- def teardown(self, kw: Keyword):
123
- self.raise_deprecation_error()
124
-
125
- def create_teardown(self, *args, **kwargs):
126
- self.raise_deprecation_error()
127
-
128
- @property
129
- def all(self) -> 'Keywords':
130
- """Iterates over all keywords, including setup and teardown."""
131
- return self
132
-
133
- @property
134
- def normal(self) -> 'list[BodyItem]':
135
- """Iterates over normal keywords, omitting setup and teardown."""
136
- return [kw for kw in self if kw.type not in ('SETUP', 'TEARDOWN')]
137
-
138
- def __setitem__(self, index: int, item: Keyword):
139
- self.raise_deprecation_error()
140
-
141
- def create(self, *args, **kwargs):
142
- self.raise_deprecation_error()
143
-
144
- def append(self, item: Keyword):
145
- self.raise_deprecation_error()
146
-
147
- def extend(self, items: Sequence[Keyword]):
148
- self.raise_deprecation_error()
149
-
150
- def insert(self, index: int, item: Keyword):
151
- self.raise_deprecation_error()
152
-
153
- def pop(self, *index: int):
154
- self.raise_deprecation_error()
155
-
156
- def remove(self, item: Keyword):
157
- self.raise_deprecation_error()
158
-
159
- def clear(self):
160
- self.raise_deprecation_error()
161
-
162
- def __delitem__(self, index: int):
163
- self.raise_deprecation_error()
164
-
165
- def sort(self):
166
- self.raise_deprecation_error()
167
-
168
- def reverse(self):
169
- self.raise_deprecation_error()
170
-
171
- @classmethod
172
- def raise_deprecation_error(cls: 'Type[Keywords]'):
173
- raise AttributeError(cls.deprecation_message)
@@ -1,90 +0,0 @@
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
- import sys
17
-
18
- from robot.model import SuiteVisitor
19
- from robot.utils import plural_or_not, secs_to_timestr
20
-
21
- from .highlighting import HighlightingStream
22
-
23
-
24
- class DottedOutput:
25
-
26
- def __init__(self, width=78, colors='AUTO', stdout=None, stderr=None):
27
- self._width = width
28
- self._stdout = HighlightingStream(stdout or sys.__stdout__, colors)
29
- self._stderr = HighlightingStream(stderr or sys.__stderr__, colors)
30
- self._markers_on_row = 0
31
-
32
- def start_suite(self, suite):
33
- if not suite.parent:
34
- self._stdout.write("Running suite '%s' with %d %s%s.\n"
35
- % (suite.name, suite.test_count,
36
- 'test' if not suite.rpa else 'task',
37
- plural_or_not(suite.test_count)))
38
- self._stdout.write('=' * self._width + '\n')
39
-
40
- def end_test(self, test):
41
- if self._markers_on_row == self._width:
42
- self._stdout.write('\n')
43
- self._markers_on_row = 0
44
- self._markers_on_row += 1
45
- if test.passed:
46
- self._stdout.write('.')
47
- elif test.skipped:
48
- self._stdout.highlight('s', 'SKIP')
49
- elif test.tags.robot('exit'):
50
- self._stdout.write('x')
51
- else:
52
- self._stdout.highlight('F', 'FAIL')
53
-
54
- def end_suite(self, suite):
55
- if not suite.parent:
56
- self._stdout.write('\n')
57
- StatusReporter(self._stdout, self._width).report(suite)
58
- self._stdout.write('\n')
59
-
60
- def message(self, msg):
61
- if msg.level in ('WARN', 'ERROR'):
62
- self._stderr.error(msg.message, msg.level)
63
-
64
- def output_file(self, name, path):
65
- self._stdout.write('%-8s %s\n' % (name+':', path))
66
-
67
-
68
- class StatusReporter(SuiteVisitor):
69
-
70
- def __init__(self, stream, width):
71
- self._stream = stream
72
- self._width = width
73
-
74
- def report(self, suite):
75
- suite.visit(self)
76
- stats = suite.statistics
77
- self._stream.write("%s\nRun suite '%s' with %d %s%s in %s.\n\n"
78
- % ('=' * self._width, suite.name, stats.total,
79
- 'test' if not suite.rpa else 'task',
80
- plural_or_not(stats.total),
81
- secs_to_timestr(suite.elapsedtime/1000.0)))
82
- self._stream.highlight(suite.status + ('PED' if suite.status == 'SKIP' else 'ED'), suite.status)
83
- self._stream.write('\n%s\n' % stats.message)
84
-
85
- def visit_test(self, test):
86
- if test.failed and not test.tags.robot('exit'):
87
- self._stream.write('-' * self._width + '\n')
88
- self._stream.highlight('FAIL')
89
- self._stream.write(': %s\n%s\n' % (test.longname,
90
- test.message.strip()))