Răsfoiți Sursa

Create a specific version without Parquet datanodes

jean-robin medori 2 săptămâni în urmă
părinte
comite
78ba6fa87b

+ 0 - 1
Pipfile

@@ -21,7 +21,6 @@ marshmallow = "==3.20.1"
 networkx = "==2.6"
 openpyxl = "==3.1.2"
 pandas = "==1.3.5"
-pyarrow = "==16.0.0"
 pymongo = {extras = ["srv"], version = "==4.6.3"}
 python-dotenv = "==1.0.0"
 python-magic = {version = "==0.4.24", markers="sys_platform != 'win32'"}

+ 0 - 1
pyproject.toml

@@ -32,7 +32,6 @@ image = [
     "python-magic-bin>=0.4.14,<0.5",
 ]
 rdp = ["rdp>=0.8"]
-arrow = ["pyarrow>=16.0.0,<19.0"]
 mssql = ["pyodbc>=4"]
 test = ["pytest>=6.0"]
 

+ 0 - 1
setup.py

@@ -56,7 +56,6 @@ setup(
             "python-magic-bin>=0.4.14,<0.5;platform_system=='Windows'",
         ],
         "rdp": ["rdp>=0.8"],
-        "arrow": ["pyarrow>=16.0.0,<19.0"],
         "mssql": ["pyodbc>=4"],
     },
     cmdclass={"build_py": NPMInstall},

+ 9 - 0
taipy/core/config/data_node_config.py

@@ -12,6 +12,7 @@
 import json
 from copy import copy
 from datetime import timedelta
+from importlib import util
 from typing import Any, Callable, Dict, List, Optional, Union
 
 from taipy.common.config import Config
@@ -24,6 +25,7 @@ from taipy.common.config.section import Section
 from ..common._utils import _normalize_path
 from ..common._warnings import _warn_deprecated
 from ..common.mongo_default_document import MongoDefaultDocument
+from ..exceptions import NotAvailable
 
 
 class DataNodeConfig(Section):
@@ -270,6 +272,10 @@ class DataNodeConfig(Section):
         **properties,
     ):
         self._storage_type = storage_type
+        if storage_type == DataNodeConfig._STORAGE_TYPE_VALUE_PARQUET:
+            if not util.find_spec("pyarrow"):
+                raise NotAvailable("Parquet data node configuration is not available in this version."
+                                   "Use another storage type instead.")
         self._scope = scope
         self._validity_period = validity_period
         if "path" in properties:
