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