Quellcode durchsuchen

attempt to clean dn inheritance

Toan Quach vor 1 Jahr
Ursprung
Commit
b4a520264b

+ 1 - 1
taipy/core/data/_abstract_file.py

@@ -13,7 +13,7 @@ import pathlib
 import shutil
 
 
-class _AbstractFileDataNode(object):
+class _AbstractFileDataNodeMixin(object):
     """Abstract base class for data node implementations (CSVDataNode, ParquetDataNode, ExcelDataNode,
     PickleDataNode and JSONDataNode) that are file based."""
 

+ 6 - 9
taipy/core/data/_abstract_sql.py

@@ -25,12 +25,12 @@ from taipy.config.common.scope import Scope
 from .._version._version_manager_factory import _VersionManagerFactory
 from ..data.operator import JoinOperator, Operator
 from ..exceptions.exceptions import MissingRequiredProperty, UnknownDatabaseEngine
-from ._abstract_tabular import _AbstractTabularDataNode
+from ._abstract_tabular import _AbstractTabularDataNodeMixin
 from .data_node import DataNode
 from .data_node_id import DataNodeId, Edit
 
 
-class _AbstractSQLDataNode(DataNode, _AbstractTabularDataNode):
+class _AbstractSQLDataNode(DataNode, _AbstractTabularDataNodeMixin):
     """Abstract base class for data node implementations (SQLDataNode and SQLTableDataNode) that use SQL."""
 
     __STORAGE_TYPE = "NOT_IMPLEMENTED"
@@ -95,14 +95,11 @@ class _AbstractSQLDataNode(DataNode, _AbstractTabularDataNode):
             properties = {}
         self._check_required_properties(properties)
 
-        if self._EXPOSED_TYPE_PROPERTY not in properties.keys():
-            properties[self._EXPOSED_TYPE_PROPERTY] = self._EXPOSED_TYPE_PANDAS
-        elif properties[self._EXPOSED_TYPE_PROPERTY] == self._EXPOSED_TYPE_MODIN:
-            # Deprecated in favor of pandas since 3.1.0
-            properties[self._EXPOSED_TYPE_PROPERTY] = self._EXPOSED_TYPE_PANDAS
+        properties[self._EXPOSED_TYPE_PROPERTY] = _AbstractTabularDataNodeMixin._get_valid_exposed_type(properties)
         self._check_exposed_type(properties[self._EXPOSED_TYPE_PROPERTY])
 
