robotframework 7.3rc2__tar.gz → 7.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. {robotframework-7.3rc2 → robotframework-7.3.1}/BUILD.rst +24 -37
  2. robotframework-7.3.1/CONTRIBUTING.rst +537 -0
  3. {robotframework-7.3rc2 → robotframework-7.3.1}/PKG-INFO +2 -2
  4. {robotframework-7.3rc2 → robotframework-7.3.1}/pyproject.toml +3 -9
  5. {robotframework-7.3rc2 → robotframework-7.3.1}/setup.py +3 -3
  6. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/api/interfaces.py +3 -5
  7. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/errors.py +4 -4
  8. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/log.js +5 -2
  9. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/standardtypes.py +11 -5
  10. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/BuiltIn.py +32 -18
  11. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/Process.py +5 -0
  12. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/outputfile.py +1 -1
  13. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/argumentparser.py +61 -55
  14. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/embedded.py +41 -22
  15. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/typeconverters.py +4 -0
  16. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/bodyrunner.py +22 -18
  17. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/builder/builders.py +1 -1
  18. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/model.py +2 -1
  19. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/signalhandler.py +1 -0
  20. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/userkeywordrunner.py +1 -1
  21. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/filereader.py +1 -1
  22. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/scopes.py +21 -2
  23. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/version.py +1 -1
  24. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robotframework.egg-info/PKG-INFO +2 -2
  25. robotframework-7.3.1/src/robotframework.egg-info/entry_points.txt +4 -0
  26. robotframework-7.3rc2/CONTRIBUTING.rst +0 -295
  27. robotframework-7.3rc2/src/robotframework.egg-info/entry_points.txt +0 -4
  28. {robotframework-7.3rc2 → robotframework-7.3.1}/AUTHORS.rst +0 -0
  29. {robotframework-7.3rc2 → robotframework-7.3.1}/COPYRIGHT.txt +0 -0
  30. {robotframework-7.3rc2 → robotframework-7.3.1}/INSTALL.rst +0 -0
  31. {robotframework-7.3rc2 → robotframework-7.3.1}/LICENSE.txt +0 -0
  32. {robotframework-7.3rc2 → robotframework-7.3.1}/MANIFEST.in +0 -0
  33. {robotframework-7.3rc2 → robotframework-7.3.1}/README.rst +0 -0
  34. {robotframework-7.3rc2 → robotframework-7.3.1}/setup.cfg +0 -0
  35. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/__init__.py +0 -0
  36. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/__main__.py +0 -0
  37. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/api/__init__.py +0 -0
  38. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/api/deco.py +0 -0
  39. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/api/exceptions.py +0 -0
  40. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/api/logger.py +0 -0
  41. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/api/parsing.py +0 -0
  42. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/api/py.typed +0 -0
  43. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/conf/__init__.py +0 -0
  44. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/conf/gatherfailed.py +0 -0
  45. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/conf/languages.py +0 -0
  46. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/conf/settings.py +0 -0
  47. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/__init__.py +0 -0
  48. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/common/__init__.py +0 -0
  49. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/common/js_disabled.css +0 -0
  50. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/common/storage.js +0 -0
  51. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/htmlfilewriter.py +0 -0
  52. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/jsonwriter.py +0 -0
  53. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/lib/__init__.py +0 -0
  54. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/lib/jquery.highlight.min.js +0 -0
  55. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/lib/jquery.min.js +0 -0
  56. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/lib/jquery.tablesorter.min.js +0 -0
  57. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/lib/jquery.tmpl.min.js +0 -0
  58. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/lib/jsxcompressor.min.js +0 -0
  59. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/libdoc/__init__.py +0 -0
  60. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/libdoc/libdoc.html +0 -0
  61. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/__init__.py +0 -0
  62. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/common.css +0 -0
  63. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/doc_formatting.css +0 -0
  64. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/fileloading.js +0 -0
  65. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/log.css +0 -0
  66. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/log.html +0 -0
  67. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/model.js +0 -0
  68. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/print.css +0 -0
  69. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/report.css +0 -0
  70. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/report.html +0 -0
  71. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/testdata.js +0 -0
  72. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/util.js +0 -0
  73. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/rebot/view.js +0 -0
  74. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/template.py +0 -0
  75. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/testdoc/__init__.py +0 -0
  76. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/testdoc/testdoc.css +0 -0
  77. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/htmldata/testdoc/testdoc.html +0 -0
  78. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdoc.py +0 -0
  79. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/__init__.py +0 -0
  80. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/builder.py +0 -0
  81. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/consoleviewer.py +0 -0
  82. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/datatypes.py +0 -0
  83. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/htmlutils.py +0 -0
  84. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/htmlwriter.py +0 -0
  85. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/jsonbuilder.py +0 -0
  86. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/jsonwriter.py +0 -0
  87. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/languages.py +0 -0
  88. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/model.py +0 -0
  89. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/output.py +0 -0
  90. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/robotbuilder.py +0 -0
  91. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/writer.py +0 -0
  92. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/xmlbuilder.py +0 -0
  93. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libdocpkg/xmlwriter.py +0 -0
  94. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/Collections.py +0 -0
  95. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/DateTime.py +0 -0
  96. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/Dialogs.py +0 -0
  97. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/Easter.py +0 -0
  98. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/OperatingSystem.py +0 -0
  99. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/Remote.py +0 -0
  100. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/Screenshot.py +0 -0
  101. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/String.py +0 -0
  102. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/Telnet.py +0 -0
  103. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/XML.py +0 -0
  104. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/__init__.py +0 -0
  105. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/libraries/dialogs_py.py +0 -0
  106. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/logo.png +0 -0
  107. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/__init__.py +0 -0
  108. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/body.py +0 -0
  109. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/configurer.py +0 -0
  110. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/control.py +0 -0
  111. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/filter.py +0 -0
  112. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/fixture.py +0 -0
  113. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/itemlist.py +0 -0
  114. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/keyword.py +0 -0
  115. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/message.py +0 -0
  116. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/metadata.py +0 -0
  117. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/modelobject.py +0 -0
  118. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/modifier.py +0 -0
  119. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/namepatterns.py +0 -0
  120. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/statistics.py +0 -0
  121. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/stats.py +0 -0
  122. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/suitestatistics.py +0 -0
  123. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/tags.py +0 -0
  124. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/tagsetter.py +0 -0
  125. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/tagstatistics.py +0 -0
  126. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/testcase.py +0 -0
  127. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/testsuite.py +0 -0
  128. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/totalstatistics.py +0 -0
  129. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/model/visitor.py +0 -0
  130. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/__init__.py +0 -0
  131. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/console/__init__.py +0 -0
  132. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/console/dotted.py +0 -0
  133. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/console/highlighting.py +0 -0
  134. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/console/quiet.py +0 -0
  135. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/console/verbose.py +0 -0
  136. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/debugfile.py +0 -0
  137. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/filelogger.py +0 -0
  138. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/jsonlogger.py +0 -0
  139. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/librarylogger.py +0 -0
  140. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/listeners.py +0 -0
  141. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/logger.py +0 -0
  142. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/loggerapi.py +0 -0
  143. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/loggerhelper.py +0 -0
  144. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/loglevel.py +0 -0
  145. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/output.py +0 -0
  146. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/pyloggingconf.py +0 -0
  147. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/stdoutlogsplitter.py +0 -0
  148. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/output/xmllogger.py +0 -0
  149. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/__init__.py +0 -0
  150. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/lexer/__init__.py +0 -0
  151. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/lexer/blocklexers.py +0 -0
  152. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/lexer/context.py +0 -0
  153. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/lexer/lexer.py +0 -0
  154. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/lexer/settings.py +0 -0
  155. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/lexer/statementlexers.py +0 -0
  156. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/lexer/tokenizer.py +0 -0
  157. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/lexer/tokens.py +0 -0
  158. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/model/__init__.py +0 -0
  159. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/model/blocks.py +0 -0
  160. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/model/statements.py +0 -0
  161. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/model/visitor.py +0 -0
  162. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/parser/__init__.py +0 -0
  163. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/parser/blockparsers.py +0 -0
  164. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/parser/fileparser.py +0 -0
  165. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/parser/parser.py +0 -0
  166. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/parsing/suitestructure.py +0 -0
  167. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/pythonpathsetter.py +0 -0
  168. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/rebot.py +0 -0
  169. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/reporting/__init__.py +0 -0
  170. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/reporting/expandkeywordmatcher.py +0 -0
  171. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/reporting/jsbuildingcontext.py +0 -0
  172. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/reporting/jsexecutionresult.py +0 -0
  173. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/reporting/jsmodelbuilders.py +0 -0
  174. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/reporting/jswriter.py +0 -0
  175. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/reporting/logreportwriters.py +0 -0
  176. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/reporting/outputwriter.py +0 -0
  177. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/reporting/resultwriter.py +0 -0
  178. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/reporting/stringcache.py +0 -0
  179. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/reporting/xunitwriter.py +0 -0
  180. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/__init__.py +0 -0
  181. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/configurer.py +0 -0
  182. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/executionerrors.py +0 -0
  183. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/executionresult.py +0 -0
  184. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/flattenkeywordmatcher.py +0 -0
  185. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/keywordremover.py +0 -0
  186. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/merger.py +0 -0
  187. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/messagefilter.py +0 -0
  188. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/model.py +0 -0
  189. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/modeldeprecation.py +0 -0
  190. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/resultbuilder.py +0 -0
  191. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/suiteteardownfailed.py +0 -0
  192. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/visitor.py +0 -0
  193. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/result/xmlelementhandlers.py +0 -0
  194. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/run.py +0 -0
  195. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/__init__.py +0 -0
  196. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/__init__.py +0 -0
  197. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/argumentconverter.py +0 -0
  198. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/argumentmapper.py +0 -0
  199. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/argumentresolver.py +0 -0
  200. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/argumentspec.py +0 -0
  201. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/argumentvalidator.py +0 -0
  202. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/customconverters.py +0 -0
  203. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/typeinfo.py +0 -0
  204. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/typeinfoparser.py +0 -0
  205. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/arguments/typevalidator.py +0 -0
  206. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/builder/__init__.py +0 -0
  207. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/builder/parsers.py +0 -0
  208. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/builder/settings.py +0 -0
  209. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/builder/transformers.py +0 -0
  210. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/context.py +0 -0
  211. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/dynamicmethods.py +0 -0
  212. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/importer.py +0 -0
  213. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/invalidkeyword.py +0 -0
  214. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/keywordfinder.py +0 -0
  215. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/keywordimplementation.py +0 -0
  216. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/librarykeyword.py +0 -0
  217. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/librarykeywordrunner.py +0 -0
  218. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/libraryscopes.py +0 -0
  219. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/namespace.py +0 -0
  220. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/outputcapture.py +0 -0
  221. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/randomizer.py +0 -0
  222. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/resourcemodel.py +0 -0
  223. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/runkwregister.py +0 -0
  224. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/status.py +0 -0
  225. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/statusreporter.py +0 -0
  226. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/suiterunner.py +0 -0
  227. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/testlibraries.py +0 -0
  228. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/timeouts/__init__.py +0 -0
  229. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/timeouts/nosupport.py +0 -0
  230. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/timeouts/posix.py +0 -0
  231. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/timeouts/runner.py +0 -0
  232. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/timeouts/timeout.py +0 -0
  233. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/running/timeouts/windows.py +0 -0
  234. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/testdoc.py +0 -0
  235. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/__init__.py +0 -0
  236. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/application.py +0 -0
  237. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/argumentparser.py +0 -0
  238. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/asserts.py +0 -0
  239. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/charwidth.py +0 -0
  240. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/compress.py +0 -0
  241. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/connectioncache.py +0 -0
  242. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/dotdict.py +0 -0
  243. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/encoding.py +0 -0
  244. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/encodingsniffer.py +0 -0
  245. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/error.py +0 -0
  246. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/escaping.py +0 -0
  247. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/etreewrapper.py +0 -0
  248. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/frange.py +0 -0
  249. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/htmlformatters.py +0 -0
  250. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/importer.py +0 -0
  251. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/json.py +0 -0
  252. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/markuputils.py +0 -0
  253. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/markupwriters.py +0 -0
  254. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/match.py +0 -0
  255. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/misc.py +0 -0
  256. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/normalizing.py +0 -0
  257. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/notset.py +0 -0
  258. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/platform.py +0 -0
  259. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/recommendations.py +0 -0
  260. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/restreader.py +0 -0
  261. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/robotenv.py +0 -0
  262. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/robotinspect.py +0 -0
  263. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/robotio.py +0 -0
  264. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/robotpath.py +0 -0
  265. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/robottime.py +0 -0
  266. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/robottypes.py +0 -0
  267. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/setter.py +0 -0
  268. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/sortable.py +0 -0
  269. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/text.py +0 -0
  270. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/typehints.py +0 -0
  271. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/utils/unic.py +0 -0
  272. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/__init__.py +0 -0
  273. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/assigner.py +0 -0
  274. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/evaluation.py +0 -0
  275. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/filesetter.py +0 -0
  276. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/finders.py +0 -0
  277. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/notfound.py +0 -0
  278. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/replacer.py +0 -0
  279. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/resolvable.py +0 -0
  280. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/search.py +0 -0
  281. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/store.py +0 -0
  282. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/tablesetter.py +0 -0
  283. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robot/variables/variables.py +0 -0
  284. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robotframework.egg-info/SOURCES.txt +0 -0
  285. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robotframework.egg-info/dependency_links.txt +0 -0
  286. {robotframework-7.3rc2 → robotframework-7.3.1}/src/robotframework.egg-info/top_level.txt +0 -0
  287. {robotframework-7.3rc2 → robotframework-7.3.1}/tasks.py +0 -0
