robotframework 7.4.1__tar.gz → 7.4.2__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.4.1 → robotframework-7.4.2}/INSTALL.rst +8 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/PKG-INFO +2 -2
- {robotframework-7.4.1 → robotframework-7.4.2}/setup.py +1 -1
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/conf/languages.py +4 -4
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/libdoc/libdoc.html +2 -2
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/htmlutils.py +25 -31
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/robotbuilder.py +7 -3
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/Process.py +6 -6
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/Telnet.py +15 -11
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/lexer/tokenizer.py +22 -11
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/testdoc.py +3 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/importer.py +2 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/normalizing.py +12 -1
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/version.py +1 -1
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robotframework.egg-info/PKG-INFO +2 -2
- {robotframework-7.4.1 → robotframework-7.4.2}/AUTHORS.rst +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/BUILD.rst +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/CONTRIBUTING.rst +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/COPYRIGHT.txt +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/LICENSE.txt +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/MANIFEST.in +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/README.rst +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/pyproject.toml +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/setup.cfg +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/__main__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/api/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/api/deco.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/api/exceptions.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/api/interfaces.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/api/logger.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/api/parsing.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/api/py.typed +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/api/types.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/conf/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/conf/gatherfailed.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/conf/settings.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/errors.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/common/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/common/js_disabled.css +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/common/storage.js +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/htmlfilewriter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/jsonwriter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/lib/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/lib/jquery.highlight.min.js +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/lib/jquery.min.js +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/lib/jquery.tablesorter.min.js +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/lib/jquery.tmpl.min.js +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/lib/jsxcompressor.min.js +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/libdoc/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/common.css +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/doc_formatting.css +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/fileloading.js +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/log.css +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/log.html +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/log.js +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/model.js +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/print.css +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/report.css +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/report.html +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/testdata.js +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/util.js +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/rebot/view.js +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/template.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/testdoc/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/testdoc/testdoc.css +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/testdoc/testdoc.html +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdoc.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/builder.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/consoleviewer.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/datatypes.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/htmlwriter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/jsonbuilder.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/jsonwriter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/languages.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/model.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/output.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/standardtypes.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/writer.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/xmlbuilder.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libdocpkg/xmlwriter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/BuiltIn.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/Collections.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/DateTime.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/Dialogs.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/Easter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/OperatingSystem.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/Remote.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/Screenshot.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/String.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/XML.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/dialogs_py.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/normalizer.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/libraries/py.typed +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/logo.png +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/body.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/configurer.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/control.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/filter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/fixture.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/itemlist.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/keyword.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/message.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/metadata.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/modelobject.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/modifier.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/namepatterns.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/statistics.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/stats.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/suitestatistics.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/tags.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/tagsetter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/tagstatistics.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/testcase.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/testsuite.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/totalstatistics.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/model/visitor.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/console/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/console/dotted.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/console/highlighting.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/console/quiet.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/console/verbose.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/debugfile.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/filelogger.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/jsonlogger.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/librarylogger.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/listeners.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/logger.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/loggerapi.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/loggerhelper.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/loglevel.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/output.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/outputfile.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/pyloggingconf.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/stdoutlogsplitter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/output/xmllogger.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/lexer/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/lexer/blocklexers.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/lexer/context.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/lexer/lexer.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/lexer/settings.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/lexer/statementlexers.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/lexer/tokens.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/model/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/model/blocks.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/model/statements.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/model/visitor.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/parser/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/parser/blockparsers.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/parser/fileparser.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/parser/parser.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/parsing/suitestructure.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/pythonpathsetter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/rebot.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/reporting/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/reporting/expandkeywordmatcher.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/reporting/jsbuildingcontext.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/reporting/jsexecutionresult.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/reporting/jsmodelbuilders.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/reporting/jswriter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/reporting/logreportwriters.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/reporting/outputwriter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/reporting/resultwriter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/reporting/stringcache.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/reporting/xunitwriter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/configurer.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/executionerrors.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/executionresult.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/flattenkeywordmatcher.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/keywordremover.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/merger.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/messagefilter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/model.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/modeldeprecation.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/resultbuilder.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/suiteteardownfailed.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/visitor.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/result/xmlelementhandlers.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/run.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/argumentconverter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/argumentmapper.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/argumentparser.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/argumentresolver.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/argumentspec.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/argumentvalidator.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/customconverters.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/embedded.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/typeconverters.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/typeinfo.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/typeinfoparser.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/arguments/typevalidator.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/bodyrunner.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/builder/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/builder/builders.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/builder/parsers.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/builder/settings.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/builder/transformers.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/context.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/dynamicmethods.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/importer.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/invalidkeyword.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/keywordfinder.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/keywordimplementation.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/librarykeyword.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/librarykeywordrunner.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/libraryscopes.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/model.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/namespace.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/outputcapture.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/randomizer.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/resourcemodel.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/runkwregister.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/signalhandler.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/status.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/statusreporter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/suiterunner.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/testlibraries.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/timeouts/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/timeouts/nosupport.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/timeouts/posix.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/timeouts/runner.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/timeouts/timeout.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/timeouts/windows.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/running/userkeywordrunner.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/application.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/argumentparser.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/asserts.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/charwidth.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/compress.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/connectioncache.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/dotdict.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/encoding.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/encodingsniffer.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/error.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/escaping.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/etreewrapper.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/filereader.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/frange.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/htmlformatters.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/json.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/markuputils.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/markupwriters.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/match.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/misc.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/notset.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/platform.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/recommendations.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/restreader.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/robotenv.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/robotinspect.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/robotio.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/robotpath.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/robottime.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/robottypes.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/secret.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/setter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/sortable.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/text.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/typehints.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/utils/unic.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/__init__.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/assigner.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/evaluation.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/filesetter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/finders.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/notfound.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/replacer.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/resolvable.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/scopes.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/search.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/store.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/tablesetter.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robot/variables/variables.py +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robotframework.egg-info/SOURCES.txt +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robotframework.egg-info/dependency_links.txt +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robotframework.egg-info/entry_points.txt +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/src/robotframework.egg-info/top_level.txt +0 -0
- {robotframework-7.4.1 → robotframework-7.4.2}/tasks.py +0 -0
|
@@ -302,6 +302,14 @@ version.
|
|
|
302
302
|
C:\>py -3.11 -m robot --version
|
|
303
303
|
Robot Framework 7.0 (Python 3.11.7 on win32)
|
|
304
304
|
|
|
305
|
+
Dependencies
|
|
306
|
+
------------
|
|
307
|
+
|
|
308
|
+
Robot Framework core functionality has no mandatory dependencies other than
|
|
309
|
+
Python and its standard library. Some individual features may require optional
|
|
310
|
+
dependencies to be installed, though. What dependencies are needed is always
|
|
311
|
+
explained in the relevant documentation.
|
|
312
|
+
|
|
305
313
|
Virtual environments
|
|
306
314
|
--------------------
|
|
307
315
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: robotframework
|
|
3
|
-
Version: 7.4.
|
|
3
|
+
Version: 7.4.2
|
|
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.4.
|
|
13
|
+
Project-URL: Release Notes, https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-7.4.2.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.4.
|
|
9
|
+
VERSION = "7.4.2"
|
|
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"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
import inspect
|
|
17
17
|
import re
|
|
18
18
|
from pathlib import Path
|
|
19
|
-
from typing import
|
|
19
|
+
from typing import Iterable, Iterator, Union
|
|
20
20
|
|
|
21
21
|
from robot.errors import DataError
|
|
22
22
|
from robot.utils import classproperty, Importer, is_list_like, normalize
|
|
@@ -148,8 +148,8 @@ class Languages:
|
|
|
148
148
|
def _get_available_languages(self) -> "dict[str, type[Language]]":
|
|
149
149
|
available = {}
|
|
150
150
|
for lang in Language.__subclasses__():
|
|
151
|
-
available[normalize(
|
|
152
|
-
available[normalize(
|
|
151
|
+
available[normalize(lang.code, ignore="-")] = lang
|
|
152
|
+
available[normalize(lang.name)] = lang
|
|
153
153
|
if "" in available:
|
|
154
154
|
available.pop("")
|
|
155
155
|
return available
|
|
@@ -252,7 +252,7 @@ class Language:
|
|
|
252
252
|
"""
|
|
253
253
|
if cls is Language:
|
|
254
254
|
return cls.__dict__["code"]
|
|
255
|
-
code =
|
|
255
|
+
code = cls.__name__.lower()
|
|
256
256
|
if len(code) < 3:
|
|
257
257
|
return code
|
|
258
258
|
return f"{code[:2]}-{code[2:].upper()}"
|
|
@@ -30,7 +30,7 @@ you have encountered a bug.
|
|
|
30
30
|
<script>document.getElementById("javascript-disabled").style.display="none",window.addEventListener("hashchange",function(){document.getElementsByClassName("hamburger-menu")[0].checked=!1},!1),window.addEventListener("hashchange",function(){if(0==window.location.hash.indexOf("#type-")){let e="#type-modal-"+decodeURI(window.location.hash.slice(6)),n=document.querySelector(".data-types").querySelector(e);n&&showModal(n)}},!1);</script>
|
|
31
31
|
|
|
32
32
|
<style>:root{--background-color:white;--text-color:black;--border-color:#e0e0e2;--light-background-color:#f3f3f3;--robot-highlight:#00c0b5;--highlighted-color:var(--text-color);--highlighted-background-color:yellow;--less-important-text-color:gray;--link-color:#00e}[data-theme=dark]{--background-color:#1c2227;--text-color:#e2e1d7;--border-color:#4e4e4e;--light-background-color:#002b36;--robot-highlight:yellow;--highlighted-color:var(--background-color);--highlighted-background-color:yellow;--less-important-text-color:#5b6a6f;--link-color:#52adff;color-scheme:dark}body{background:var(--background-color);color:var(--text-color);margin:0;font-family:system-ui,-apple-system,sans-serif}input,button,select{background:var(--background-color);color:var(--text-color)}a{color:var(--link-color)}.base-container{display:flex}.libdoc-overview{background:#fff;background:var(--background-color);flex-direction:column;height:100vh;display:flex;position:sticky;top:0}.libdoc-overview h4{margin-top:.5rem;margin-bottom:.5rem}.keyword-search-box{border:1px solid var(--border-color);border-radius:3px;justify-content:space-between;height:30px;margin-top:.5rem;display:flex}#tags-shortcuts-container{border:1px solid var(--border-color);border-radius:3px;height:30px;margin-top:.5rem}.search-input{text-indent:4px;border:none;flex:1}.clear-search{border:none}#shortcuts-container{flex-direction:column;height:100%;display:flex}.libdoc-details{max-width:1000px;margin-top:60px;padding-left:2%;padding-right:2%;overflow:auto}.libdoc-title{width:300px;height:36px;color:var(--text-color);align-items:center;margin:.5rem;padding:.5rem;text-decoration:none;display:flex;position:fixed;top:0;left:0}#language-container{z-index:1000;position:fixed;top:0;right:0}#language-container button{border:none;padding-top:15px;padding-right:15px}#language-container svg{width:20px;height:20px}#language-container svg path{stroke:var(--text-color);fill:var(--background-color)}#language-container ul{background-color:var(--background-color);margin:0;padding:10px;list-style:none}#language-container a{cursor:pointer;color:var(--less-important-text-color);text-decoration:none}#language-container a.selected{color:var(--text-color)}.hamburger-menu{z-index:100;display:none;position:fixed}input.hamburger-menu{cursor:pointer;opacity:0;z-index:2;-webkit-touch-callout:none;width:67px;height:46px;display:none;position:fixed;top:0;right:0}span.hamburger-menu{background:#000;background:var(--text-color);z-index:1;transform-origin:4px 0;border-radius:2px;width:31px;height:2px;margin-bottom:5px;transition:transform .3s cubic-bezier(.77,.2,.05,1),opacity .35s;position:fixed;right:20px}span.hamburger-menu-1{transform-origin:0 0;top:14px}span.hamburger-menu-2{top:24px}span.hamburger-menu-3{transform-origin:0 100%;top:34px}input.hamburger-menu:checked~span.hamburger-menu-1{opacity:1;background:var(--text-color);transform:rotate(45deg)translate(2px,-3px)}input.hamburger-menu:checked~span.hamburger-menu-2{opacity:0;transform:rotate(0)scale(.2)}input.hamburger-menu:checked~span.hamburger-menu-3{background:var(--text-color);transform:rotate(-45deg)translate(2px,3px)}.libdoc-title>svg{width:42px;height:42px;padding-top:2px}#robot-svg-path{fill:var(--text-color);stroke:none;fill-opacity:1;fill-rule:nonzero}.keywords-overview{border:1px solid var(--border-color);border-radius:3px;flex-direction:column;flex:1;height:0;max-height:calc(100vh - 60px - .5rem);margin:60px 0 .5rem .5rem;padding-left:.5rem;padding-right:.5rem;display:flex}.keywords-overview-header-row{justify-content:space-between;display:flex}.shortcuts{flex:1;max-width:320px;margin:0;padding-left:0;font-size:.9em;list-style:none;overflow:auto}.shortcuts.keyword-wall{flex:unset}.shortcuts a{white-space:nowrap;color:var(--text-color);padding:.5rem;text-decoration:none;display:block}.shortcuts a:hover{background:var(--light-background-color)}.shortcuts a:first-letter{letter-spacing:.1em;font-weight:700}.shortcuts.keyword-wall a{padding:0 .5rem .5rem 0}.shortcuts.keyword-wall a:after{content:"·";padding-left:.5rem}.enum-type-members,.dt-usages-list{padding-left:1em;list-style:none}.dt-usages-list>li{margin-bottom:.2em}.dt-usages a{color:var(--text-color);font-size:.9em;text-decoration:none;display:inline-block}.dt-usages a:first-letter{letter-spacing:.1em;font-weight:700}.arguments-list-container{margin-bottom:1.33rem;overflow-y:auto}.arguments-list{display:-ms-inline-grid;-ms-grid-columns:1fr 1fr 1fr;grid-template-columns:auto auto auto;row-gap:3px;display:inline-grid}.typed-dict-annotation>span,.enum-type-members span,.arguments-list .arg-name{-ms-grid-column:1;white-space:nowrap;border-radius:3px;grid-column:1;justify-self:start;padding-left:.5rem;padding-right:.5rem}.arguments-list .arg-default-container{-ms-grid-column:2;grid-column:2;display:flex}.optional-key{font-style:italic}.arguments-list .arg-default-eq{background:var(--background-color);margin-left:2rem;margin-right:.5rem}.arguments-list .arg-default-value{border-radius:3px;padding-left:.5rem;padding-right:.5rem}.arguments-list .base-arg-data{min-width:150px;display:flex}.arguments-list .arg-type,.return-type .arg-type{-ms-grid-column:3;background:var(--background-color);white-space:nowrap;-webkit-text-size-adjust:none;grid-column:3;margin-left:2rem}.tags .kw-tags{margin-left:2rem;display:flex}.tag-link{cursor:pointer}.tag-link:hover{text-decoration:underline}.arguments-list .arg-kind{color:#0000;text-shadow:0 0 0 var(--less-important-text-color);padding:0;font-size:.8em}@media only screen and (width>=900px){.libdoc-details{z-index:1;background:var(--background-color)}#toggle-keyword-shortcuts{border:1px solid var(--border-color);border-radius:3px;margin-top:3px;margin-bottom:3px}#toggle-keyword-shortcuts:hover{background:var(--light-background-color)}.shortcuts.keyword-wall{flex-wrap:wrap;width:320px;max-width:none;display:flex}}@media only screen and (width>=1200px){.shortcuts.keyword-wall{width:640px}}@media only screen and (width<=899px){.libdoc-overview,#toggle-keyword-shortcuts{display:none}.libdoc-title{border-bottom:1px solid var(--border-color);background:#fff;background:var(--background-color);width:100%;margin:0;padding:.5rem}.libdoc-title>svg{margin-right:60px}.libdoc-details{padding-left:.5rem}input.hamburger-menu,.hamburger-menu{display:block}.hamburger-menu:checked~.libdoc-overview{width:100%;height:100vh;display:block;position:fixed}.keywords-overview{border:none;margin:60px 0 0}.shortcuts{overscroll-behavior:none;max-width:100vw}#language-container{width:100px;right:50px}#language-container button{cursor:pointer}}.metadata{margin-top:.5rem}.metadata th{text-align:left;padding-right:1em}a.name,span.name{font-style:italic}.libdoc-details a img{border:1px solid #c30!important}a:hover,a:active{color:var(--text-color);text-decoration:underline}a:hover{text-decoration:underline!important}.normal-first-letter:first-letter{letter-spacing:0!important;font-weight:400!important}.shortcut-list-toggle,.tag-list-toggle{margin-bottom:1em;font-size:.9em}input.switch{display:none}.slider{background-color:var(--border-color);width:36px;height:18px;display:inline-block;position:relative;top:5px}.slider:before{background-color:var(--background-color);content:"";width:12px;height:12px;position:absolute;top:3px;left:3px}input.switch:checked+.slider:before{background-color:var(--background-color);left:21px}.keywords{flex-direction:column;display:flex}.kw-overview{flex-direction:column;justify-content:start;display:flex}@media only screen and (width>=899px){.kw-overview{max-width:850px;margin-right:1.5rem}}.kw-docs{flex-direction:column;display:flex;overflow-y:auto}.dt-name:link,.kw-name:link,.dt-name:visited,.kw-name:visited{color:var(--text-color);text-decoration:none}.kw{align-items:baseline;min-width:250px;display:flex}h4{margin-right:.5rem}.keyword-container{border:1px solid var(--border-color);border-radius:3px;flex-direction:column;margin-bottom:.5rem;padding:.5rem 1rem;scroll-margin-top:60px;display:flex}.keyword-container:target{box-shadow:0 0 4px var(--robot-highlight)}.data-type-content,.keyword-content{flex-direction:column;display:flex}.data-type-container{border-top:1px solid var(--border-color);flex-direction:column;margin-bottom:.5rem;padding:.5rem 1rem;scroll-margin-top:60px;display:flex}.kw-row{border:1px solid var(--border-color);border-radius:3px;flex-direction:column;justify-content:start;margin-bottom:.5rem;padding:.5rem 1rem;text-decoration:none;display:flex}.kw a{color:inherit;font-weight:700;text-decoration:none}.args{min-width:200px}.enum-type-members span,.args span,.return-type span,.args a{background:var(--light-background-color);padding:0 .1em;font-family:monospace;font-size:1.1em}.arg-type,span.type,a.type{background:0 0;padding:0;font-size:1em}.typed-dict-item .td-type:after{content:","}.typed-dict-item .td-type:nth-last-child(2):after{content:""}.td-item:before{content:" ";white-space:pre}.typed-dict-item{background:var(--light-background-color);padding:.4rem;font-family:monospace;font-size:1.1em;display:block}.args span .highlight{background:var(--highlighted-background-color);color:var(--highlighted-color)}.tags,.return-type{align-items:baseline;display:flex}.tags a{color:inherit;padding:0 .1em;text-decoration:none}.footer{font-size:.9em}.doc div>:last-child{margin-bottom:0}.highlight{background:var(--highlighted-background-color);color:var(--highlighted-color)}.data-type{font-style:italic}.no-match{color:var(--less-important-text-color)!important}.no-match .dt-name,.no-match .kw-name{color:var(--less-important-text-color)}.modal-icon{cursor:pointer;background:url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" height=\"100%\" width=\"100%\"><path stroke=\"black\" fill=\"none\" stroke-width=\"2px\" stroke-linecap=\"round\" d=\"M1 8 L1 1 L8 1 M16 1 L23 1 L23 8 M23 16 L23 23 L16 23 M8 23 L1 23 L1 16\"></path><path fill=\"black\" stroke=\"none\" stroke-width=\"1px\" transform=\"scale(1.3) translate(-3 -2.5)\" d=\"M19 7.97zm-8 9.2-4-2.3v-4.63l4 2.33v4.6zm1-6.33L8.04 8.53 12 6.25l3.96 2.28L12 10.84zm5 4.03-4 2.3v-4.6l4-2.33v4.63z\"></path></svg>");border:none;width:1rem;height:1rem;margin:0 .25rem;padding:0;font-size:12px;font-weight:600}@media (prefers-color-scheme:dark){.modal-icon{background:url("data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" height=\"100%\" width=\"100%\"><path stroke=\"%23e2e1d7\" fill=\"none\" stroke-width=\"2px\" stroke-linecap=\"round\" d=\"M1 8 L1 1 L8 1 M16 1 L23 1 L23 8 M23 16 L23 23 L16 23 M8 23 L1 23 L1 16\"></path><path fill=\"%23e2e1d7\" stroke=\"none\" stroke-width=\"1px\" transform=\"scale(1.3) translate(-3 -2.5)\" d=\"M19 7.97zm-8 9.2-4-2.3v-4.63l4 2.33v4.6zm1-6.33L8.04 8.53 12 6.25l3.96 2.28L12 10.84zm5 4.03-4 2.3v-4.6l4-2.33v4.63z\"></path></svg>")}}.modal-background,.modal{opacity:0;pointer-events:none;transition:opacity .2s}.modal-background{z-index:1;background-color:#000000b3;position:fixed;inset:0}.modal{background-color:var(--background-color);border:1px solid var(--border-color);z-index:2;border-radius:3px;flex-flow:column;width:720px;max-width:calc(100vw - 2rem);height:calc(100vh - 6rem);margin:0 auto;transition-delay:.1s;display:flex;overflow:auto}.modal-content{margin-bottom:3rem}.modal>.modal-content>.data-type-container{border-top:none}.modal-close-button-wrapper{justify-content:flex-end;display:flex}.modal-close-button-container{width:720px;max-width:calc(100vw - 2rem);margin:0 auto;overflow:auto}.modal-close-button{border:1px solid var(--border-color);cursor:pointer;border-radius:3px;margin:.5rem 0;padding:.25rem .5rem}.modal-background.visible,.modal.visible{opacity:1;pointer-events:all}#data-types-container,.hidden{display:none}</style>
|
|
33
|
-
<style>#introduction-container>h2,.doc>h1,.doc>h2,.section>h1,.section>h2{margin-top:4rem;margin-bottom:1rem}.doc>h3,.section>h3{margin-top:3rem;margin-bottom:1rem}.doc>h4,.section>h4{margin-top:2rem;margin-bottom:1rem}.doc>p,.section>p{margin-top:1rem;margin-bottom:.5rem}.doc>:first-child{margin-top:.1em}.doc table{border-collapse:collapse;empty-cells:show;background:0 0;border:none;font-size:.9em;display:block;overflow-y:auto}.doc table th,.doc table td{border:1px solid var(--border-color);background:0 0;height:1.2em;padding:.1em .3em}.doc table th{text-align:center;letter-spacing:.1em}.doc pre{letter-spacing:.05em;background:var(--light-background-color);border-radius:3px;padding:.3rem;font-size:1.1em;overflow-y:auto}.doc code,.docutils.literal{letter-spacing:.05em;background:var(--light-background-color);border-radius:3px;padding:1px;font-size:1.1em}.doc li{list-style-type:square;list-style-position:inside}.doc img{border:1px solid #ccc}.doc hr{background:#ccc;border:0;height:1px}</style>
|
|
33
|
+
<style>#introduction-container>h2,.doc>h1,.doc>h2,.section>h1,.section>h2{margin-top:4rem;margin-bottom:1rem}.doc>h3,.section>h3{margin-top:3rem;margin-bottom:1rem}.doc>h4,.section>h4{margin-top:2rem;margin-bottom:1rem}.doc>p,.section>p{margin-top:1rem;margin-bottom:.5rem}.doc>:first-child{margin-top:.1em}.doc table{border-collapse:collapse;empty-cells:show;background:0 0;border:none;font-size:.9em;display:block;overflow-y:auto}.doc table th,.doc table td{border:1px solid var(--border-color);background:0 0;height:1.2em;padding:.1em .3em}.doc table th{text-align:center;letter-spacing:.1em}.doc pre{letter-spacing:.05em;background:var(--light-background-color);border-radius:3px;padding:.3rem;font-size:1.1em;overflow-y:auto}.doc code,.docutils.literal{letter-spacing:.05em;background:var(--light-background-color);border-radius:3px;padding:1px;font-size:1.1em}.doc ul li{list-style-type:square;list-style-position:inside}.doc img{border:1px solid #ccc}.doc hr{background:#ccc;border:0;height:1px}</style>
|
|
34
34
|
<style>.code .hll{background-color:#ffc}.code{background:#f8f8f8}.code .c{color:#408080;font-style:italic}.code .err{border:1px solid red}.code .k{color:green;font-weight:700}.code .o{color:#666}.code .ch,.code .cm{color:#408080;font-style:italic}.code .cp{color:#bc7a00}.code .cpf,.code .c1,.code .cs{color:#408080;font-style:italic}.code .gd{color:#a00000}.code .ge{font-style:italic}.code .gr{color:red}.code .gh{color:navy;font-weight:700}.code .gi{color:#00a000}.code .go{color:#888}.code .gp{color:navy;font-weight:700}.code .gs{font-weight:700}.code .gu{color:purple;font-weight:700}.code .gt{color:#04d}.code .kc,.code .kd,.code .kn{color:green;font-weight:700}.code .kp{color:green}.code .kr{color:green;font-weight:700}.code .kt{color:#b00040}.code .m{color:#666}.code .s{color:#ba2121}.code .na{color:#7d9029}.code .nb{color:green}.code .nc{color:#00f;font-weight:700}.code .no{color:#800}.code .nd{color:#a2f}.code .ni{color:#999;font-weight:700}.code .ne{color:#d2413a;font-weight:700}.code .nf{color:#00f}.code .nl{color:#a0a000}.code .nn{color:#00f;font-weight:700}.code .nt{color:green;font-weight:700}.code .nv{color:#19177c}.code .ow{color:#a2f;font-weight:700}.code .w{color:#bbb}.code .mb,.code .mf,.code .mh,.code .mi,.code .mo{color:#666}.code .sa,.code .sb,.code .sc,.code .dl{color:#ba2121}.code .sd{color:#ba2121;font-style:italic}.code .s2{color:#ba2121}.code .se{color:#b62;font-weight:700}.code .sh{color:#ba2121}.code .si{color:#b68;font-weight:700}.code .sx{color:green}.code .sr{color:#b68}.code .s1{color:#ba2121}.code .ss{color:#19177c}.code .bp{color:green}.code .fm{color:#00f}.code .vc,.code .vg,.code .vi,.code .vm{color:#19177c}.code .il{color:#666}@media (prefers-color-scheme:dark){.code .hll{background-color:#073642}.code{color:#839496;background:#002b36}.code .c{color:#586e75;font-style:italic}.code .err{color:#839496;background-color:#dc322f}.code .esc,.code .g{color:#839496}.code .k{color:#859900}.code .l,.code .n{color:#839496}.code .o{color:#586e75}.code .x,.code .p{color:#839496}.code .ch,.code .cm{color:#586e75;font-style:italic}.code .cp{color:#d33682}.code .cpf{color:#586e75}.code .c1,.code .cs{color:#586e75;font-style:italic}.code .gd{color:#dc322f}.code .ge{color:#839496;font-style:italic}.code .gr{color:#dc322f}.code .gh{color:#839496;font-weight:700}.code .gi{color:#859900}.code .go,.code .gp{color:#839496}.code .gs{color:#839496;font-weight:700}.code .gu{color:#839496;text-decoration:underline}.code .gt{color:#268bd2}.code .kc,.code .kd{color:#2aa198}.code .kn{color:#cb4b16}.code .kp,.code .kr{color:#859900}.code .kt{color:#b58900}.code .ld{color:#839496}.code .m,.code .s{color:#2aa198}.code .na{color:#839496}.code .nb,.code .nc,.code .no,.code .nd,.code .ni,.code .ne,.code .nf,.code .nl,.code .nn{color:#268bd2}.code .nx,.code .py{color:#839496}.code .nt,.code .nv{color:#268bd2}.code .ow{color:#859900}.code .w{color:#839496}.code .mb,.code .mf,.code .mh,.code .mi,.code .mo,.code .sa,.code .sb,.code .sc,.code .dl{color:#2aa198}.code .sd{color:#586e75}.code .s2,.code .se,.code .sh,.code .si,.code .sx{color:#2aa198}.code .sr{color:#cb4b16}.code .s1,.code .ss{color:#2aa198}.code .bp,.code .fm,.code .vc,.code .vg,.code .vi,.code .vm{color:#268bd2}.code .il{color:#2aa198}}</style>
|
|
35
35
|
<style media=print>body{margin:0;padding:0;font-size:8pt}a{text-decoration:none}#search,#open-search{display:none}</style>
|
|
36
36
|
|
|
@@ -56,7 +56,7 @@ type="checkbox"
|
|
|
56
56
|
>{{scope}}</td></tr>{{/if}}
|
|
57
57
|
</table>
|
|
58
58
|
<div id="introduction-container">
|
|
59
|
-
<h2 id="
|
|
59
|
+
<h2 id="Introduction">{{t "intro"}}</h2>
|
|
60
60
|
<div class="doc">{{{doc}}}</div>
|
|
61
61
|
</div>
|
|
62
62
|
<div id="importing-container"></div>
|
|
@@ -23,18 +23,17 @@ from robot.utils.htmlformatters import HeaderFormatter
|
|
|
23
23
|
|
|
24
24
|
class DocFormatter:
|
|
25
25
|
_header_regexp = re.compile(r"<h([234])>(.+?)</h\1>")
|
|
26
|
-
_name_regexp = re.compile("`(.+?)`")
|
|
27
26
|
|
|
28
27
|
def __init__(self, keywords, type_info, introduction, doc_format="ROBOT"):
|
|
29
|
-
|
|
30
|
-
self._targets = self._get_targets(
|
|
28
|
+
targets = self._get_targets(
|
|
31
29
|
keywords,
|
|
30
|
+
type_info,
|
|
32
31
|
introduction,
|
|
33
32
|
robot_format=doc_format == "ROBOT",
|
|
34
33
|
)
|
|
35
|
-
self.
|
|
34
|
+
self._doc_to_html = DocToHtml(doc_format, targets)
|
|
36
35
|
|
|
37
|
-
def _get_targets(self, keywords, introduction, robot_format):
|
|
36
|
+
def _get_targets(self, keywords, type_info, introduction, robot_format):
|
|
38
37
|
targets = {
|
|
39
38
|
"introduction": "Introduction",
|
|
40
39
|
"library introduction": "Introduction",
|
|
@@ -42,16 +41,17 @@ class DocFormatter:
|
|
|
42
41
|
"library importing": "Importing",
|
|
43
42
|
"keywords": "Keywords",
|
|
44
43
|
}
|
|
45
|
-
for
|
|
46
|
-
targets[
|
|
44
|
+
for info in type_info:
|
|
45
|
+
targets[info.name] = "type-" + info.name
|
|
47
46
|
if robot_format:
|
|
48
47
|
for header in self._yield_header_targets(introduction):
|
|
49
48
|
targets[header] = header
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
for kw in keywords:
|
|
50
|
+
targets[kw.name] = kw.name
|
|
51
|
+
return {
|
|
52
|
+
html_escape(key): "#" + self._encode_uri_component(value)
|
|
53
|
+
for key, value in targets.items()
|
|
54
|
+
}
|
|
55
55
|
|
|
56
56
|
def _yield_header_targets(self, introduction):
|
|
57
57
|
headers = HeaderFormatter()
|
|
@@ -60,12 +60,6 @@ class DocFormatter:
|
|
|
60
60
|
if match:
|
|
61
61
|
yield match.group(2)
|
|
62
62
|
|
|
63
|
-
def _escape_and_encode_targets(self, targets):
|
|
64
|
-
return NormalizedDict(
|
|
65
|
-
(html_escape(key), self._encode_uri_component(value))
|
|
66
|
-
for key, value in targets.items()
|
|
67
|
-
)
|
|
68
|
-
|
|
69
63
|
def _encode_uri_component(self, value):
|
|
70
64
|
# Emulates encodeURIComponent javascript function
|
|
71
65
|
return quote(value.encode("UTF-8"), safe="-_.!~*'()")
|
|
@@ -74,23 +68,15 @@ class DocFormatter:
|
|
|
74
68
|
doc = self._doc_to_html(doc)
|
|
75
69
|
if intro:
|
|
76
70
|
doc = self._header_regexp.sub(r'<h\1 id="\2">\2</h\1>', doc)
|
|
77
|
-
return
|
|
78
|
-
|
|
79
|
-
def _link_keywords(self, match):
|
|
80
|
-
name = match.group(1)
|
|
81
|
-
targets = self._targets
|
|
82
|
-
types = self._type_info_targets
|
|
83
|
-
if name in targets:
|
|
84
|
-
return f'<a href="#{targets[name]}" class="name">{name}</a>'
|
|
85
|
-
if name in types:
|
|
86
|
-
return f'<a href="#type-{types[name]}" class="name">{name}</a>'
|
|
87
|
-
return f'<span class="name">{name}</span>'
|
|
71
|
+
return doc
|
|
88
72
|
|
|
89
73
|
|
|
90
74
|
class DocToHtml:
|
|
75
|
+
_name_regexp = re.compile("`(.+?)`")
|
|
91
76
|
|
|
92
|
-
def __init__(self, doc_format):
|
|
77
|
+
def __init__(self, doc_format, targets=None):
|
|
93
78
|
self._formatter = self._get_formatter(doc_format)
|
|
79
|
+
self._targets = NormalizedDict(targets)
|
|
94
80
|
|
|
95
81
|
def _get_formatter(self, doc_format):
|
|
96
82
|
try:
|
|
@@ -119,7 +105,15 @@ class DocToHtml:
|
|
|
119
105
|
return parts["html_body"]
|
|
120
106
|
|
|
121
107
|
def __call__(self, doc):
|
|
122
|
-
|
|
108
|
+
doc = self._formatter(doc)
|
|
109
|
+
return self._name_regexp.sub(self._link_keywords, doc)
|
|
110
|
+
|
|
111
|
+
def _link_keywords(self, match):
|
|
112
|
+
name = match.group(1)
|
|
113
|
+
target = self._targets.get(name)
|
|
114
|
+
if target:
|
|
115
|
+
return f'<a href="{target}" class="name">{name}</a>'
|
|
116
|
+
return f'<span class="name">{name}</span>'
|
|
123
117
|
|
|
124
118
|
|
|
125
119
|
class HtmlToText:
|
|
@@ -46,7 +46,7 @@ class LibraryDocBuilder:
|
|
|
46
46
|
)
|
|
47
47
|
libdoc.inits = self._get_initializers(lib)
|
|
48
48
|
libdoc.keywords = KeywordDocBuilder().build_keywords(lib)
|
|
49
|
-
libdoc.type_docs =
|
|
49
|
+
libdoc.type_docs = TypeDocBuilder().build(
|
|
50
50
|
libdoc.inits + libdoc.keywords,
|
|
51
51
|
lib.converters,
|
|
52
52
|
)
|
|
@@ -71,8 +71,11 @@ class LibraryDocBuilder:
|
|
|
71
71
|
return [KeywordDocBuilder().build_keyword(lib.init)]
|
|
72
72
|
return []
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
|
|
75
|
+
class TypeDocBuilder:
|
|
76
|
+
|
|
77
|
+
def build(self, keywords, custom_converters=None):
|
|
78
|
+
all_type_docs: dict[TypeDoc, set[str]] = {}
|
|
76
79
|
for kw in keywords:
|
|
77
80
|
for name, type_info in self._yield_names_and_infos(kw.args):
|
|
78
81
|
type_docs = kw.type_docs.setdefault(name, {})
|
|
@@ -114,6 +117,7 @@ class ResourceDocBuilder:
|
|
|
114
117
|
lineno=1,
|
|
115
118
|
)
|
|
116
119
|
libdoc.keywords = KeywordDocBuilder(resource=True).build_keywords(resource)
|
|
120
|
+
libdoc.type_docs = TypeDocBuilder().build(libdoc.keywords)
|
|
117
121
|
return libdoc
|
|
118
122
|
|
|
119
123
|
def _import_resource(self, path):
|
|
@@ -298,11 +298,11 @@ class ProcessConfiguration:
|
|
|
298
298
|
}
|
|
299
299
|
|
|
300
300
|
def __str__(self):
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
301
|
+
if self.secret_env_keys:
|
|
302
|
+
secret_env = dict.fromkeys(self.secret_env_keys, str(Secret("")))
|
|
303
|
+
env = {**self.env, **secret_env}
|
|
304
|
+
else:
|
|
305
|
+
env = self.env
|
|
306
306
|
return f"""\
|
|
307
307
|
cwd: {self.cwd}
|
|
308
308
|
shell: {self.shell}
|
|
@@ -310,7 +310,7 @@ stdout: {self._stream_name(self.stdout_stream)}
|
|
|
310
310
|
stderr: {self._stream_name(self.stderr_stream)}
|
|
311
311
|
stdin: {self._stream_name(self.stdin_stream)}
|
|
312
312
|
alias: {self.alias}
|
|
313
|
-
env: {
|
|
313
|
+
env: {env}"""
|
|
314
314
|
|
|
315
315
|
def _stream_name(self, stream):
|
|
316
316
|
if hasattr(stream, "name"):
|
|
@@ -44,6 +44,17 @@ class Telnet:
|
|
|
44
44
|
|
|
45
45
|
%TOC%
|
|
46
46
|
|
|
47
|
+
= Dependencies =
|
|
48
|
+
|
|
49
|
+
``Telnet`` uses the ``telnetlib`` module internally. This module was
|
|
50
|
+
part of the Python standard library until Python 3.12, but with newer
|
|
51
|
+
versions the [https://pypi.org/project/telnetlib-313-and-up|telnetlib-313-and-up]
|
|
52
|
+
package needs to be installed separately.
|
|
53
|
+
|
|
54
|
+
If there is a need to do `terminal emulation`, the
|
|
55
|
+
[https://pypi.org/project/pyte|pyte] module needs to be installed. It is
|
|
56
|
+
an optional dependency and only needed with terminal emulation.
|
|
57
|
+
|
|
47
58
|
= Connections =
|
|
48
59
|
|
|
49
60
|
The first step of using ``Telnet`` is opening a connection with `Open
|
|
@@ -193,7 +204,7 @@ class Telnet:
|
|
|
193
204
|
= Terminal emulation =
|
|
194
205
|
|
|
195
206
|
Telnet library supports terminal
|
|
196
|
-
emulation with [http://pyte.readthedocs.io|
|
|
207
|
+
emulation with [http://pyte.readthedocs.io|pyte]. Terminal emulation
|
|
197
208
|
will process the output in a virtual screen. This means that ANSI escape
|
|
198
209
|
codes, like cursor movements, and also control characters, like
|
|
199
210
|
carriage returns and backspaces, have the same effect on the result as they
|
|
@@ -204,7 +215,7 @@ class Telnet:
|
|
|
204
215
|
argument a true value (see `Boolean arguments`) either in the library
|
|
205
216
|
initialization or with `Open Connection`.
|
|
206
217
|
|
|
207
|
-
As
|
|
218
|
+
As ``pyte`` approximates vt-style terminal, you may also want to set the
|
|
208
219
|
terminal type as ``vt100``. We also recommend that you increase the window
|
|
209
220
|
size, as the terminal emulation will break all lines that are longer than
|
|
210
221
|
the window row length.
|
|
@@ -215,15 +226,8 @@ class Telnet:
|
|
|
215
226
|
Examples:
|
|
216
227
|
| `Open Connection` | lolcathost | terminal_emulation=True | terminal_type=vt100 | window_size=400x100 |
|
|
217
228
|
|
|
218
|
-
As
|
|
219
|
-
installed
|
|
220
|
-
Robot Framework versions support different Pyte versions:
|
|
221
|
-
|
|
222
|
-
- Pyte 0.6 and newer are supported by Robot Framework 3.0.3.
|
|
223
|
-
Latest Pyte version can be installed (or upgraded) with
|
|
224
|
-
``pip install --upgrade pyte``.
|
|
225
|
-
- Pyte 0.5.2 and older are supported by Robot Framework 3.0.2 and earlier.
|
|
226
|
-
Pyte 0.5.2 can be installed with ``pip install pyte==0.5.2``.
|
|
229
|
+
As discussed in the `Dependencies` section, ``pyte`` is an optional dependency.
|
|
230
|
+
It needs to be installed separately to be able to use terminal emulation.
|
|
227
231
|
|
|
228
232
|
= Logging =
|
|
229
233
|
|
|
@@ -36,9 +36,14 @@ class Tokenizer:
|
|
|
36
36
|
current.extend(tokens)
|
|
37
37
|
yield current
|
|
38
38
|
|
|
39
|
-
def _tokenize_line(
|
|
39
|
+
def _tokenize_line(
|
|
40
|
+
self,
|
|
41
|
+
line: str,
|
|
42
|
+
lineno: int,
|
|
43
|
+
include_separators: bool,
|
|
44
|
+
) -> "list[Token]":
|
|
40
45
|
# Performance optimized code.
|
|
41
|
-
tokens
|
|
46
|
+
tokens = []
|
|
42
47
|
append = tokens.append
|
|
43
48
|
offset = 0
|
|
44
49
|
if line[:1] == "|" and line[:2].strip() == "|":
|
|
@@ -72,7 +77,11 @@ class Tokenizer:
|
|
|
72
77
|
yield separator, False
|
|
73
78
|
yield rest, True
|
|
74
79
|
|
|
75
|
-
def _cleanup_tokens(
|
|
80
|
+
def _cleanup_tokens(
|
|
81
|
+
self,
|
|
82
|
+
tokens: "list[Token]",
|
|
83
|
+
data_only: bool,
|
|
84
|
+
) -> "tuple[list[Token], bool]":
|
|
76
85
|
has_data, comments, continues = self._handle_comments_and_continuation(tokens)
|
|
77
86
|
self._remove_trailing_empty(tokens)
|
|
78
87
|
if continues:
|
|
@@ -90,27 +99,29 @@ class Tokenizer:
|
|
|
90
99
|
self,
|
|
91
100
|
tokens: "list[Token]",
|
|
92
101
|
) -> "tuple[bool, bool, bool]":
|
|
102
|
+
first = True
|
|
93
103
|
has_data = False
|
|
94
|
-
|
|
104
|
+
comments = False
|
|
95
105
|
continues = False
|
|
96
|
-
for
|
|
106
|
+
for token in tokens:
|
|
97
107
|
if token.type is None:
|
|
98
|
-
#
|
|
99
|
-
#
|
|
100
|
-
value = token.value if
|
|
101
|
-
if
|
|
108
|
+
# The first token may have a leading space. With others spaces
|
|
109
|
+
# have been consumed as separators.
|
|
110
|
+
value = token.value.lstrip() if first else token.value
|
|
111
|
+
if comments:
|
|
102
112
|
token.type = Token.COMMENT
|
|
103
113
|
elif value:
|
|
104
114
|
if value[0] == "#":
|
|
105
115
|
token.type = Token.COMMENT
|
|
106
|
-
|
|
116
|
+
comments = True
|
|
107
117
|
elif not has_data:
|
|
108
118
|
if value == "..." and not continues:
|
|
109
119
|
token.type = Token.CONTINUATION
|
|
110
120
|
continues = True
|
|
111
121
|
else:
|
|
112
122
|
has_data = True
|
|
113
|
-
|
|
123
|
+
first = False
|
|
124
|
+
return has_data, comments, continues
|
|
114
125
|
|
|
115
126
|
def _remove_trailing_empty(self, tokens: "list[Token]"):
|
|
116
127
|
for token in reversed(tokens):
|
|
@@ -57,6 +57,9 @@ test data. Generated documentation includes name, documentation and other
|
|
|
57
57
|
metadata of each test suite and test case, as well as the top-level keywords
|
|
58
58
|
and their arguments.
|
|
59
59
|
|
|
60
|
+
NOTE: Testdoc is deprecated and will be removed in Robot Framework 8.0.
|
|
61
|
+
Use https://github.com/MarvKler/robotframework-testdoc instead.
|
|
62
|
+
|
|
60
63
|
Options
|
|
61
64
|
=======
|
|
62
65
|
|
|
@@ -339,6 +339,8 @@ class ByPathImporter(_Importer):
|
|
|
339
339
|
|
|
340
340
|
def _import_by_path(self, path):
|
|
341
341
|
module_dir, module_name = self._split_path_to_module(path)
|
|
342
|
+
if "." in module_name:
|
|
343
|
+
raise DataError("Module name cannot contain dots when importing by path.")
|
|
342
344
|
sys.path.insert(0, module_dir)
|
|
343
345
|
try:
|
|
344
346
|
return self._import(module_name)
|
|
@@ -17,6 +17,8 @@ import re
|
|
|
17
17
|
from collections.abc import Iterable, Iterator, Mapping, Sequence
|
|
18
18
|
from typing import MutableMapping, TypeVar
|
|
19
19
|
|
|
20
|
+
from .robottypes import type_name
|
|
21
|
+
|
|
20
22
|
V = TypeVar("V")
|
|
21
23
|
Self = TypeVar("Self", bound="NormalizedDict")
|
|
22
24
|
|
|
@@ -103,14 +105,23 @@ class NormalizedDict(MutableMapping[str, V]):
|
|
|
103
105
|
return tuple(self._keys)
|
|
104
106
|
|
|
105
107
|
def __getitem__(self, key: str) -> V:
|
|
108
|
+
if not isinstance(key, str):
|
|
109
|
+
raise KeyError(key)
|
|
106
110
|
return self._data[self._normalize(key)]
|
|
107
111
|
|
|
108
112
|
def __setitem__(self, key: str, value: V):
|
|
113
|
+
if not isinstance(key, str):
|
|
114
|
+
raise TypeError(
|
|
115
|
+
f"{type_name(self)} only accepts strings as keys, "
|
|
116
|
+
f"got {type_name(key)}."
|
|
117
|
+
)
|
|
109
118
|
norm_key = self._normalize(key)
|
|
110
119
|
self._data[norm_key] = value
|
|
111
120
|
self._keys.setdefault(norm_key, key)
|
|
112
121
|
|
|
113
122
|
def __delitem__(self, key: str):
|
|
123
|
+
if not isinstance(key, str):
|
|
124
|
+
raise KeyError(key)
|
|
114
125
|
norm_key = self._normalize(key)
|
|
115
126
|
del self._data[norm_key]
|
|
116
127
|
del self._keys[norm_key]
|
|
@@ -147,7 +158,7 @@ class NormalizedDict(MutableMapping[str, V]):
|
|
|
147
158
|
# Speed-ups. Following methods are faster than default implementations.
|
|
148
159
|
|
|
149
160
|
def __contains__(self, key: str) -> bool:
|
|
150
|
-
return self._normalize(key) in self._data
|
|
161
|
+
return isinstance(key, str) and self._normalize(key) in self._data
|
|
151
162
|
|
|
152
163
|
def clear(self):
|
|
153
164
|
self._data.clear()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: robotframework
|
|
3
|
-
Version: 7.4.
|
|
3
|
+
Version: 7.4.2
|
|
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.4.
|
|
13
|
+
Project-URL: Release Notes, https://github.com/robotframework/robotframework/blob/master/doc/releasenotes/rf-7.4.2.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/lib/jquery.highlight.min.js
RENAMED
|
File without changes
|
|
File without changes
|
{robotframework-7.4.1 → robotframework-7.4.2}/src/robot/htmldata/lib/jquery.tablesorter.min.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|