-        super().__init__(
+        DataNode.__init__(
+            self,
             config_id,
             scope,
             id,
@@ -117,7 +114,7 @@ class _AbstractSQLDataNode(DataNode, _AbstractTabularDataNode):
             editor_expiration_date,
             **properties,
         )
-        _AbstractTabularDataNode.__init__(self, **properties)
+        _AbstractTabularDataNodeMixin.__init__(self, **properties)
         self._engine = None
         if not self._last_edit_date:  # type: ignore
             self._last_edit_date = datetime.now()

+ 15 - 4
taipy/core/data/_abstract_tabular.py

@@ -17,7 +17,7 @@ import pandas as pd
 from ..exceptions.exceptions import InvalidExposedType
 
 
-class _AbstractTabularDataNode(object):
+class _AbstractTabularDataNodeMixin(object):
     """Abstract base class for tabular data node implementations (CSVDataNode, ParquetDataNode, ExcelDataNode,
     SQLTableDataNode and SQLDataNode) that are tabular representable."""
 
@@ -53,9 +53,20 @@ class _AbstractTabularDataNode(object):
             return pd.DataFrame.from_records([self._encoder(row) for row in data])
         return pd.DataFrame(data)
 
-    @staticmethod
-    def _check_exposed_type(exposed_type):
-        valid_string_exposed_types = _AbstractTabularDataNode.__VALID_STRING_EXPOSED_TYPES
+    @classmethod
+    def _get_valid_exposed_type(cls, properties: Dict):
+        if (
+            cls._EXPOSED_TYPE_PROPERTY not in properties.keys()
+            or properties[cls._EXPOSED_TYPE_PROPERTY] == cls._EXPOSED_TYPE_MODIN
+        ):
+            # Default exposed type is pandas
+            # Deprecated modin exposed type in favor of pandas since 3.1.0
+            return cls._EXPOSED_TYPE_PANDAS
+        return properties[cls._EXPOSED_TYPE_PROPERTY]
+
+    @classmethod
+    def _check_exposed_type(cls, exposed_type):
+        valid_string_exposed_types = cls.__VALID_STRING_EXPOSED_TYPES
         if isinstance(exposed_type, str) and exposed_type not in valid_string_exposed_types:
             raise InvalidExposedType(
                 f"Invalid string exposed type {exposed_type}. Supported values are "

+ 5 - 9
taipy/core/data/csv.py

@@ -23,13 +23,13 @@ from taipy.config.common.scope import Scope
 from .._entity._reload import _self_reload
 from .._version._version_manager_factory import _VersionManagerFactory
 from ..job.job_id import JobId
-from ._abstract_file import _AbstractFileDataNode
-from ._abstract_tabular import _AbstractTabularDataNode
+from ._abstract_file import _AbstractFileDataNodeMixin
+from ._abstract_tabular import _AbstractTabularDataNodeMixin
 from .data_node import DataNode
 from .data_node_id import DataNodeId, Edit
 
 
-class CSVDataNode(DataNode, _AbstractFileDataNode, _AbstractTabularDataNode):
+class CSVDataNode(DataNode, _AbstractFileDataNodeMixin, _AbstractTabularDataNodeMixin):
     """Data Node stored as a CSV file.
 
     Attributes:
@@ -97,11 +97,7 @@ class CSVDataNode(DataNode, _AbstractFileDataNode, _AbstractTabularDataNode):
         if self._HAS_HEADER_PROPERTY not in properties.keys():
             properties[self._HAS_HEADER_PROPERTY] = True
 
-        if self._EXPOSED_TYPE_PROPERTY not in properties.keys():
-            properties[self._EXPOSED_TYPE_PROPERTY] = self._EXPOSED_TYPE_PANDAS
-        elif properties[self._EXPOSED_TYPE_PROPERTY] == self._EXPOSED_TYPE_MODIN:
-            # Deprecated in favor of pandas since 3.1.0
-            properties[self._EXPOSED_TYPE_PROPERTY] = self._EXPOSED_TYPE_PANDAS
+        properties[self._EXPOSED_TYPE_PROPERTY] = _AbstractTabularDataNodeMixin._get_valid_exposed_type(properties)
         self._check_exposed_type(properties[self._EXPOSED_TYPE_PROPERTY])
 
         DataNode.__init__(
@@ -120,7 +116,7 @@ class CSVDataNode(DataNode, _AbstractFileDataNode, _AbstractTabularDataNode):
             editor_expiration_date,
             **properties,
         )
-        _AbstractTabularDataNode.__init__(self, **properties)
+        _AbstractTabularDataNodeMixin.__init__(self, **properties)
 
         self._path = properties.get(self.__PATH_KEY, properties.get(self.__DEFAULT_PATH_KEY))
         if self._path and ".data" in self._path:

+ 8 - 12
taipy/core/data/excel.py

@@ -24,13 +24,13 @@ from .._entity._reload import _self_reload
 from .._version._version_manager_factory import _VersionManagerFactory
 from ..exceptions.exceptions import ExposedTypeLengthMismatch, NonExistingExcelSheet, SheetNameLengthMismatch
 from ..job.job_id import JobId
-from ._abstract_file import _AbstractFileDataNode
-from ._abstract_tabular import _AbstractTabularDataNode
+from ._abstract_file import _AbstractFileDataNodeMixin
+from ._abstract_tabular import _AbstractTabularDataNodeMixin
 from .data_node import DataNode
 from .data_node_id import DataNodeId, Edit
 
 
-class ExcelDataNode(DataNode, _AbstractFileDataNode, _AbstractTabularDataNode):
+class ExcelDataNode(DataNode, _AbstractFileDataNodeMixin, _AbstractTabularDataNodeMixin):
     """Data Node stored as an Excel file.
 
     The Excel file format is _xlsx_.
@@ -101,11 +101,7 @@ class ExcelDataNode(DataNode, _AbstractFileDataNode, _AbstractTabularDataNode):
             properties[self.__SHEET_NAME_PROPERTY] = None
         if self._HAS_HEADER_PROPERTY not in properties.keys():
             properties[self._HAS_HEADER_PROPERTY] = True
-        if self._EXPOSED_TYPE_PROPERTY not in properties.keys():
-            properties[self._EXPOSED_TYPE_PROPERTY] = self._EXPOSED_TYPE_PANDAS
-        elif properties[self._EXPOSED_TYPE_PROPERTY] == self._EXPOSED_TYPE_MODIN:
-            # Deprecated in favor of pandas since 3.1.0
-            properties[self._EXPOSED_TYPE_PROPERTY] = self._EXPOSED_TYPE_PANDAS
+        properties[self._EXPOSED_TYPE_PROPERTY] = _AbstractTabularDataNodeMixin._get_valid_exposed_type(properties)
         self._check_exposed_type(properties[self._EXPOSED_TYPE_PROPERTY])
 
         DataNode.__init__(
@@ -124,7 +120,7 @@ class ExcelDataNode(DataNode, _AbstractFileDataNode, _AbstractTabularDataNode):
             editor_expiration_date,
             **properties,
         )
-        _AbstractTabularDataNode.__init__(self, **properties)
+        _AbstractTabularDataNodeMixin.__init__(self, **properties)
         if self._path and ".data" in self._path:
             self._path = self._migrate_path(self.storage_type(), self._path)
 
@@ -176,13 +172,13 @@ class ExcelDataNode(DataNode, _AbstractFileDataNode, _AbstractTabularDataNode):
     @staticmethod
     def _check_exposed_type(exposed_type):
         if isinstance(exposed_type, str):
-            _AbstractTabularDataNode._check_exposed_type(exposed_type)
+            _AbstractTabularDataNodeMixin._check_exposed_type(exposed_type)
         elif isinstance(exposed_type, list):
             for t in exposed_type:
-                _AbstractTabularDataNode._check_exposed_type(t)
+                _AbstractTabularDataNodeMixin._check_exposed_type(t)
         elif isinstance(exposed_type, dict):
             for t in exposed_type.values():
-                _AbstractTabularDataNode._check_exposed_type(t)
+                _AbstractTabularDataNodeMixin._check_exposed_type(t)
 
     def _read(self):
         if self.properties[self._EXPOSED_TYPE_PROPERTY] == self._EXPOSED_TYPE_PANDAS:

+ 2 - 2
taipy/core/data/json.py

@@ -22,12 +22,12 @@ from taipy.config.common.scope import Scope
 
 from .._entity._reload import _self_reload
 from .._version._version_manager_factory import _VersionManagerFactory
-from ._abstract_file import _AbstractFileDataNode
+from ._abstract_file import _AbstractFileDataNodeMixin
 from .data_node import DataNode
 from .data_node_id import DataNodeId, Edit
 
 
-class JSONDataNode(DataNode, _AbstractFileDataNode):
+class JSONDataNode(DataNode, _AbstractFileDataNodeMixin):
     """Data Node stored as a JSON file.
 
     Attributes:

+ 5 - 9
taipy/core/data/parquet.py

@@ -23,13 +23,13 @@ from .._entity._reload import _self_reload
 from .._version._version_manager_factory import _VersionManagerFactory
 from ..exceptions.exceptions import UnknownCompressionAlgorithm, UnknownParquetEngine
 from ..job.job_id import JobId
-from ._abstract_file import _AbstractFileDataNode
-from ._abstract_tabular import _AbstractTabularDataNode
+from ._abstract_file import _AbstractFileDataNodeMixin
+from ._abstract_tabular import _AbstractTabularDataNodeMixin
 from .data_node import DataNode
 from .data_node_id import DataNodeId, Edit
 
 
-class ParquetDataNode(DataNode, _AbstractFileDataNode, _AbstractTabularDataNode):
+class ParquetDataNode(DataNode, _AbstractFileDataNodeMixin, _AbstractTabularDataNodeMixin):
     """Data Node stored as a Parquet file.
 
     Attributes:
@@ -134,11 +134,7 @@ class ParquetDataNode(DataNode, _AbstractFileDataNode, _AbstractTabularDataNode)
         if self.__WRITE_KWARGS_PROPERTY not in properties.keys():
             properties[self.__WRITE_KWARGS_PROPERTY] = {}
 
-        if self._EXPOSED_TYPE_PROPERTY not in properties.keys():
-            properties[self._EXPOSED_TYPE_PROPERTY] = self._EXPOSED_TYPE_PANDAS
-        elif properties[self._EXPOSED_TYPE_PROPERTY] == self._EXPOSED_TYPE_MODIN:
-            # Deprecated in favor of pandas since 3.1.0
-            properties[self._EXPOSED_TYPE_PROPERTY] = self._EXPOSED_TYPE_PANDAS
+        properties[self._EXPOSED_TYPE_PROPERTY] = _AbstractTabularDataNodeMixin._get_valid_exposed_type(properties)
         self._check_exposed_type(properties[self._EXPOSED_TYPE_PROPERTY])
 
         DataNode.__init__(
@@ -157,7 +153,7 @@ class ParquetDataNode(DataNode, _AbstractFileDataNode, _AbstractTabularDataNode)
             editor_expiration_date,
             **properties,
         )
-        _AbstractTabularDataNode.__init__(self, **properties)
+        _AbstractTabularDataNodeMixin.__init__(self, **properties)
 
         self._path = properties.get(self.__PATH_KEY, properties.get(self.__DEFAULT_PATH_KEY))
 

+ 2 - 2
taipy/core/data/pickle.py

@@ -18,12 +18,12 @@ from taipy.config.common.scope import Scope
 
 from .._entity._reload import _self_reload
 from .._version._version_manager_factory import _VersionManagerFactory
-from ._abstract_file import _AbstractFileDataNode
+from ._abstract_file import _AbstractFileDataNodeMixin
 from .data_node import DataNode
 from .data_node_id import DataNodeId, Edit
 
 
-class PickleDataNode(DataNode, _AbstractFileDataNode):
+class PickleDataNode(DataNode, _AbstractFileDataNodeMixin):
     """Data Node stored as a pickle file.
 
     Attributes:

+ 3 - 3
taipy/gui_core/_context.py

@@ -52,7 +52,7 @@ from taipy.core import (
 from taipy.core import delete as core_delete
 from taipy.core import get as core_get
 from taipy.core import submit as core_submit
-from taipy.core.data._abstract_tabular import _AbstractTabularDataNode
+from taipy.core.data._abstract_tabular import _AbstractTabularDataNodeMixin
 from taipy.core.notification import CoreEventConsumerBase, EventEntityType
 from taipy.core.notification.event import Event, EventOperation
 from taipy.core.notification.notifier import Notifier
@@ -724,7 +724,7 @@ class _GuiCoreContext(CoreEventConsumerBase):
 
     @staticmethod
     def __is_tabular_data(datanode: DataNode, value: t.Any):
-        if isinstance(datanode, _AbstractTabularDataNode):
+        if isinstance(datanode, _AbstractTabularDataNodeMixin):
             return True
         if datanode.is_ready_for_reading:
             return isinstance(value, (pd.DataFrame, pd.Series, list, tuple, dict))
@@ -739,7 +739,7 @@ class _GuiCoreContext(CoreEventConsumerBase):
             and isinstance(dn, DataNode)
         ):
             if dn._last_edit_date:
-                if isinstance(dn, _AbstractTabularDataNode):
+                if isinstance(dn, _AbstractTabularDataNodeMixin):
                     return (None, None, True, None)
                 try:
                     value = dn.read()