robotframework 6.1rc1__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.1rc1/src/robotframework.egg-info → robotframework-7.0a1}/PKG-INFO +3 -6
  2. {robotframework-6.1rc1 → robotframework-7.0a1}/setup.py +2 -5
  3. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/api/interfaces.py +36 -49
  4. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/api/parsing.py +4 -2
  5. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/conf/gatherfailed.py +2 -2
  6. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/conf/languages.py +61 -25
  7. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/conf/settings.py +8 -5
  8. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/log.css +4 -0
  9. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/log.html +9 -1
  10. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/model.js +2 -4
  11. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/testdata.js +10 -3
  12. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/template.py +3 -3
  13. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/builder.py +0 -8
  14. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/datatypes.py +9 -10
  15. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/htmlutils.py +4 -7
  16. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/jsonbuilder.py +14 -10
  17. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/model.py +13 -25
  18. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/robotbuilder.py +14 -4
  19. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/xmlbuilder.py +8 -8
  20. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/xmlwriter.py +12 -38
  21. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/BuiltIn.py +215 -189
  22. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/Collections.py +2 -9
  23. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/DateTime.py +1 -1
  24. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/OperatingSystem.py +4 -3
  25. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/Process.py +26 -27
  26. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/Remote.py +40 -36
  27. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/String.py +4 -4
  28. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/XML.py +7 -8
  29. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/__init__.py +2 -2
  30. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/dialogs_py.py +14 -2
  31. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/__init__.py +4 -4
  32. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/body.py +14 -6
  33. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/configurer.py +19 -15
  34. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/control.py +155 -85
  35. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/filter.py +31 -25
  36. robotframework-7.0a1/src/robot/model/keyword.py +70 -0
  37. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/message.py +19 -10
  38. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/modelobject.py +2 -8
  39. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/modifier.py +1 -1
  40. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/namepatterns.py +3 -25
  41. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/stats.py +9 -15
  42. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/tags.py +1 -1
  43. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/testcase.py +12 -21
  44. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/testsuite.py +43 -24
  45. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/visitor.py +35 -8
  46. robotframework-7.0a1/src/robot/output/console/dotted.py +90 -0
  47. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/console/quiet.py +3 -2
  48. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/console/verbose.py +60 -60
  49. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/debugfile.py +36 -23
  50. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/filelogger.py +16 -13
  51. robotframework-7.0a1/src/robot/output/listeners.py +586 -0
  52. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/logger.py +164 -77
  53. robotframework-7.0a1/src/robot/output/loggerapi.py +152 -0
  54. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/loggerhelper.py +23 -56
  55. robotframework-7.0a1/src/robot/output/output.py +158 -0
  56. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/stdoutlogsplitter.py +8 -5
  57. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/xmllogger.py +163 -109
  58. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/lexer/blocklexers.py +17 -13
  59. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/lexer/context.py +12 -2
  60. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/lexer/lexer.py +1 -1
  61. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/lexer/settings.py +6 -3
  62. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/lexer/statementlexers.py +39 -10
  63. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/lexer/tokens.py +27 -29
  64. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/model/blocks.py +19 -6
  65. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/model/statements.py +184 -84
  66. robotframework-7.0a1/src/robot/parsing/model/visitor.py +102 -0
  67. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/reporting/expandkeywordmatcher.py +1 -1
  68. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/reporting/jsbuildingcontext.py +8 -6
  69. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/reporting/jsmodelbuilders.py +88 -61
  70. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/reporting/stringcache.py +4 -3
  71. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/reporting/xunitwriter.py +15 -21
  72. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/__init__.py +3 -2
  73. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/configurer.py +12 -9
  74. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/flattenkeywordmatcher.py +8 -8
  75. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/keywordremover.py +71 -54
  76. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/merger.py +1 -1
  77. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/model.py +400 -316
  78. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/modeldeprecation.py +9 -3
  79. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/resultbuilder.py +21 -23
  80. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/xmlelementhandlers.py +76 -40
  81. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/run.py +1 -1
  82. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/__init__.py +1 -1
  83. robotframework-7.0a1/src/robot/running/arguments/argumentconverter.py +101 -0
  84. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/arguments/argumentmapper.py +16 -14
  85. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/arguments/argumentparser.py +3 -1
  86. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/arguments/argumentresolver.py +41 -33
  87. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/arguments/argumentspec.py +24 -90
  88. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/arguments/argumentvalidator.py +34 -27
  89. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/arguments/customconverters.py +14 -11
  90. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/arguments/embedded.py +23 -26
  91. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/arguments/typeconverters.py +210 -220
  92. robotframework-7.0a1/src/robot/running/arguments/typeinfo.py +367 -0
  93. robotframework-7.0a1/src/robot/running/arguments/typevalidator.py +62 -0
  94. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/bodyrunner.py +83 -68
  95. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/builder/builders.py +15 -25
  96. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/builder/parsers.py +15 -10
  97. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/builder/settings.py +9 -17
  98. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/builder/transformers.py +166 -308
  99. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/context.py +80 -25
  100. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/handlers.py +11 -16
  101. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/handlerstore.py +1 -1
  102. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/librarykeywordrunner.py +9 -17
  103. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/model.py +156 -36
  104. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/namespace.py +18 -19
  105. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/statusreporter.py +13 -12
  106. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/suiterunner.py +18 -21
  107. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/testlibraries.py +35 -39
  108. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/usererrorhandler.py +8 -8
  109. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/userkeyword.py +13 -8
  110. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/userkeywordrunner.py +18 -21
  111. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/testdoc.py +18 -13
  112. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/__init__.py +50 -35
  113. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/connectioncache.py +64 -59
  114. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/encodingsniffer.py +9 -4
  115. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/escaping.py +11 -9
  116. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/markupwriters.py +20 -13
  117. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/normalizing.py +9 -24
  118. robotframework-7.0a1/src/robot/utils/notset.py +33 -0
  119. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/platform.py +15 -5
  120. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/robotpath.py +1 -0
  121. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/robottime.py +120 -88
  122. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/robottypes.py +16 -31
  123. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/setter.py +0 -5
  124. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/text.py +7 -4
  125. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/unic.py +2 -2
  126. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/variables/__init__.py +2 -2
  127. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/variables/assigner.py +17 -19
  128. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/variables/evaluation.py +20 -17
  129. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/variables/filesetter.py +80 -80
  130. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/variables/replacer.py +33 -36
  131. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/variables/scopes.py +3 -3
  132. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/variables/search.py +66 -41
  133. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/variables/store.py +14 -16
  134. robotframework-7.0a1/src/robot/variables/tablesetter.py +164 -0
  135. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/variables/variables.py +1 -1
  136. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/version.py +1 -1
  137. {robotframework-6.1rc1 → robotframework-7.0a1/src/robotframework.egg-info}/PKG-INFO +3 -6
  138. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robotframework.egg-info/SOURCES.txt +3 -4
  139. {robotframework-6.1rc1 → robotframework-7.0a1}/tasks.py +6 -6
  140. robotframework-6.1rc1/src/robot/libraries/Reserved.py +0 -48
  141. robotframework-6.1rc1/src/robot/model/keyword.py +0 -173
  142. robotframework-6.1rc1/src/robot/output/console/dotted.py +0 -90
  143. robotframework-6.1rc1/src/robot/output/listenerarguments.py +0 -165
  144. robotframework-6.1rc1/src/robot/output/listenermethods.py +0 -113
  145. robotframework-6.1rc1/src/robot/output/listeners.py +0 -174
  146. robotframework-6.1rc1/src/robot/output/output.py +0 -95
  147. robotframework-6.1rc1/src/robot/parsing/model/visitor.py +0 -67
  148. robotframework-6.1rc1/src/robot/running/arguments/argumentconverter.py +0 -79
  149. robotframework-6.1rc1/src/robot/running/arguments/typevalidator.py +0 -56
  150. robotframework-6.1rc1/src/robot/running/modelcombiner.py +0 -32
  151. robotframework-6.1rc1/src/robot/variables/tablesetter.py +0 -156
  152. {robotframework-6.1rc1 → robotframework-7.0a1}/AUTHORS.rst +0 -0
  153. {robotframework-6.1rc1 → robotframework-7.0a1}/BUILD.rst +0 -0
  154. {robotframework-6.1rc1 → robotframework-7.0a1}/CONTRIBUTING.rst +0 -0
  155. {robotframework-6.1rc1 → robotframework-7.0a1}/COPYRIGHT.txt +0 -0
  156. {robotframework-6.1rc1 → robotframework-7.0a1}/INSTALL.rst +0 -0
  157. {robotframework-6.1rc1 → robotframework-7.0a1}/LICENSE.txt +0 -0
  158. {robotframework-6.1rc1 → robotframework-7.0a1}/MANIFEST.in +0 -0
  159. {robotframework-6.1rc1 → robotframework-7.0a1}/README.rst +0 -0
  160. {robotframework-6.1rc1 → robotframework-7.0a1}/setup.cfg +0 -0
  161. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/__init__.py +0 -0
  162. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/__main__.py +0 -0
  163. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/api/__init__.py +0 -0
  164. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/api/deco.py +0 -0
  165. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/api/exceptions.py +0 -0
  166. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/api/logger.py +0 -0
  167. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/conf/__init__.py +0 -0
  168. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/errors.py +0 -0
  169. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/__init__.py +0 -0
  170. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/common/__init__.py +0 -0
  171. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/common/js_disabled.css +0 -0
  172. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/common/storage.js +0 -0
  173. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/htmlfilewriter.py +0 -0
  174. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/jsonwriter.py +0 -0
  175. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/lib/__init__.py +0 -0
  176. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/lib/jquery.highlight.min.js +0 -0
  177. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/lib/jquery.min.js +0 -0
  178. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/lib/jquery.tablesorter.min.js +0 -0
  179. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/lib/jquery.tmpl.min.js +0 -0
  180. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/lib/jsxcompressor.min.js +0 -0
  181. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/__init__.py +0 -0
  182. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/doc_formatting.css +0 -0
  183. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/libdoc.css +0 -0
  184. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/libdoc.html +0 -0
  185. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/print.css +0 -0
  186. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/libdoc/pygments.css +0 -0
  187. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/__init__.py +0 -0
  188. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/common.css +0 -0
  189. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/doc_formatting.css +0 -0
  190. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/fileloading.js +0 -0
  191. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/log.js +0 -0
  192. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/print.css +0 -0
  193. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/report.css +0 -0
  194. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/report.html +0 -0
  195. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/util.js +0 -0
  196. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/rebot/view.js +0 -0
  197. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/testdoc/__init__.py +0 -0
  198. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/testdoc/testdoc.css +0 -0
  199. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/htmldata/testdoc/testdoc.html +0 -0
  200. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdoc.py +0 -0
  201. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/__init__.py +0 -0
  202. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/consoleviewer.py +0 -0
  203. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/htmlwriter.py +0 -0
  204. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/jsonwriter.py +0 -0
  205. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/output.py +0 -0
  206. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/standardtypes.py +0 -0
  207. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libdocpkg/writer.py +0 -0
  208. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/Dialogs.py +0 -0
  209. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/Easter.py +0 -0
  210. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/Screenshot.py +0 -0
  211. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/libraries/Telnet.py +0 -0
  212. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/fixture.py +0 -0
  213. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/itemlist.py +0 -0
  214. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/metadata.py +0 -0
  215. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/statistics.py +0 -0
  216. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/suitestatistics.py +0 -0
  217. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/tagsetter.py +0 -0
  218. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/tagstatistics.py +0 -0
  219. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/model/totalstatistics.py +0 -0
  220. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/__init__.py +0 -0
  221. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/console/__init__.py +0 -0
  222. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/console/highlighting.py +0 -0
  223. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/librarylogger.py +0 -0
  224. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/output/pyloggingconf.py +0 -0
  225. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/__init__.py +0 -0
  226. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/lexer/__init__.py +0 -0
  227. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/lexer/tokenizer.py +0 -0
  228. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/model/__init__.py +0 -0
  229. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/parser/__init__.py +0 -0
  230. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/parser/blockparsers.py +0 -0
  231. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/parser/fileparser.py +0 -0
  232. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/parser/parser.py +0 -0
  233. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/parsing/suitestructure.py +0 -0
  234. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/pythonpathsetter.py +0 -0
  235. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/rebot.py +0 -0
  236. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/reporting/__init__.py +0 -0
  237. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/reporting/jsexecutionresult.py +0 -0
  238. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/reporting/jswriter.py +0 -0
  239. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/reporting/logreportwriters.py +0 -0
  240. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/reporting/outputwriter.py +0 -0
  241. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/reporting/resultwriter.py +0 -0
  242. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/executionerrors.py +0 -0
  243. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/executionresult.py +0 -0
  244. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/messagefilter.py +0 -0
  245. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/suiteteardownfailed.py +0 -0
  246. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/result/visitor.py +0 -0
  247. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/arguments/__init__.py +0 -0
  248. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/builder/__init__.py +0 -0
  249. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/dynamicmethods.py +0 -0
  250. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/importer.py +0 -0
  251. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/libraryscopes.py +0 -0
  252. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/outputcapture.py +0 -0
  253. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/randomizer.py +0 -0
  254. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/runkwregister.py +0 -0
  255. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/signalhandler.py +0 -0
  256. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/status.py +0 -0
  257. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/timeouts/__init__.py +0 -0
  258. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/timeouts/posix.py +0 -0
  259. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/running/timeouts/windows.py +0 -0
  260. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/application.py +0 -0
  261. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/argumentparser.py +0 -0
  262. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/asserts.py +0 -0
  263. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/charwidth.py +0 -0
  264. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/compress.py +0 -0
  265. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/dotdict.py +0 -0
  266. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/encoding.py +0 -0
  267. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/error.py +0 -0
  268. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/etreewrapper.py +0 -0
  269. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/filereader.py +0 -0
  270. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/frange.py +0 -0
  271. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/htmlformatters.py +0 -0
  272. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/importer.py +0 -0
  273. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/markuputils.py +0 -0
  274. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/match.py +0 -0
  275. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/misc.py +0 -0
  276. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/recommendations.py +0 -0
  277. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/restreader.py +0 -0
  278. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/robotenv.py +0 -0
  279. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/robotinspect.py +0 -0
  280. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/robotio.py +0 -0
  281. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/sortable.py +0 -0
  282. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/utils/typehints.py +0 -0
  283. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/variables/finders.py +0 -0
  284. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/variables/notfound.py +0 -0
  285. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robot/variables/resolvable.py +0 -0
  286. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robotframework.egg-info/dependency_links.txt +0 -0
  287. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robotframework.egg-info/entry_points.txt +0 -0
  288. {robotframework-6.1rc1 → robotframework-7.0a1}/src/robotframework.egg-info/top_level.txt +0 -0