@@ -84,11 +84,16 @@ Preparation
84
84
  git pull --rebase
85
85
  git push
86
86
 
87
- 2. Clean up::
87
+ 2. Make sure code is formatted properly::
88
+
89
+ invoke format
90
+ git status
91
+
92
+ 3. Clean up::
88
93
 
89
94
  invoke clean
90
95
 
91
- 3. Set version information to a shell variable to ease copy-pasting further
96
+ 4. Set version information to a shell variable to ease copy-pasting further
92
97
  commands. Add ``aN``, ``bN`` or ``rcN`` postfix if creating a pre-release::
93
98
 
94
99
  VERSION=<version>
@@ -139,7 +144,7 @@ Release notes
139
144
  issue tracker than in the generated release notes. This allows re-generating
140
145
  the list of issues later if more issues are added.
141
146
 
142
- 6. Add, commit and push::
147
+ 6. Commit and push changes::
143
148
 
144
149
  git add doc/releasenotes/rf-$VERSION.rst
145
150
  git commit -m "Release notes for $VERSION" doc/releasenotes/rf-$VERSION.rst
@@ -151,23 +156,21 @@ Release notes
151
156
 
152
157
  __ https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token
153
158
 
159
+ Update Libdoc templates
160
+ -----------------------
154
161
 
