From 0c75c61c30d96f2fa70f04188a4e19126ad77cbf Mon Sep 17 00:00:00 2001 From: Asko Soukka Date: Sun, 16 Jul 2023 00:11:49 +0300 Subject: [PATCH] Add support for robotframework 6.1 --- binder/environment.yml | 6 +++--- src/robotkernel/builders_32.py | 21 +++++++++++++++++---- src/robotkernel/constants.py | 6 ++++++ src/robotkernel/kernel.py | 2 +- src/robotkernel/monkeypatches.py | 11 +++++++++-- src/robotkernel/selectors_white.py | 1 - 6 files changed, 36 insertions(+), 11 deletions(-) diff --git a/binder/environment.yml b/binder/environment.yml index 25b6b13..56331e3 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -17,11 +17,11 @@ dependencies: - requests==2.22.0 - RESTinstance==1.0.2 - rise==5.6.1 - - robotframework==5.0 + - robotframework==6.1 - robotframework-faker==5.0.0 - - robotframework-seleniumlibrary==5.1.3 + - robotframework-seleniumlibrary==6.1.0 - robotframework-seleniumscreenshots==0.9.5 - - selenium==3.141.0 + - selenium==4.4.3 - urllib3==1.25.3 - jupyter-starters==1.1.0 - jupyterlab-widgets==1.0.2 diff --git a/src/robotkernel/builders_32.py b/src/robotkernel/builders_32.py index f3019bd..63d7ba3 100644 --- a/src/robotkernel/builders_32.py +++ b/src/robotkernel/builders_32.py @@ -2,17 +2,27 @@ from io import StringIO from robot.api import get_model from robot.errors import DataError -from robot.running.builder.parsers import ErrorReporter from robot.running.builder.transformers import SettingsBuilder from robot.running.builder.transformers import SuiteBuilder from robot.running.model import TestSuite +from robotkernel.constants import HAS_RF61_PARSER from typing import Dict import os + try: - from robot.running.builder.testsettings import TestDefaults + from robot.running.builder.transformers import ErrorReporter except ImportError: - from robot.running.builder.settings import Defaults as TestDefaults + from robot.running.builder.parsers import ErrorReporter + +if HAS_RF61_PARSER: + from robot.running.builder.settings import FileSettings + from robot.running.builder.settings import TestDefaults +else: + try: + from robot.running.builder.testsettings import TestDefaults + except ImportError: + from robot.running.builder.settings import Defaults as TestDefaults def _get_rpa_mode(data): @@ -31,7 +41,10 @@ def _get_rpa_mode(data): def build_suite(code: str, cell_history: Dict[str, str], data_only: bool = False): # Init suite = TestSuite(name="Jupyter", source=os.getcwd()) - defaults = TestDefaults(None) + if HAS_RF61_PARSER: + defaults = FileSettings(TestDefaults(None)) + else: + defaults = TestDefaults(None) # Populate history for historical in cell_history.values(): diff --git a/src/robotkernel/constants.py b/src/robotkernel/constants.py index 98e873e..89e4340 100644 --- a/src/robotkernel/constants.py +++ b/src/robotkernel/constants.py @@ -4,6 +4,12 @@ import re +try: + pkg_resources.get_distribution("robotframework>=6.1b1") + HAS_RF61_PARSER = True +except pkg_resources.VersionConflict: + HAS_RF61_PARSER = False + try: pkg_resources.get_distribution("robotframework>=3.2a1") HAS_RF32_PARSER = True diff --git a/src/robotkernel/kernel.py b/src/robotkernel/kernel.py index f8ffd71..0788643 100644 --- a/src/robotkernel/kernel.py +++ b/src/robotkernel/kernel.py @@ -171,7 +171,7 @@ def do_complete(self, code, cursor_pos): "status": "ok", } - def do_inspect(self, code, cursor_pos, detail_level=0): + def do_inspect(self, code, cursor_pos, detail_level=0, _=None): cursor_pos = cursor_pos is None and len(code) or cursor_pos line, offset = line_at_cursor(code, cursor_pos) line_cursor = cursor_pos - offset diff --git a/src/robotkernel/monkeypatches.py b/src/robotkernel/monkeypatches.py index 34c9718..01aaa3c 100644 --- a/src/robotkernel/monkeypatches.py +++ b/src/robotkernel/monkeypatches.py @@ -3,6 +3,7 @@ from io import StringIO from robot.errors import DataError from robotkernel.constants import HAS_RF32_PARSER +from robotkernel.constants import HAS_RF61_PARSER import os import re import sys @@ -80,7 +81,10 @@ def _get_file(self, source, accept_text): path = self._get_path(source, accept_text) if path and os.path.splitext(path)[1].lower() == ".ipynb": file = StringIO(NotebookReader().read(path, "")) - return file, os.path.basename(path), True + if HAS_RF61_PARSER: + return file, os.path.basename(path) + else: + return file, os.path.basename(path), True else: return old(self, source, accept_text) @@ -99,7 +103,10 @@ def inject_robot_ipynb_support(): if HAS_RF32_PARSER: # noinspection PyNoneFunctionAssignment,PyProtectedMember FileReader._get_file = _get_ipynb_file(FileReader._get_file) - importer.RESOURCE_EXTENSIONS += (".ipynb",) + if HAS_RF61_PARSER: + importer.RESOURCE_EXTENSIONS = importer.RESOURCE_EXTENSIONS | {".ipynb"} + else: + importer.RESOURCE_EXTENSIONS += (".ipynb",) elif "ipynb" not in populators.READERS: populators.READERS["ipynb"] = NotebookReader TEST_EXTENSIONS.add("ipynb") diff --git a/src/robotkernel/selectors_white.py b/src/robotkernel/selectors_white.py index fcce07b..0a587cf 100644 --- a/src/robotkernel/selectors_white.py +++ b/src/robotkernel/selectors_white.py @@ -26,7 +26,6 @@ class PickSnipTool(Form): - mouse_down = None mouse_down_button = None mouse_down_seconds = 0