@@ -20,10 +20,28 @@ from robot.errors import DataError
20
20
 
21
21
  from .console import ConsoleOutput
22
22
  from .filelogger import FileLogger
23
- from .loggerhelper import AbstractLogger, AbstractLoggerProxy
23
+ from .loggerhelper import AbstractLogger
24
24
  from .stdoutlogsplitter import StdoutLogSplitter
25
25
 
26
26
 
27
+ def start_body_item(method):
28
+ def wrapper(self, *args):
29
+ # TODO: Could _prev_log_message_handlers be used also here?
30
+ self._started_keywords += 1
31
+ self.log_message = self._log_message
32
+ method(self, *args)
33
+ return wrapper
34
+
35
+
36
+ def end_body_item(method):
37
+ def wrapper(self, *args):
38
+ self._started_keywords -= 1
39
+ method(self, *args)
40
+ if not self._started_keywords:
41
+ self.log_message = self.message
42
+ return wrapper
43
+
44
+
27
45
  class Logger(AbstractLogger):
28
46
  """A global logger proxy to delegating messages to registered loggers.
29
47
 
@@ -83,7 +101,6 @@ class Logger(AbstractLogger):
83
101
  self._console_logger = self._wrap_and_relay(logger)
84
102
 
85
103
  def _wrap_and_relay(self, logger):
86
- logger = LoggerProxy(logger)
87
104
  self._relay_cached_messages(logger)
88
105
  return logger
89
106
 
@@ -127,8 +144,7 @@ class Logger(AbstractLogger):
127
144
 
128
145
  def unregister_logger(self, *loggers):
129
146
  for logger in loggers:
130
- self._other_loggers = [proxy for proxy in self._other_loggers
131
- if proxy.logger is not logger]
147
+ self._other_loggers = [l for l in self._other_loggers if l is not logger]
132
148
 
133
149
  def disable_message_cache(self):
134
150
  self._message_cache = None
@@ -196,35 +212,161 @@ class Logger(AbstractLogger):
196
212
  def disable_library_import_logging(self):
197
213
  self.log_message = self._prev_log_message_handlers.pop()
198
214
 
199
- def start_suite(self, suite):
215
+ def start_suite(self, data, result):
200
216
  for logger in self.start_loggers:
201
- logger.start_suite(suite)
217
+ logger.start_suite(data, result)
202
218
 
203
- def end_suite(self, suite):
219
+ def end_suite(self, data, result):
204
220
  for logger in self.end_loggers:
205
- logger.end_suite(suite)
221
+ logger.end_suite(data, result)
206
222
 
207
- def start_test(self, test):
223
+ def start_test(self, data, result):
208
224
  for logger in self.start_loggers:
209
- logger.start_test(test)
225
+ logger.start_test(data, result)
210
226
 
211
- def end_test(self, test):
227
+ def end_test(self, data, result):
212
228
  for logger in self.end_loggers:
213
- logger.end_test(test)
229
+ logger.end_test(data, result)
214
230
 
215
- def start_keyword(self, keyword):
216
- # TODO: Could _prev_log_message_handlers be used also here?
217
- self._started_keywords += 1
218
- self.log_message = self._log_message
231
+ @start_body_item
232
+ def start_keyword(self, data, result):
219
233
  for logger in self.start_loggers:
220
- logger.start_keyword(keyword)
234
+ logger.start_keyword(data, result)
221
235
 
222
- def end_keyword(self, keyword):
223
- self._started_keywords -= 1
236
+ @end_body_item
237
+ def end_keyword(self, data, result):
224
238
  for logger in self.end_loggers:
225
- logger.end_keyword(keyword)
226
- if not self._started_keywords:
227
- self.log_message = self.message
239
+ logger.end_keyword(data, result)
240
+
241
+ @start_body_item
242
+ def start_for(self, data, result):
243
+ for logger in self.start_loggers:
244
+ logger.start_for(data, result)
245
+
246
+ @end_body_item
247
+ def end_for(self, data, result):
248
+ for logger in self.end_loggers:
249
+ logger.end_for(data, result)
250
+
251
+ @start_body_item
252
+ def start_for_iteration(self, data, result):
253
+ for logger in self.start_loggers:
254
+ logger.start_for_iteration(data, result)
255
+
256
+ @end_body_item
257
+ def end_for_iteration(self, data, result):
258
+ for logger in self.end_loggers:
259
+ logger.end_for_iteration(data, result)
260
+
261
+ @start_body_item
262
+ def start_while(self, data, result):
263
+ for logger in self.start_loggers:
264
+ logger.start_while(data, result)
265
+
266
+ @end_body_item
267
+ def end_while(self, data, result):
268
+ for logger in self.end_loggers:
269
+ logger.end_while(data, result)
270
+
271
+ @start_body_item
272
+ def start_while_iteration(self, data, result):
273
+ for logger in self.start_loggers:
274
+ logger.start_while_iteration(data, result)
275
+
276
+ @end_body_item
277
+ def end_while_iteration(self, data, result):
278
+ for logger in self.end_loggers:
279
+ logger.end_while_iteration(data, result)
280
+
281
+ @start_body_item
282
+ def start_if(self, data, result):
283
+ for logger in self.start_loggers:
284
+ logger.start_if(data, result)
285
+
286
+ @end_body_item
287
+ def end_if(self, data, result):
288
+ for logger in self.end_loggers:
289
+ logger.end_if(data, result)
290
+
291
+ @start_body_item
292
+ def start_if_branch(self, data, result):
293
+ for logger in self.start_loggers:
294
+ logger.start_if_branch(data, result)
295
+
296
+ @end_body_item
297
+ def end_if_branch(self, data, result):
298
+ for logger in self.end_loggers:
299
+ logger.end_if_branch(data, result)
300
+
301
+ @start_body_item
302
+ def start_try(self, data, result):
303
+ for logger in self.start_loggers:
304
+ logger.start_try(data, result)
305
+
306
+ @end_body_item
307
+ def end_try(self, data, result):
308
+ for logger in self.end_loggers:
309
+ logger.end_try(data, result)
310
+
311
+ @start_body_item
312
+ def start_try_branch(self, data, result):
313
+ for logger in self.start_loggers:
314
+ logger.start_try_branch(data, result)
315
+
316
+ @end_body_item
317
+ def end_try_branch(self, data, result):
318
+ for logger in self.end_loggers:
319
+ logger.end_try_branch(data, result)
320
+
321
+ @start_body_item
322
+ def start_var(self, data, result):
323
+ for logger in self.start_loggers:
324
+ logger.start_var(data, result)
325
+
326
+ @end_body_item
327
+ def end_var(self, data, result):
328
+ for logger in self.end_loggers:
329
+ logger.end_var(data, result)
330
+
331
+ @start_body_item
332
+ def start_break(self, data, result):
333
+ for logger in self.start_loggers:
334
+ logger.start_break(data, result)
335
+
336
+ @end_body_item
337
+ def end_break(self, data, result):
338
+ for logger in self.end_loggers:
339
+ logger.end_break(data, result)
340
+
341
+ @start_body_item
342
+ def start_continue(self, data, result):
343
+ for logger in self.start_loggers:
344
+ logger.start_continue(data, result)
345
+
346
+ @end_body_item
347
+ def end_continue(self, data, result):
348
+ for logger in self.end_loggers:
349
+ logger.end_continue(data, result)
350
+
351
+ @start_body_item
352
+ def start_return(self, data, result):
353
+ for logger in self.start_loggers:
354
+ logger.start_return(data, result)
355
+
356
+ @end_body_item
357
+ def end_return(self, data, result):
358
+ for logger in self.end_loggers:
359
+ logger.end_return(data, result)
360
+
361
+ @start_body_item
362
+ def start_error(self, data, result):
363
+ for logger in self.start_loggers:
364
+ logger.start_error(data, result)
365
+
366
+ @end_body_item
367
+ def end_error(self, data, result):
368
+ for logger in self.end_loggers:
369
+ logger.end_error(data, result)
228
370
 
229
371
  def imported(self, import_type, name, **attrs):
230
372
  for logger in self:
@@ -241,59 +383,4 @@ class Logger(AbstractLogger):
241
383
  self.__init__(register_console_logger=False)
242
384
 
243
385
 
244
- class LoggerProxy(AbstractLoggerProxy):
245
- _methods = ('start_suite', 'end_suite', 'start_test', 'end_test',
246
- 'start_keyword', 'end_keyword', 'message', 'log_message',
247
- 'imported', 'output_file', 'close')
248
-
249
- _start_keyword_methods = {
250
- 'For': 'start_for',
251
- 'ForIteration': 'start_for_iteration',
252
- 'While': 'start_while',
253
- 'WhileIteration': 'start_while_iteration',
254
- 'If': 'start_if',
255
- 'IfBranch': 'start_if_branch',
256
- 'Try': 'start_try',
257
- 'TryBranch': 'start_try_branch',
258
- 'Return': 'start_return',
259
- 'Continue': 'start_continue',
260
- 'Break': 'start_break',
261
- 'Error': 'start_error'
262
- }
263
- _end_keyword_methods = {
264
- 'For': 'end_for',
265
- 'ForIteration': 'end_for_iteration',
266
- 'While': 'end_while',
267
- 'WhileIteration': 'end_while_iteration',
268
- 'If': 'end_if',
269
- 'IfBranch': 'end_if_branch',
270
- 'Try': 'end_try',
271
- 'TryBranch': 'end_try_branch',
272
- 'Return': 'end_return',
273
- 'Continue': 'end_continue',
274
- 'Break': 'end_break',
275
- 'Error': 'end_error'
276
- }
277
-
278
- def start_keyword(self, kw):
279
- # Dispatch start_keyword calls to more precise methods when logger
280
- # implements them. This horrible hack is needed because internal logger
281
- # knows only about keywords. It should be rewritten.
282
- name = self._start_keyword_methods.get(type(kw.result).__name__)
283
- if name and hasattr(self.logger, name):
284
- method = getattr(self.logger, name)
285
- else:
286
- method = self.logger.start_keyword
287
- method(kw)
288
-
289
- def end_keyword(self, kw):
290
- # See start_keyword comment for explanation of this horrible hack.
291
- name = self._end_keyword_methods.get(type(kw.result).__name__)
292
- if name and hasattr(self.logger, name):
293
- method = getattr(self.logger, name)
294
- else:
295
- method = self.logger.end_keyword
296
- method(kw)
297
-
298
-
299
386
  LOGGER = Logger()
@@ -0,0 +1,152 @@
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 TYPE_CHECKING
17
+
18
+ if TYPE_CHECKING:
19
+ from robot import running, result, model
20
+
21
+
22
+ class LoggerApi:
23
+
24
+ def start_suite(self, data: 'running.TestSuite', result: 'result.TestSuite'):
25
+ pass
26
+
27
+ def end_suite(self, data: 'running.TestSuite', result: 'result.TestSuite'):
28
+ pass
29
+
30
+ def start_test(self, data: 'running.TestCase', result: 'result.TestCase'):
31
+ pass
32
+
33
+ def end_test(self, data: 'running.TestCase', result: 'result.TestCase'):
34
+ pass
35
+
36
+ def start_keyword(self, data: 'running.Keyword', result: 'result.Keyword'):
37
+ self.start_body_item(data, result)
38
+
39
+ def end_keyword(self, data: 'running.Keyword', result: 'result.Keyword'):
40
+ self.end_body_item(data, result)
41
+
42
+ def start_for(self, data: 'running.For', result: 'result.For'):
43
+ self.start_body_item(data, result)
44
+
45
+ def end_for(self, data: 'running.For', result: 'result.For'):
46
+ self.end_body_item(data, result)
47
+
48
+ def start_for_iteration(self, data: 'running.For', result: 'result.ForIteration'):
49
+ self.start_body_item(data, result)
50
+
51
+ def end_for_iteration(self, data: 'running.For', result: 'result.ForIteration'):
52
+ self.end_body_item(data, result)
53
+
54
+ def start_while(self, data: 'running.While', result: 'result.While'):
55
+ self.start_body_item(data, result)
56
+
57
+ def end_while(self, data: 'running.While', result: 'result.While'):
58
+ self.end_body_item(data, result)
59
+
60
+ def start_while_iteration(self, data: 'running.While', result: 'result.WhileIteration'):
61
+ self.start_body_item(data, result)
62
+
63
+ def end_while_iteration(self, data: 'running.While', result: 'result.WhileIteration'):
64
+ self.end_body_item(data, result)
65
+
66
+ def start_if(self, data: 'running.If', result: 'result.If'):
67
+ self.start_body_item(data, result)
68
+
69
+ def end_if(self, data: 'running.If', result: 'result.If'):
70
+ self.end_body_item(data, result)
71
+
72
+ def start_if_branch(self, data: 'running.IfBranch', result: 'result.IfBranch'):
73
+ self.start_body_item(data, result)
74
+
75
+ def end_if_branch(self, data: 'running.IfBranch', result: 'result.IfBranch'):
76
+ self.end_body_item(data, result)
77
+
78
+ def start_try(self, data: 'running.Try', result: 'result.Try'):
79
+ self.start_body_item(data, result)
80
+
81
+ def end_try(self, data: 'running.Try', result: 'result.Try'):
82
+ self.end_body_item(data, result)
83
+
84
+ def start_try_branch(self, data: 'running.TryBranch', result: 'result.TryBranch'):
85
+ self.start_body_item(data, result)
86
+
87
+ def end_try_branch(self, data: 'running.TryBranch', result: 'result.TryBranch'):
88
+ self.end_body_item(data, result)
89
+
90
+ def start_var(self, data: 'running.Var', result: 'result.Var'):
91
+ self.start_body_item(data, result)
92
+
93
+ def end_var(self, data: 'running.Var', result: 'result.Var'):
94
+ self.end_body_item(data, result)
95
+
96
+ def start_break(self, data: 'running.Break', result: 'result.Break'):
97
+ self.start_body_item(data, result)
98
+
99
+ def end_break(self, data: 'running.Break', result: 'result.Break'):
100
+ self.end_body_item(data, result)
101
+
102
+ def start_continue(self, data: 'running.Continue', result: 'result.Continue'):
103
+ self.start_body_item(data, result)
104
+
105
+ def end_continue(self, data: 'running.Continue', result: 'result.Continue'):
106
+ self.end_body_item(data, result)
107
+
108
+ def start_return(self, data: 'running.Return', result: 'result.Return'):
109
+ self.start_body_item(data, result)
110
+
111
+ def end_return(self, data: 'running.Return', result: 'result.Return'):
112
+ self.end_body_item(data, result)
113
+
114
+ def start_error(self, data: 'running.Error', result: 'result.Error'):
115
+ self.start_body_item(data, result)
116
+
117
+ def end_error(self, data: 'running.Error', result: 'result.Error'):
118
+ self.end_body_item(data, result)
119
+
120
+ def start_body_item(self, data, result):
121
+ pass
122
+
123
+ def end_body_item(self, data, result):
124
+ pass
125
+
126
+ def log_message(self, message: 'model.Message'):
127
+ pass
128
+
129
+ def message(self, message: 'model.Message'):
130
+ pass
131
+
132
+ # FIXME: This should probably be removed?
133
+ def output_file(self, type_: str, path: str):
134
+ pass
135
+
136
+ def log_file(self, path: str):
137
+ pass
138
+
139
+ def report_file(self, path: str):
140
+ pass
141
+
142
+ def xunit_file(self, path: str):
143
+ pass
144
+
145
+ def debug_file(self, path: str):
146
+ pass
147
+
148
+ def imported(self, import_type: str, name: str, attrs):
149
+ pass
150
+
151
+ def close(self):
152
+ pass
@@ -14,10 +14,12 @@
14
14
  # limitations under the License.
15
15
 
16
16
  import sys
17
+ from datetime import datetime
18
+ from typing import Callable, Literal
17
19
 
18
20
  from robot.errors import DataError
19
- from robot.model import Message as BaseMessage
20
- from robot.utils import get_timestamp, is_string, safe_str, console_encode
21
+ from robot.model import Message as BaseMessage, MessageLevel
22
+ from robot.utils import console_encode, safe_str
21
23
 
22
24
 
23
25
  LEVELS = {
@@ -30,6 +32,7 @@ LEVELS = {
30
32
  'DEBUG' : 1,
31
33
  'TRACE' : 0,
32
34
  }
35
+ PseudoLevel = Literal['HTML', 'CONSOLE']
33
36
 
34
37
 
35
38
  def write_to_console(msg, newline=True, stream='stdout'):
@@ -88,38 +91,35 @@ class AbstractLogger:
88
91
  class Message(BaseMessage):
89
92
  __slots__ = ['_message']
90
93
 
91
- def __init__(self, message, level='INFO', html=False, timestamp=None):
92
- message = self._normalize_message(message)
94
+ def __init__(self, message: 'str|Callable[[], str]',
95
+ level: 'MessageLevel|PseudoLevel' = 'INFO',
96
+ html: bool = False,
97
+ timestamp: 'datetime|str|None' = None):
93
98
  level, html = self._get_level_and_html(level, html)
94
- timestamp = timestamp or get_timestamp()
95
- super().__init__(message, level, html, timestamp)
96
-
97
- def _normalize_message(self, msg):
98
- if callable(msg):
99
- return msg
100
- if not is_string(msg):
101
- msg = safe_str(msg)
102
- if '\r\n' in msg:
103
- msg = msg.replace('\r\n', '\n')
104
- return msg
105
-
106
- def _get_level_and_html(self, level, html):
99
+ super().__init__(message, level, html, timestamp or datetime.now())
100
+
101
+ def _get_level_and_html(self, level, html) -> 'tuple[MessageLevel, bool]':
107
102
  level = level.upper()
108
103
  if level == 'HTML':
109
104
  return 'INFO', True
110
105
  if level == 'CONSOLE':
111
- level = 'INFO'
112
- if level not in LEVELS:
113
- raise DataError("Invalid log level '%s'." % level)
114
- return level, html
106
+ return 'INFO', html
107
+ if level in LEVELS:
108
+ return level, html
109
+ raise DataError(f"Invalid log level '{level}'.")
115
110
 
116
111
  @property
117
- def message(self):
112
+ def message(self) -> str:
118
113
  self.resolve_delayed_message()
119
114
  return self._message
120
115
 
121
116
  @message.setter
122
- def message(self, message):
117
+ def message(self, message: 'str|Callable[[], str]'):
118
+ if not callable(message):
119
+ if not isinstance(message, str):
120
+ message = safe_str(message)
121
+ if '\r\n' in message:
122
+ message = message.replace('\r\n', '\n')
123
123
  self._message = message
124
124
 
125
125
  def resolve_delayed_message(self):
@@ -146,36 +146,3 @@ class IsLogged:
146
146
  return LEVELS[level.upper()]
147
147
  except KeyError:
148
148
  raise DataError("Invalid log level '%s'." % level)
149
-
150
-
151
- class AbstractLoggerProxy:
152
- _methods = None
153
- _no_method = lambda *args: None
154
-
155
- def __init__(self, logger, method_names=None, prefix=None):
156
- self.logger = logger
157
- for name in method_names or self._methods:
158
- # Allow extending classes to implement some of the messages themselves.
159
- if hasattr(self, name):
160
- if hasattr(logger, name):
161
- continue
162
- target = logger
163
- else:
164
- target = self
165
- setattr(target, name, self._get_method(logger, name, prefix))
166
-
167
- def _get_method(self, logger, name, prefix):
168
- for method_name in self._get_method_names(name, prefix):
169
- if hasattr(logger, method_name):
170
- return getattr(logger, method_name)
171
- return self._no_method
172
-
173
- def _get_method_names(self, name, prefix):
174
- names = [name, self._toCamelCase(name)] if '_' in name else [name]
175
- if prefix:
176
- names += [prefix + name for name in names]
177
- return names
178
-
179
- def _toCamelCase(self, name):
180
- parts = name.split('_')
181
- return ''.join([parts[0]] + [part.capitalize() for part in parts[1:]])