robotframework 7.3rc3__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.
- {robotframework-7.3rc3 → robotframework-7.3.1}/BUILD.rst +24 -37
- robotframework-7.3.1/CONTRIBUTING.rst +537 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/PKG-INFO +2 -2
- {robotframework-7.3rc3 → robotframework-7.3.1}/setup.py +1 -1
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/api/interfaces.py +3 -5
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/errors.py +4 -4
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/log.js +5 -2
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/BuiltIn.py +32 -18
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/argumentparser.py +61 -55
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/embedded.py +25 -20
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/typeconverters.py +2 -2
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/bodyrunner.py +22 -18
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/builder/builders.py +1 -1
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/userkeywordrunner.py +1 -1
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/filereader.py +1 -1
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/version.py +1 -1
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robotframework.egg-info/PKG-INFO +2 -2
- robotframework-7.3rc3/CONTRIBUTING.rst +0 -295
- {robotframework-7.3rc3 → robotframework-7.3.1}/AUTHORS.rst +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/COPYRIGHT.txt +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/INSTALL.rst +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/LICENSE.txt +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/MANIFEST.in +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/README.rst +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/pyproject.toml +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/setup.cfg +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/__main__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/api/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/api/deco.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/api/exceptions.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/api/logger.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/api/parsing.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/api/py.typed +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/conf/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/conf/gatherfailed.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/conf/languages.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/conf/settings.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/common/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/common/js_disabled.css +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/common/storage.js +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/htmlfilewriter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/jsonwriter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/lib/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/lib/jquery.highlight.min.js +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/lib/jquery.min.js +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/lib/jquery.tablesorter.min.js +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/lib/jquery.tmpl.min.js +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/lib/jsxcompressor.min.js +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/libdoc/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/libdoc/libdoc.html +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/common.css +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/doc_formatting.css +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/fileloading.js +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/log.css +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/log.html +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/model.js +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/print.css +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/report.css +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/report.html +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/testdata.js +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/util.js +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/rebot/view.js +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/template.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/testdoc/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/testdoc/testdoc.css +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/htmldata/testdoc/testdoc.html +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdoc.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/builder.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/consoleviewer.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/datatypes.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/htmlutils.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/htmlwriter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/jsonbuilder.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/jsonwriter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/languages.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/model.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/output.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/robotbuilder.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/standardtypes.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/writer.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/xmlbuilder.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libdocpkg/xmlwriter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/Collections.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/DateTime.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/Dialogs.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/Easter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/OperatingSystem.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/Process.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/Remote.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/Screenshot.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/String.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/Telnet.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/XML.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/libraries/dialogs_py.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/logo.png +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/body.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/configurer.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/control.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/filter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/fixture.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/itemlist.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/keyword.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/message.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/metadata.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/modelobject.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/modifier.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/namepatterns.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/statistics.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/stats.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/suitestatistics.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/tags.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/tagsetter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/tagstatistics.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/testcase.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/testsuite.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/totalstatistics.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/model/visitor.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/console/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/console/dotted.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/console/highlighting.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/console/quiet.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/console/verbose.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/debugfile.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/filelogger.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/jsonlogger.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/librarylogger.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/listeners.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/logger.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/loggerapi.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/loggerhelper.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/loglevel.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/output.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/outputfile.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/pyloggingconf.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/stdoutlogsplitter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/output/xmllogger.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/lexer/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/lexer/blocklexers.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/lexer/context.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/lexer/lexer.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/lexer/settings.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/lexer/statementlexers.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/lexer/tokenizer.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/lexer/tokens.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/model/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/model/blocks.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/model/statements.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/model/visitor.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/parser/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/parser/blockparsers.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/parser/fileparser.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/parser/parser.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/parsing/suitestructure.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/pythonpathsetter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/rebot.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/reporting/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/reporting/expandkeywordmatcher.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/reporting/jsbuildingcontext.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/reporting/jsexecutionresult.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/reporting/jsmodelbuilders.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/reporting/jswriter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/reporting/logreportwriters.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/reporting/outputwriter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/reporting/resultwriter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/reporting/stringcache.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/reporting/xunitwriter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/configurer.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/executionerrors.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/executionresult.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/flattenkeywordmatcher.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/keywordremover.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/merger.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/messagefilter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/model.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/modeldeprecation.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/resultbuilder.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/suiteteardownfailed.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/visitor.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/result/xmlelementhandlers.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/run.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/argumentconverter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/argumentmapper.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/argumentresolver.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/argumentspec.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/argumentvalidator.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/customconverters.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/typeinfo.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/typeinfoparser.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/arguments/typevalidator.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/builder/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/builder/parsers.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/builder/settings.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/builder/transformers.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/context.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/dynamicmethods.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/importer.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/invalidkeyword.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/keywordfinder.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/keywordimplementation.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/librarykeyword.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/librarykeywordrunner.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/libraryscopes.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/model.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/namespace.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/outputcapture.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/randomizer.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/resourcemodel.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/runkwregister.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/signalhandler.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/status.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/statusreporter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/suiterunner.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/testlibraries.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/timeouts/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/timeouts/nosupport.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/timeouts/posix.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/timeouts/runner.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/timeouts/timeout.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/running/timeouts/windows.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/testdoc.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/application.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/argumentparser.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/asserts.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/charwidth.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/compress.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/connectioncache.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/dotdict.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/encoding.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/encodingsniffer.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/error.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/escaping.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/etreewrapper.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/frange.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/htmlformatters.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/importer.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/json.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/markuputils.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/markupwriters.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/match.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/misc.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/normalizing.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/notset.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/platform.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/recommendations.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/restreader.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/robotenv.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/robotinspect.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/robotio.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/robotpath.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/robottime.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/robottypes.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/setter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/sortable.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/text.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/typehints.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/utils/unic.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/__init__.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/assigner.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/evaluation.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/filesetter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/finders.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/notfound.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/replacer.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/resolvable.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/scopes.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/search.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/store.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/tablesetter.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robot/variables/variables.py +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robotframework.egg-info/SOURCES.txt +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robotframework.egg-info/dependency_links.txt +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robotframework.egg-info/entry_points.txt +0 -0
- {robotframework-7.3rc3 → robotframework-7.3.1}/src/robotframework.egg-info/top_level.txt +0 -0
- {robotframework-7.3rc3 → 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.
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
163
|
-
|
|
165
|
+
2. Regenerate HTML template and update the list of supported localizations in
|
|
166
|
+
the ``--help`` text::
|
|
164
167
|
|
|
165
|
-
|
|
166
|
-
with the latest supported lagnuages.
|
|
168
|
+
invoke build-libdoc
|
|
167
169
|
|
|
168
|
-
Commit
|
|
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. `
|
|
277
|
-
|
|
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
|
-
|
|
293
|
-
<https://www.linkedin.com/groups/3710899/>`_ group.
|
|
282
|
+
2. `Forum <https://forum.robotframework.org/>`_.
|
|
294
283
|
|
|
295
|
-
|
|
296
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
|
@@ -6,7 +6,7 @@ from setuptools import find_packages, setup
|
|
|
6
6
|
|
|
7
7
|
# Version number typically updated by running `invoke set-version <version>`.
|
|
8
8
|
# Run `invoke --help set-version` or see tasks.py for details.
|
|
9
|
-
VERSION = "7.
|
|
9
|
+
VERSION = "7.3.1"
|
|
10
10
|
with open(join(dirname(abspath(__file__)), "README.rst")) as f:
|
|
11
11
|
LONG_DESCRIPTION = f.read()
|
|
12
12
|
base_url = "https://github.com/robotframework/robotframework/blob/master"
|