155
- Update libdoc generated files
156
- -----------------------------
157
-
158
- Run
159
-
160
- invoke build-libdoc
162
+ 1. Prerequisites are listed in `<src/web/README.md>`_. This step can be skipped
163
+ if there are no changes to Libdoc.
161
164
 
162
- This step can be skipped if there are no changes to Libdoc. Prerequisites
163
- are listed in `<src/web/README.md>`_.
165
+ 2. Regenerate HTML template and update the list of supported localizations in
166
+ the ``--help`` text::
164
167
 
165
- This will regenerate the libdoc html template and update libdoc command line
166
- with the latest supported lagnuages.
168
+ invoke build-libdoc
167
169
 
168
- Commit & push if there are changes any changes to either
169
- `src/robot/htmldata/libdoc/libdoc.html` or `src/robot/libdocpkg/languages.py`.
170
+ 3. Commit and push changes::
170
171
 
172
+ git commit -m "Update Libdoc templates" src/robot/htmldata/libdoc/libdoc.html src/robot/libdocpkg/languages.py
173
+ git push
171
174
 
172
175
  Set version
173
176
  -----------
@@ -273,28 +276,12 @@ Post actions
273
276
  Announcements
274
277
  -------------
275
278
 
276
- 1. `robotframework-users <https://groups.google.com/group/robotframework-users>`_
277
- and
278
- `robotframework-announce <https://groups.google.com/group/robotframework-announce>`_
279
- lists. The latter is not needed with preview releases but should be used
280
- at least with major updates. Notice that sending to it requires admin rights.
281
-
282
- 2. Twitter. Either Tweet something yourself and make sure it's re-tweeted
283
- by `@robotframework <http://twitter.com/robotframework>`_, or send the
284
- message directly as `@robotframework`. This makes the note appear also
285
- at http://robotframework.org.
286
-
287
- Should include a link to more information. Possibly a link to the full
288
- release notes or an email to the aforementioned mailing lists.
289
-
290
- 3. ``#devel`` and ``#general`` channels on Slack.
279
+ 1. ``#announcements`` channel on `Slack <https://slack.robotframework.org/>`_.
280
+ Use ``@channel`` at least with major releases.
291
281
 