@@ -642,6 +648,9 @@ class DataNodeConfig(Section):
         Returns:
             The new Parquet data node configuration.
         """  # noqa: E501
+        if not util.find_spec("pyarrow"):
+            raise NotAvailable("Parquet data node configuration is not available in this version."
+                                "Use another storage type instead.")
         if default_path is not None:
             properties[cls._OPTIONAL_DEFAULT_PATH_PARQUET_PROPERTY] = default_path
         if engine is not None:

+ 6 - 0
taipy/core/data/parquet.py

@@ -10,6 +10,7 @@
 # specific language governing permissions and limitations under the License.
 
 from datetime import datetime, timedelta
+from importlib import util
 from os.path import isdir, isfile
 from typing import Any, Dict, List, Optional, Set
 
@@ -20,6 +21,7 @@ from taipy.common.config.common.scope import Scope
 
 from .._entity._reload import _Reloader
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..exceptions import NotAvailable
 from ..exceptions.exceptions import UnknownCompressionAlgorithm, UnknownParquetEngine
 from ..job.job_id import JobId
 from ._file_datanode_mixin import _FileDataNodeMixin
@@ -80,6 +82,10 @@ class ParquetDataNode(DataNode, _FileDataNodeMixin, _TabularDataNodeMixin):
         editor_expiration_date: Optional[datetime] = None,
         properties: Optional[Dict] = None,
     ) -> None:
+        if not util.find_spec("pyarrow"):
+            raise NotAvailable("ParquetDataNode is not available in this version. Use another storage type for your "
+                               "data nodes instead.")
+
         self.id = id or self._new_id(config_id)
 
         if properties is None:

+ 7 - 0
taipy/core/exceptions/__init__.py

@@ -11,3 +11,10 @@
 
 """Exceptions raised by core package functionalities."""
 from .exceptions import *
+
+
+class NotAvailable(Exception):
+    """Exception raised when a feature is not available in the current version."""
+
+    def __init__(self, message: str):
+        super().__init__(message)

+ 3 - 1
tests/core/config/test_configure_default_config.py

@@ -12,6 +12,8 @@
 import json
 from datetime import timedelta
 
+import pytest
+
 from taipy.common.config import Config
 from taipy.common.config.common.scope import Scope
 from taipy.core.common.mongo_default_document import MongoDefaultDocument
@@ -186,7 +188,7 @@ def test_set_default_json_data_node_configuration():
     assert dn3.scope == Scope.GLOBAL
     assert dn3.validity_period == timedelta(1)
 
-
+@pytest.mark.skip(reason="Parquet not available in this version")
 def test_set_default_parquet_data_node_configuration():
     Config.set_default_data_node_configuration(
         storage_type="parquet",

+ 6 - 6
tests/core/config/test_data_node_config.py

@@ -35,12 +35,12 @@ def test_data_node_config_default_parameter():
     assert json_dn_cfg.scope == Scope.SCENARIO
     assert json_dn_cfg.validity_period is None
 
-    parquet_dn_cfg = Config.configure_data_node("data_node_3", "parquet")
-    assert parquet_dn_cfg.scope == Scope.SCENARIO
-    assert parquet_dn_cfg.engine == "pyarrow"
-    assert parquet_dn_cfg.compression == "snappy"
-    assert parquet_dn_cfg.exposed_type == "pandas"
-    assert parquet_dn_cfg.validity_period is None
+    # parquet_dn_cfg = Config.configure_data_node("data_node_3", "parquet")
+    # assert parquet_dn_cfg.scope == Scope.SCENARIO
+    # assert parquet_dn_cfg.engine == "pyarrow"
+    # assert parquet_dn_cfg.compression == "snappy"
+    # assert parquet_dn_cfg.exposed_type == "pandas"
+    # assert parquet_dn_cfg.validity_period is None
 
     excel_dn_cfg = Config.configure_data_node("data_node_4", "excel")
     assert excel_dn_cfg.scope == Scope.SCENARIO

+ 1 - 1
tests/core/data/test_filter_parquet_data_node.py

@@ -47,7 +47,7 @@ class MyOtherCustomObject:
 def create_custom_class(**kwargs):
     return MyOtherCustomObject(id=kwargs["id"], sentence=kwargs["text"])
 
-
+@pytest.mark.skip(reason="Parquet not available in this version")
 class TestFilterParquetDataNode:
     __engine = ["pyarrow"]
     if util.find_spec("fastparquet"):

+ 1 - 1
tests/core/data/test_parquet_data_node.py

@@ -63,7 +63,7 @@ class MyOtherCustomObject:
 def create_custom_class(**kwargs):
     return MyOtherCustomObject(id=kwargs["id"], sentence=kwargs["text"])
 
-
+@pytest.mark.skip(reason="Parquet not available in this version")
 class TestParquetDataNode:
     __engine = ["pyarrow"]
     if util.find_spec("fastparquet"):

+ 1 - 1
tests/core/data/test_read_parquet_data_node.py

@@ -56,7 +56,7 @@ def create_custom_class(**kwargs):
 def create_custom_xy_class(**kwargs):
     return MyCustomXYObject(x=kwargs["x"], y=kwargs["y"])
 
-
+@pytest.mark.skip(reason="Parquet not available in this version")
 class TestReadParquetDataNode:
     __engine = ["pyarrow"]
     if util.find_spec("fastparquet"):

+ 1 - 1
tests/core/data/test_write_parquet_data_node.py

@@ -49,7 +49,7 @@ class MyOtherCustomObject:
 def create_custom_class(**kwargs):
     return MyOtherCustomObject(id=kwargs["id"], sentence=kwargs["text"])
 
-
+@pytest.mark.skip(reason="Parquet not available in this version")
 class TestWriteParquetDataNode:
     __engine = ["pyarrow"]
     if util.find_spec("fastparquet"):

+ 0 - 1
tools/packages/taipy-core/setup.requirements.txt

@@ -2,7 +2,6 @@ boto3>=1.29.4,<=1.34.113
 networkx>=2.6,<=3.3
 openpyxl>=3.1.2,<=3.1.2
 pandas>=1.3.5,<=2.2.2
-pyarrow>=16.0.0,<19.0
 pymongo[srv]>=4.2.0,<=4.7.2
 sqlalchemy>=2.0.16,<=2.0.30
 taipy-common