diff --git a/package/features/viz.feature b/package/features/viz.feature index d3c01e2f7f..dfe78dd5db 100644 --- a/package/features/viz.feature +++ b/package/features/viz.feature @@ -24,6 +24,12 @@ Feature: Viz plugin in new project When I execute the kedro viz run command Then kedro-viz should start successfully + Scenario: Execute viz lite with the earliest Kedro version that it supports + Given I have installed kedro version "0.18.3" + And I have run a non-interactive kedro new with pandas-iris starter + When I execute the kedro viz run command with lite option + Then kedro-viz should start successfully + Scenario: Execute viz lite with latest Kedro Given I have installed kedro version "latest" And I have run a non-interactive kedro new with spaceflights-pandas starter diff --git a/package/kedro_viz/data_access/managers.py b/package/kedro_viz/data_access/managers.py index 40e00ebe55..2799bf5f21 100644 --- a/package/kedro_viz/data_access/managers.py +++ b/package/kedro_viz/data_access/managers.py @@ -7,7 +7,14 @@ import networkx as nx from kedro.io import DataCatalog -from kedro.io.core import DatasetError + +try: + # kedro 0.18.11 onwards + from kedro.io.core import DatasetError +except ImportError: # pragma: no cover + # older versions + from kedro.io.core import DataSetError as DatasetError # type: ignore + from kedro.pipeline import Pipeline as KedroPipeline from kedro.pipeline.node import Node as KedroNode from sqlalchemy.orm import sessionmaker diff --git a/package/kedro_viz/integrations/kedro/abstract_dataset_lite.py b/package/kedro_viz/integrations/kedro/abstract_dataset_lite.py index 582130de00..f7317f4d18 100644 --- a/package/kedro_viz/integrations/kedro/abstract_dataset_lite.py +++ b/package/kedro_viz/integrations/kedro/abstract_dataset_lite.py @@ -5,7 +5,20 @@ import logging from typing import Any, Optional -from kedro.io.core import AbstractDataset, DatasetError +try: + # kedro 0.18.11 onwards + from kedro.io.core import DatasetError +except ImportError: # pragma: no cover + # older versions + from kedro.io.core import DataSetError as DatasetError # type: ignore + +try: + # kedro 0.18.12 onwards + from kedro.io.core import AbstractDataset +except ImportError: # pragma: no cover + # older versions + from kedro.io.core import AbstractDataSet as AbstractDataset # type: ignore + from kedro_viz.integrations.utils import UnavailableDataset diff --git a/package/kedro_viz/integrations/kedro/data_loader.py b/package/kedro_viz/integrations/kedro/data_loader.py index aabc5b73a5..ed7af1abb0 100644 --- a/package/kedro_viz/integrations/kedro/data_loader.py +++ b/package/kedro_viz/integrations/kedro/data_loader.py @@ -95,7 +95,14 @@ def _load_data_helper( # patch the AbstractDataset class for a custom # implementation to handle kedro.io.core.DatasetError if is_lite: - with patch("kedro.io.data_catalog.AbstractDataset", AbstractDatasetLite): + # kedro 0.18.12 onwards + if hasattr(sys.modules["kedro.io.data_catalog"], "AbstractDataset"): + abstract_ds_patch_target = "kedro.io.data_catalog.AbstractDataset" + else: # pragma: no cover + # older versions + abstract_ds_patch_target = "kedro.io.data_catalog.AbstractDataSet" + + with patch(abstract_ds_patch_target, AbstractDatasetLite): catalog = context.catalog else: catalog = context.catalog diff --git a/package/kedro_viz/integrations/utils.py b/package/kedro_viz/integrations/utils.py index 1875cd7a85..43c4fe6e30 100644 --- a/package/kedro_viz/integrations/utils.py +++ b/package/kedro_viz/integrations/utils.py @@ -4,7 +4,12 @@ from typing import Any, Union -from kedro.io.core import AbstractDataset +try: + # kedro 0.18.12 onwards + from kedro.io.core import AbstractDataset +except ImportError: # pragma: no cover + # older versions + from kedro.io.core import AbstractDataSet as AbstractDataset # type: ignore _EMPTY = object()