292
- 4. `Robot Framework LinkedIn
293
- <https://www.linkedin.com/groups/3710899/>`_ group.
282
+ 2. `Forum <https://forum.robotframework.org/>`_.
294
283
 
295
- 5. Consider sending announcements, at least with major releases, also to other
296
- forums where we want to make the framework more well known. For example:
284
+ 3. `LinkedIn group <https://www.linkedin.com/groups/3710899/>`_. A personal
285
+ LinkedIn post is a good idea at least with bigger releases.
297
286
 
298
- - http://opensourcetesting.org
299
- - http://tech.groups.yahoo.com/group/agile-testing
300
- - http://lists.idyll.org/listinfo/testing-in-python
287
+ 4. `robotframework-users <https://groups.google.com/group/robotframework-users>`_
@@ -0,0 +1,537 @@
1
+ Contribution guidelines
2
+ =======================
3
+
4
+ These guidelines instruct how to submit issues and contribute code or
5
+ documentation to the `Robot Framework project
6
+ <https://github.com/robotframework/robotframework>`_.
7
+ There are also many other projects in the larger `Robot Framework ecosystem
8
+ <http://robotframework.org>`_ that you can contribute to. If you notice
9
+ a library or tool missing, there is hardly any better way to contribute
10
+ than creating your own project. Other great ways to contribute include
11
+ answering questions and participating discussion on our
12
+ `Slack <https://slack.robotframework.org>`_,
13
+ `Forum <https://forum.robotframework.org>`_,
14
+ `LinkedIn group <https://www.linkedin.com/groups/3710899/>`_,
15
+ or other such discussion forum, speaking at conferences or local events,
16
+ and spreading the word about the framework otherwise.
17
+
18
+ These guidelines expect readers to have a basic knowledge about open source
19
+ as well as why and how to contribute to an open source project. If you are
20
+ new to these topics, it may be a good idea to look at the generic
21
+ `Open Source Guides <https://opensource.guide/>`_ first.
22
+
23
+ .. contents::
24
+ :depth: 2
25
+ :local:
26
+
27
+ Submitting issues
28
+ -----------------
29
+
30
+ Bugs and enhancements are tracked in the `issue tracker
31
+ <https://github.com/robotframework/robotframework/issues>`_. If you are unsure
32
+ if something is a bug or is a feature worth implementing, you can
33
+ first ask on the ``#devel`` channel on our Slack_. Slack and other such forums,
34
+ not the issue tracker, are also places where to ask general questions about
35
+ the framework.
36
+
37
+ Before submitting a new issue, it is always a good idea to check if the
38
+ same bug or enhancement is already reported. If it is, please add your comments
39
+ to the existing issue instead of creating a new one.
40
+
41
+ Reporting bugs
42
+ ~~~~~~~~~~~~~~
43
+
44
+ Explain the bug you have encountered so that others can understand it and
45
+ preferably also reproduce it. Key things to include in good bug report:
46
+
47
+ 1. Version information
48
+
49
+ - Robot Framework version
50
+ - Python interpreter version
51
+ - Operating system and its version
52
+
53
+ Typically including the output of ``robot --version`` is enough.
54
+
55
+ 2. Steps to reproduce the problem. With more complex problems it is often
56
+ a good idea to create a `short, self contained, correct example (SSCCE)
57
+ <http://sscce.org>`_.
58
+
59
+ 3. Possible error message and traceback.
60
+
61
+ Notice that all information in the issue tracker is public. Do not include
62
+ any confidential information there.
63
+
64
+ Enhancement requests
65
+ ~~~~~~~~~~~~~~~~~~~~
66
+
67
+ Describe the new feature and use cases for it in as much detail as possible.
68
+ Especially with larger enhancements, be prepared to contribute the code
69
+ in the form of a pull request as explained below. If you would like to sponsor
70
+ a development of a certain feature, you can contact the `Robot Framework
71
+ Foundation <https://robotframework.org/foundation>`_.
72
+ Consider also would it be better to implement new functionality as a separate
73
+ library or tool outside the core framework.
74
+
75
+ Code contributions
76
+ ------------------
77
+
78
+ If you have fixed a bug or implemented an enhancement, you can contribute
79
+ your changes via GitHub's pull requests. This is not restricted to code,
80
+ on the contrary, fixes and enhancements to documentation_ and tests_ alone
81
+ are also very valuable.
82
+
83
+ Choosing something to work on
84
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
85
+
86
+ Often you already have a bug or an enhancement you want to work on in your
87
+ mind, but you can also look at the `issue tracker`_ to find bugs and
88
+ enhancements submitted by others. The issues vary significantly in complexity
89
+ and difficulty, so you can try to find something that matches your skill level
90
+ and knowledge. There are two specific labels to look for when looking for
91
+ something to contribute:
92
+
93
+ `good first issue`__
94
+ These issues typically do not require any knowledge of Robot Framework
95
+ internals and are generally easy to implement or fix. Thus these issues
96
+ are especially good for new contributors.
97
+
98
+ `help wanted`__
99
+ These issues require external help to get implemented or fixed.
100
+
101
+ __ https://github.com/robotframework/robotframework/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22
102
+ __ https://github.com/robotframework/robotframework/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22
103
+
104
+ Pull requests
105
+ ~~~~~~~~~~~~~
106
+
107
+ On GitHub pull requests are the main mechanism to contribute code. They
108
+ are easy to use both for the contributor and for the person accepting
109
+ the contribution, and with more complex contributions it is easy also
110
+ for others to join the discussion. Preconditions for creating pull
111
+ requests are having a `GitHub account <https://github.com/>`_,
112
+ installing `Git <https://git-scm.com>`_ and forking the
113
+ `Robot Framework project`_.
114
+
115
+ GitHub has good articles explaining how to
116
+ `set up Git <https://help.github.com/articles/set-up-git/>`_,
117
+ `fork a repository <https://help.github.com/articles/fork-a-repo/>`_ and
118
+ `use pull requests <https://help.github.com/articles/using-pull-requests>`_
119
+ and we do not go through them in more detail. We do, however, recommend to
120
+ create dedicated topic branches for pull requests instead of creating
121
+ them based on the master branch. This is especially important if you plan to
122
+ work on multiple pull requests at the same time.
123
+
124
+ Development dependencies
125
+ ~~~~~~~~~~~~~~~~~~~~~~~~
126
+
127
+ Code formatting and other tasks require external tools to be installed. All
128
+ of them are listed in the `<requirements-dev.txt>`_ file and you can install
129
+ them by running::
130
+
131
+ pip install -r requirements-dev.txt
132
+
133
+ Coding conventions
134
+ ~~~~~~~~~~~~~~~~~~
135
+
136
+ Robot Framework follows the general Python code conventions defined in `PEP-8
137
+ <https://peps.python.org/pep-0008/>`_. Code is `automatically formatted`__, but
138
+ `manual adjustments`__ may sometimes be needed.
139
+
140
+ __ `Automatic formatting`_
141
+ __ `Manual formatting adjustments`_
142
+
143
+ Automatic formatting
144
+ ''''''''''''''''''''
145
+
146
+ The code is automatically linted and formatted using a combination of tools
147
+ that are driven by an `Invoke <https://pyinvoke.org/>`_ task::
148
+
149
+ invoke format
150
+
151
+ Make sure to run this command before creating a pull request!
152
+
153
+ By default the task formats Python code under ``src``, ``atest`` and ``utest``
154
+ directories, but it can be configured to format only certain directories
155
+ or files::
156
+
157
+ invoke format -t src
158
+
159
+ Formatting is done in multiple phases:
160
+
161
+ 1. Code is linted using `Ruff <https://docs.astral.sh/ruff/>`_ . If linting
162
+ fails, the formatting process is stopped.
163
+ 2. Code is formatted code using `Black <https://black.readthedocs.io/>`_.
164
+ We plan to switch to Ruff as soon as they stop removing the
165
+ `empty row after the class declaration`__.
166
+ 3. Multiline imports are reformatted using `isort <https://pycqa.github.io/isort/>`_.
167
+ We use the "`hanging grid grouped`__" style to use less vertical space compared
168
+ to having each imported item on its own row. Public APIs using `redundant import
169
+ aliases`__ are not reformatted, though.
170
+
171
+ Tool configurations are in the `<pyproject.toml>`_ file.
172
+
173
+ __ https://github.com/astral-sh/ruff/issues/9745
174
+ __ https://pycqa.github.io/isort/docs/configuration/multi_line_output_modes.html#5-hanging-grid-grouped
175
+ __ https://typing.python.org/en/latest/spec/distributing.html#import-conventions
176
+
177
+ Manual formatting adjustments
178
+ '''''''''''''''''''''''''''''
179
+
180
+ Automatic formatting works pretty well, but there are some cases where the results
181
+ are suboptimal and manual adjustments are needed.
182
+
183
+ .. note:: As a contributor, you do not need to care about this if you do not want to.
184
+ Maintainers can fix these issues themselves after merging your pull request.
185
+ Just running the aforementioned ``invoke format`` is enough.
186
+
187
+ Force lists to have one item per row
188
+ ````````````````````````````````````
189
+
190
+ Automatic formatting has three modes how to handle lists:
191
+
192
+ - Short lists are formatted on a single row. This includes list items and opening
193
+ and closing braces and other markers.
194
+ - If all list items fit into a single row, but the whole list with opening and
195
+ closing markers does not, items are placed into a single row and opening and
196
+ closing markers are on their own rows.
197
+ - Long lists are formatted so that all list items are own their own rows and
198
+ opening and closing markers are on their own rows as well.
199
+
200
+ In addition to lists and other containers, the above applies also to function
201
+ calls and function signatures:
202
+
203
+ .. sourcecode:: python
204
+
205
+ def short(first_arg: Iterable[int], second_arg: int = 0) -> int:
206
+ ...
207
+
208
+ def medium(
209
+ first_arg: Iterable[float], second_arg: float = 0.0, third_arg: bool = True
210
+ ) -> int:
211
+ ...
212
+
213
+ def long(
214
+ first_arg: Iterable[float],
215
+ second_arg: float = 0.0,
216
+ third_arg: bool = True,
217
+ fourth_arg: bool = False,
218
+ ) -> int:
219
+ ...
220
+
221
+ This formatting is typically fine, but similar code being formatted differently
222
+ in a single file can look inconsistent. Having multiple items in a single row, as in
223
+ the ``medium`` example above, can also make the code hard to read. A simple fix
224
+ is forcing list items to own rows by adding a `magic trailing comma`__ and running
225
+ auto-formatter again:
226
+
227
+ .. sourcecode:: python
228
+
229
+ def short(first_arg: Iterable[int], second_arg: int = 0) -> int:
230
+ ...
231
+
232
+ def medium(
233
+ first_arg: Iterable[float],
234
+ second_arg: float = 0.0,
235
+ third_arg: bool = True,
236
+ ) -> int:
237
+ ...
238
+
239
+ def long(
240
+ first_arg: Iterable[float],
241
+ second_arg: float = 0.0,
242
+ third_arg: bool = True,
243
+ fourth_arg: bool = False,
244
+ ) -> int:
245
+ ...
246
+
247
+ Lists and signatures fitting into a single line, such as the ``short`` example above,
248
+ should typically not be forced to multiple lines.
249
+
250
+ __ https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#the-magic-trailing-comma
251
+
252
+ Force multi-line lists to have multiple items per row
253
+ `````````````````````````````````````````````````````
254
+
255
+ Automatically formatting all list items into own rows uses a lot of vertical space.
256
+ This is typically not a problem, but with long lists having simple items it can
257
+ be somewhat annoying:
258
+
259
+ .. sourcecode:: python
260
+
261
+ class Branches(
262
+ BaseBranches[
263
+ 'Keyword',
264
+ 'For',
265
+ 'While',
266
+ 'Group',
267
+ 'If',
268
+ 'Try',
269
+ 'Var',
270
+ 'Return',
271
+ 'Continue',
272
+ 'Break',
273
+ 'Message',
274
+ 'Error',
275
+ IT,
276
+ ]
277
+ ):
278
+ __slots__ = ()
279
+
280
+
281
+ added_in_rf60 = {
282
+ "bg",
283
+ "bs",
284
+ "cs",
285
+ "de",
286
+ "en",
287
+ "es",
288
+ "fi",
289
+ "fr",
290
+ "hi",
291
+ "it",
292
+ "nl",
293
+ "pl",
294
+ "pt",
295
+ "pt-BR",
296
+ "ro",
297
+ "ru",
298
+ "sv",
299
+ "th",
300
+ "tr",
301
+ "uk",
302
+ "zh-CN",
303
+ "zh-TW",
304
+ }
305
+
306
+ The best way to fix this is disabling formatting altogether with the ``# fmt: skip``
307
+ pragma. The code should be formatted so that opening and closing list markers
308
+ are on their own rows, list items are wrapped, and the ``# fmt: skip`` pragma
309
+ is placed after the closing list marker:
310
+
311
+ .. sourcecode:: python
312
+
313
+ class Branches(BaseBranches[
314
+ "Keyword", "For", "While", "Group", "If", "Try", "Var", "Return", "Continue",
315
+ "Break", "Message", "Error", IT,
316
+ ]): # fmt: skip
317
+ __slots__ = ()
318
+
319
+
320
+ added_in_rf60 = {
321
+ "bg", "bs", "cs", "de", "en", "es", "fi", "fr", "hi", "it", "nl", "pl",
322
+ "pt", "pt-BR", "ro", "ru", "sv", "th", "tr", "uk", "zh-CN", "zh-TW",
323
+ } # fmt: skip
324
+
325
+ Handle Boolean expressions
326
+ ``````````````````````````
327
+
328
+ Autoformatting handles Boolean expressions having two items that do not fit into
329
+ a single line *really* strangely:
330
+
331
+ .. sourcecode:: python
332
+
333
+ ext = getattr(self.parser, 'EXTENSION', None) or getattr(
334
+ self.parser, 'extension', None
335
+ )
336
+
337
+ return self._get_runner_from_resource_files(
338
+ name
339
+ ) or self._get_runner_from_libraries(name)
340
+
341
+ Expressions having three or more items would be grouped with parentheses and
342
+ `there is an issue`__ about doing that also if there are two items. A workaround
343
+ is using parentheses and disabling formatting with the ``# fmt: skip`` pragma:
344
+
345
+ .. sourcecode:: python
346
+
347
+ ext = (
348
+ getattr(self.parser, 'EXTENSION', None)
349
+ or getattr(self.parser, 'extension', None)
350
+ ) # fmt: skip
351
+
352
+ return (
353
+ self._get_runner_from_resource_files(name)
354
+ or self._get_runner_from_libraries(name)
355
+ ) # fmt: skip
356
+
357
+ __ https://github.com/psf/black/issues/2156
358
+
359
+ Inline comment handling
360
+ ```````````````````````
361
+
362
+ Autoformatting normalizes the number of spaces before an inline comment into two.
363
+ That is typically fine, but if subsequent lines use inline comments, the result
364
+ can be suboptimal__:
365
+
366
+ .. sourcecode:: python
367
+
368
+ TypeHint = Union[
369
+ type, # Actual type.
370
+ str, # Type name or alias.
371
+ UnionType, # Union syntax (e.g. `int | float`).
372
+ 'tuple[TypeHint, ...]', # Tuple of type hints. Behaves like a union.
373
+ ]
374
+
375
+ A solution is manually aligning comments and disabling autoformatting:
376
+
377
+ .. sourcecode:: python
378
+
379
+ TypeHint = Union[
380
+ type, # Actual type.
381
+ str, # Type name or alias.
382
+ UnionType, # Union syntax (e.g. `int | float`).
383
+ "tuple[TypeHint, ...]" # Tuple of type hints. Behaves like a union.
384
+ ] # fmt: skip
385
+
386
+ In the above example formatting is disabled with the ``# fmt: skip`` pragma, but
387
+ it does not work if inline comments are not related to a single statement. In such
388
+ cases the ``# fmt: off`` and ``# fmt: on`` pair can be used instead. In this example
389
+ formatting is disabled to allow aligning constant values in addition to comments:
390
+
391
+ .. sourcecode:: python
392
+
393
+ # fmt: off
394
+ INFO_PRINTED = 251 # --help or --version
395
+ DATA_ERROR = 252 # Invalid data or cli args
396
+ STOPPED_BY_USER = 253 # KeyboardInterrupt or SystemExit
397
+ FRAMEWORK_ERROR = 255 # Unexpected error
398
+ # fmt: on
399
+
400
+ __ https://github.com/psf/black/issues/4651
401
+
402
+ Docstrings
403
+ ''''''''''
404
+
405
+ Docstrings should be added to public APIs, but they are not generally needed in
406
+ internal code. When docstrings are added, they should follow `PEP-257
407
+ <https://www.python.org/dev/peps/pep-0257/>`_. See `API documentation`_
408
+ section below for more details about documentation syntax, generating
409
+ API docs, etc.
410
+
411
+ Type hints
412
+ ''''''''''
413
+
414
+ All public APIs must have type hints and adding type hints also to new internal
415
+ code is recommended. Full type coverage is not a goal at the moment, though.
416
+
417
+ Type hints should follow the Python `Typing Best Practices
418
+ <https://typing.python.org/en/latest/reference/best_practices.html>`_ with the
419
+ following exceptions:
420
+
421
+ - Annotation features are restricted to the minimum Python version supported by
422
+ Robot Framework.
423
+ - Annotations should use the stringified format for annotations not supported
424
+ by the minimum supported Python version. For example, ``"int | float"``
425
+ instead of ``Union[int, float]`` and ``"list[int]"`` instead of ``List[int]``.
426
+ Type aliases are an exception to this rule.
427
+ - Keywords accepting either an integer or a float should typically be annotated as
428
+ ``int | float`` instead of just ``float``. This way argument conversion tries to
429
+ first convert arguments to an integer and only converts to a float if that fails.
430
+ - No ``-> None`` annotation on functions that do not explicitly return anything.
431
+
432
+ Documentation
433
+ ~~~~~~~~~~~~~
434
+
435
+ With new features adequate documentation is as important as the actual
436
+ functionality. Different documentation is needed depending on the issue.
437
+
438
+ User Guide
439
+ ''''''''''
440
+
441
+ Robot Framework's features are explained in the `User Guide
442
+ <http://robotframework.org/robotframework/#user-guide>`_. It is generated
443
+ using a custom script based on the source in `reStructuredText
444
+ <https://docutils.sourceforge.io/rst.html>`_ format. For more details about
445
+ editing and generating it see `<doc/userguide/README.rst>`_.
446
+
447
+ Libraries
448
+ '''''''''
449
+
450
+ If `standard libraries
451
+ <http://robotframework.org/robotframework/#standard-libraries>`_ distributed
452
+ with Robot Framework are enhanced, also their documentation needs to
453
+ be updated. Keyword documentation is created from docstrings using the `Libdoc
454
+ <http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#libdoc>`_
455
+ tool. Documentation must use Robot Framework's own `documentation formatting
456
+ <http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#documentation-formatting>`_
457
+ and follow these guidelines:
458
+
459
+ - All new enhancements or changes should have a note telling when the change
460
+ was introduced. Often adding something like ``New in Robot Framework 7.3.``
461
+ is enough.
462
+
463
+ - Other keywords and sections in the library introduction can be referenced
464
+ with internal links created with backticks like ```Example Keyword```.
465
+
466
+ - When referring to arguments, argument names must use inline code style
467
+ created with double backticks like ````argument````.
468
+
469
+ - Examples are recommended whenever the new keyword or enhanced functionality is
470
+ not trivial.
471
+
472
+ Library documentation can be generated using Invoke_ by running command
473
+
474
+ ::
475
+
476
+ invoke library-docs <name>
477
+
478
+ where ``<name>`` is the name of the library or its unique prefix. Run
479
+
480
+ ::
481
+
482
+ invoke --help library-docs
483
+
484
+ for more information.
485
+
486
+ API documentation
487
+ '''''''''''''''''
488
+
489
+ Modules and classes defined to be public should have API documentation.
490
+ We do not generally use API docs with internal code because it is so hard
491
+ to keep the docs in sync with the code. Instead we try to keep the code
492
+ as clean and easy to understand as possible.
493
+
494
+ API docs are created using docstrings following guidelines defined in
495
+ `PEP-257`_. They are converted to HTML using `Sphinx <http://sphinx-doc.org/>`_
496
+ and its `autodoc <http://sphinx-doc.org/ext/autodoc.html>`_ extension.
497
+ Documentation can be created locally using `<doc/api/generate.py>`_ script
498
+ that unfortunately creates a lot of errors on the console. Releases API docs
499
+ are visible at https://robot-framework.readthedocs.org/.
500
+
501
+ Tests
502
+ ~~~~~
503
+
504
+ When submitting a pull request with a new feature or a fix, you should
505
+ always include tests for your changes. These tests prove that your changes
506
+ work, help prevent bugs in the future, and help document what your changes
507
+ do. Depending on the change, you may need acceptance tests, unit tests
508
+ or both.
509
+
510
+ Make sure to run all of the tests before submitting a pull request to be sure
511
+ that your changes do not break anything. If you can, test in multiple
512
+ environments and interpreters (Windows, Linux, OS X, different Python
513
+ versions etc). Pull requests are also automatically tested by GitHub Actions.
514
+
515
+ Executing changed code
516
+ ''''''''''''''''''''''
517
+
518
+ If you want to manually verify the changes, an easy approach is directly
519
+ running the `<src/robot/run.py>`_ script that is part of Robot Framework
520
+ itself. Alternatively, you can use the `<rundevel.py>`_ script that sets
521
+ some command line options and environment variables to ease executing tests
522
+ under the `<atest/testdata>`_ directory. It also automatically creates a
523
+ ``tmp`` directory in the project root and writes all outputs there.
524
+
525
+ Acceptance tests
526
+ ''''''''''''''''
527
+
528
+ Most of Robot Framework's testing is done using acceptance tests that
529
+ naturally use Robot Framework itself for testing. Every new functionality
530
+ or fix should generally get one or more acceptance tests. See
531
+ `<atest/README.rst>`_ for more details about creating and executing them.
532
+
533
+ Unit tests
534
+ ''''''''''
535
+
536
+ Unit tests are great for testing internal logic and should be added when
537
+ appropriate. For more details see `<utest/README.rst>`_.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: robotframework
3
- Version: 7.3rc2
3
+ Version: 7.3.1
4
4
  Summary: Generic automation framework for acceptance testing and robotic process automation (RPA)
5
5
  Home-page: https://robotframework.org
6
6
  Download-URL: https://pypi.org/project/robotframework
@@ -10,7 +10,7 @@ License: Apache License 2.0
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-7.3rc2.rst
13
+ Project-URL: Release Notes, https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-7.3.1.rst
14
14
  Project-URL: Slack, http://slack.robotframework.org
15
15
  Keywords: robotframework automation testautomation rpa testing acceptancetesting atdd bdd
16
16
  Platform: any
@@ -1,15 +1,10 @@
1
- [project]
2
- requires-python = ">=3.8"
3
-
4
1
  [tool.black]
5
2
  line_length = 88
6
- extend-exclude = "atest/result/"
3
+ # When we add [project] with requires-python, remove this and Ruff's target-version
4
+ target-version = ["py38", "py39", "py310", "py311", "py312", "py313"]
7
5
 
8
6
  [tool.ruff]
9
- extend-exclude = ["atest/result/"]
10
-
11
- [tool.ruff.format]
12
- quote-style = "double"
7
+ target-version = "py38"
13
8
 
14
9
  [tool.ruff.lint]
15
10
  extend-select = ["I"] # imports
@@ -33,7 +28,6 @@ order-by-type = false
33
28
  # https://pycqa.github.io/isort/docs/configuration/multi_line_output_modes.html
34
29
  multi_line_output = 5
35
30
  extend_skip = ["__init__.py", "src/robot/api/parsing.py"]
36
- skip_glob = ["atest/result/*"]
37
31
  combine_as_imports = true
38
32
  order_by_type = false
39
33
  line_length = 88