Explorar o código

Refactor config so nested class to serialize are registered (scope and frequency) (#2431)

* #enterprie-624
Register nested classes to serialize in the config (scope and frequency)

* Linter: type hint

* Linter: config.pyi

* Update config.pyi

* Update taipy/common/config/__init__.py

nothing

* Linter: types

* Linter: config.pyi

* Update config.pyi

* Update taipy/common/config/__init__.py

nothing

* Linter: config.pyi

* Update config.pyi

* Update taipy/common/config/_config.py

nothing

* Apply suggestions from code review

Co-authored-by: Đỗ Trường Giang <do.giang@avaiga.com>

---------

Co-authored-by: Đỗ Trường Giang <do.giang@avaiga.com>
Jean-Robin hai 3 meses
pai
achega
c7ba50cce8
Modificáronse 100 ficheiros con 233 adicións e 243 borrados
  1. 22 0
      taipy/common/_repr_enum.py
  2. 0 2
      taipy/common/config/__init__.py
  3. 0 2
      taipy/common/config/_init.py
  4. 35 31
      taipy/common/config/_serializer/_base_serializer.py
  5. 0 1
      taipy/common/config/common/__init__.py
  6. 1 21
      taipy/common/config/common/_template_handler.py
  7. 4 2
      taipy/common/config/config.py
  8. 2 2
      taipy/common/config/config.pyi
  9. 2 0
      taipy/common/config/exceptions/exceptions.py
  10. 9 1
      taipy/common/config/section.py
  11. 2 2
      taipy/common/config/stubs/pyi_header.py
  12. 2 0
      taipy/core/_init.py
  13. 2 0
      taipy/core/common/__init__.py
  14. 24 1
      taipy/core/common/frequency.py
  15. 24 34
      taipy/core/common/scope.py
  16. 1 6
      taipy/core/config/__init__.py
  17. 1 1
      taipy/core/config/checkers/_data_node_config_checker.py
  18. 1 1
      taipy/core/config/checkers/_scenario_config_checker.py
  19. 5 1
      taipy/core/config/data_node_config.py
  20. 5 1
      taipy/core/config/scenario_config.py
  21. 1 2
      taipy/core/cycle/_cycle_manager.py
  22. 1 2
      taipy/core/cycle/_cycle_model.py
  23. 1 2
      taipy/core/cycle/cycle.py
  24. 1 2
      taipy/core/data/_abstract_sql.py
  25. 1 1
      taipy/core/data/_data_manager.py
  26. 1 2
      taipy/core/data/_data_model.py
  27. 1 2
      taipy/core/data/aws_s3.py
  28. 1 2
      taipy/core/data/csv.py
  29. 1 1
      taipy/core/data/data_node.py
  30. 1 2
      taipy/core/data/excel.py
  31. 1 2
      taipy/core/data/generic.py
  32. 1 2
      taipy/core/data/in_memory.py
  33. 1 2
      taipy/core/data/json.py
  34. 1 2
      taipy/core/data/mongo.py
  35. 1 2
      taipy/core/data/parquet.py
  36. 1 2
      taipy/core/data/pickle.py
  37. 1 2
      taipy/core/data/sql.py
  38. 1 2
      taipy/core/data/sql_table.py
  39. 1 1
      taipy/core/taipy.py
  40. 1 1
      taipy/core/task/_task_manager.py
  41. 1 1
      taipy/core/task/task.py
  42. 1 1
      taipy/gui_core/_adapters.py
  43. 1 1
      taipy/rest/api/resources/cycle.py
  44. 1 1
      taipy/templates/sdm/{{cookiecutter.__root_folder}}/config/config.py
  45. 1 1
      tests/common/config/common/test_scope.py
  46. 0 30
      tests/common/config/common/test_template_handler.py
  47. 2 2
      tests/common/config/test_section_serialization.py
  48. 1 1
      tests/core/_entity/test_dag.py
  49. 3 1
      tests/core/_entity/test_labelled.py
  50. 1 1
      tests/core/_entity/test_ready_to_run_property.py
  51. 1 1
      tests/core/_orchestrator/_dispatcher/test_task_function_wrapper.py
  52. 1 1
      tests/core/_orchestrator/test_orchestrator.py
  53. 1 3
      tests/core/_orchestrator/test_orchestrator__submit.py
  54. 2 2
      tests/core/_version/test_version_cli.py
  55. 1 1
      tests/core/config/checkers/test_data_node_config_checker.py
  56. 1 1
      tests/core/config/checkers/test_scenario_config_checker.py
  57. 1 1
      tests/core/config/test_config.py
  58. 2 2
      tests/core/config/test_config_serialization.py
  59. 1 1
      tests/core/config/test_configure_default_config.py
  60. 1 1
      tests/core/config/test_data_node_config.py
  61. 1 1
      tests/core/config/test_default_config.py
  62. 2 2
      tests/core/config/test_file_config.py
  63. 1 1
      tests/core/config/test_scenario_config.py
  64. 2 2
      tests/core/conftest.py
  65. 2 2
      tests/core/cycle/test_cycle.py
  66. 2 2
      tests/core/cycle/test_cycle_manager.py
  67. 1 1
      tests/core/data/test_aws_s3_data_node.py
  68. 1 1
      tests/core/data/test_csv_data_node.py
  69. 1 1
      tests/core/data/test_data_manager.py
  70. 1 1
      tests/core/data/test_data_node.py
  71. 1 1
      tests/core/data/test_excel_data_node.py
  72. 1 1
      tests/core/data/test_filter_csv_data_node.py
  73. 1 1
      tests/core/data/test_filter_excel_data_node.py
  74. 1 1
      tests/core/data/test_filter_parquet_data_node.py
  75. 1 1
      tests/core/data/test_filter_sql_table_data_node.py
  76. 1 1
      tests/core/data/test_generic_data_node.py
  77. 1 1
      tests/core/data/test_in_memory_data_node.py
  78. 1 1
      tests/core/data/test_json_data_node.py
  79. 1 1
      tests/core/data/test_mongo_data_node.py
  80. 1 1
      tests/core/data/test_parquet_data_node.py
  81. 1 1
      tests/core/data/test_pickle_data_node.py
  82. 1 1
      tests/core/data/test_read_csv_data_node.py
  83. 1 1
      tests/core/data/test_read_excel_data_node.py
  84. 1 1
      tests/core/data/test_read_parquet_data_node.py
  85. 1 1
      tests/core/data/test_read_sql_table_data_node.py
  86. 1 1
      tests/core/data/test_sql_data_node.py
  87. 1 1
      tests/core/data/test_sql_table_data_node.py
  88. 1 1
      tests/core/data/test_write_csv_data_node.py
  89. 1 1
      tests/core/data/test_write_multiple_sheet_excel_data_node.py
  90. 1 1
      tests/core/data/test_write_parquet_data_node.py
  91. 1 1
      tests/core/data/test_write_single_sheet_excel_data_node.py
  92. 1 1
      tests/core/data/test_write_sql_table_data_node.py
  93. 1 1
      tests/core/data/utils.py
  94. 1 1
      tests/core/job/test_job.py
  95. 1 1
      tests/core/job/test_job_manager.py
  96. 2 1
      tests/core/notification/test_core_event_consumer.py
  97. 1 1
      tests/core/notification/test_event.py
  98. 2 1
      tests/core/notification/test_events_published.py
  99. 2 1
      tests/core/notification/test_notifier.py
  100. 1 1
      tests/core/repository/test_encoding.py

+ 22 - 0
taipy/common/config/common/_repr_enum.py → taipy/common/_repr_enum.py

@@ -18,3 +18,25 @@ class _ReprEnum(Enum):
     @functools.lru_cache
     def _from_repr(cls, repr_: str):
         return next(filter(lambda e: repr(e) == repr_, cls))  # type: ignore
+
+
+class _OrderedEnum(_ReprEnum):
+    def __ge__(self, other):
+        if self.__class__ is other.__class__:
+            return self.value >= other.value
+        return NotImplemented
+
+    def __gt__(self, other):
+        if self.__class__ is other.__class__:
+            return self.value > other.value
+        return NotImplemented
+
+    def __le__(self, other):
+        if self.__class__ is other.__class__:
+            return self.value <= other.value
+        return NotImplemented
+
+    def __lt__(self, other):
+        if self.__class__ is other.__class__:
+            return self.value < other.value
+        return NotImplemented

+ 0 - 2
taipy/common/config/__init__.py

@@ -50,8 +50,6 @@ from inspect import signature
 from typing import List
 
 from ._init import Config
-from .common.frequency import Frequency
-from .common.scope import Scope
 from .global_app.global_app_config import GlobalAppConfig
 from .section import Section
 from .unique_section import UniqueSection

+ 0 - 2
taipy/common/config/_init.py

@@ -9,6 +9,4 @@
 # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 # specific language governing permissions and limitations under the License.
 
-from .common.frequency import Frequency
-from .common.scope import Scope
 from .config import Config

+ 35 - 31
taipy/common/config/_serializer/_base_serializer.py

@@ -19,9 +19,7 @@ from typing import Any, Dict, Optional
 from .._config import _Config
 from ..common._template_handler import _TemplateHandler
 from ..common._validate_id import _validate_id
-from ..common.frequency import Frequency
-from ..common.scope import Scope
-from ..exceptions.exceptions import LoadingError
+from ..exceptions.exceptions import InvalidConfigurationType, LoadingError
 from ..global_app.global_app_config import GlobalAppConfig
 from ..section import Section
 from ..unique_section import UniqueSection
@@ -32,6 +30,19 @@ class _BaseSerializer(object):
 
     _GLOBAL_NODE_NAME = "TAIPY"
     _section_class = {_GLOBAL_NODE_NAME: GlobalAppConfig}
+    _registered_types: Dict[str, type] = {}
+
+    @classmethod
+    def _register(cls, section):
+        cls._section_class[section.name] = section.__class__
+        for clazz in section._types_to_register():
+            if not hasattr(clazz, "_type_identifier"):
+                raise InvalidConfigurationType(f"Type {clazz.__name__} must have a `_type_identifier` method.")
+            if not hasattr(clazz, "_stringify"):
+                raise InvalidConfigurationType(f"Type {clazz.__name__} must have a `_stringify` method.")
+            if not hasattr(clazz, "_pythonify"):
+                raise InvalidConfigurationType(f"Type {clazz.__name__} must have a `_pythonify` method.")
+            cls._registered_types[clazz._type_identifier()] = clazz
 
     @classmethod
     @abstractmethod
@@ -44,23 +55,19 @@ class _BaseSerializer(object):
         for u_sect_name, u_sect in configuration._unique_sections.items():
             config_as_dict[u_sect_name] = u_sect._to_dict()
         for sect_name, sections in configuration._sections.items():
-            config_as_dict[sect_name] = cls._to_dict(sections)
-        return cls._stringify(config_as_dict)
+            config_as_dict[sect_name] = cls.__to_dict(sections)
+        return cls.__stringify(config_as_dict)
 
     @classmethod
-    def _to_dict(cls, sections: Dict[str, Any]):
+    def __to_dict(cls, sections: Dict[str, Any]):
         return {section_id: section._to_dict() for section_id, section in sections.items()}
 
     @classmethod
-    def _stringify(cls, as_dict):
+    def __stringify(cls, as_dict):
         if as_dict is None:
             return None
-        if isinstance(as_dict, Section):
-            return f"{as_dict.id}:SECTION"
-        if isinstance(as_dict, Scope):
-            return f"{as_dict.name}:SCOPE"
-        if isinstance(as_dict, Frequency):
-            return f"{as_dict.name}:FREQUENCY"
+        if hasattr(as_dict, '_stringify') and callable(as_dict._stringify):
+            return as_dict._stringify()
         if isinstance(as_dict, bool):
             return f"{str(as_dict)}:bool"
         if isinstance(as_dict, int):
@@ -76,24 +83,15 @@ class _BaseSerializer(object):
         if inspect.isclass(as_dict):
             return f"{as_dict.__module__}.{as_dict.__qualname__}:class"
         if isinstance(as_dict, dict):
-            return {str(key): cls._stringify(val) for key, val in as_dict.items()}
+            return {str(key): cls.__stringify(val) for key, val in as_dict.items()}
         if isinstance(as_dict, list):
-            return [cls._stringify(val) for val in as_dict]
+            return [cls.__stringify(val) for val in as_dict]
         if isinstance(as_dict, tuple):
-            return [cls._stringify(val) for val in as_dict]
+            return [cls.__stringify(val) for val in as_dict]
         if isinstance(as_dict, set):
-            return [cls._stringify(val) for val in as_dict]
+            return [cls.__stringify(val) for val in as_dict]
         return as_dict
 
-    @staticmethod
-    def _extract_node(config_as_dict, cls_config, node, config: Optional[Any]) -> Dict[str, Section]:
-        res = {}
-        for key, value in config_as_dict.get(node, {}).items():  # my_task, {input=[], output=[my_data_node], ...}
-            key = _validate_id(key)
-            res[key] = cls_config._from_dict(value, key, config)  # if config is None else cls_config._from_dict(key,
-            # value, config)
-        return res
-
     @classmethod
     def _from_dict(cls, as_dict) -> _Config:
         config = _Config()
@@ -105,9 +103,17 @@ class _BaseSerializer(object):
                         sect_as_dict, None, None
                     )
                 elif issubclass(section_class, Section):
-                    config._sections[section_name] = cls._extract_node(as_dict, section_class, section_name, config)
+                    config._sections[section_name] = cls.__extract_node(as_dict, section_class, section_name, config)
         return config
 
+    @staticmethod
+    def __extract_node(config_as_dict, cls_config, node, config: Optional[Any]) -> Dict[str, Section]:
+        res = {}
+        for key, value in config_as_dict.get(node, {}).items():  # my_task, {input=[], output=[my_data_node], ...}
+            key = _validate_id(key)
+            res[key] = cls_config._from_dict(value, key, config)
+        return res
+
     @classmethod
     def _pythonify(cls, val):
         match = re.fullmatch(_TemplateHandler._PATTERN, str(val))
@@ -122,10 +128,8 @@ class _BaseSerializer(object):
                     dynamic_type = match.group(2)
                     if dynamic_type == "SECTION":
                         return actual_val
-                    if dynamic_type == "FREQUENCY":
-                        return Frequency[actual_val]
-                    if dynamic_type == "SCOPE":
-                        return Scope[actual_val]
+                    if dynamic_type in cls._registered_types.keys():
+                        return cls._registered_types[dynamic_type]._pythonify(actual_val)
                     if dynamic_type == "bool":
                         return _TemplateHandler._to_bool(actual_val)
                     elif dynamic_type == "int":

+ 0 - 1
taipy/common/config/common/__init__.py

@@ -8,4 +8,3 @@
 # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 # specific language governing permissions and limitations under the License.
-from .scope import Scope

+ 1 - 21
taipy/common/config/common/_template_handler.py

@@ -18,8 +18,6 @@ from operator import attrgetter
 from pydoc import locate
 
 from ..exceptions.exceptions import InconsistentEnvVariableError, MissingEnvVariableError
-from .frequency import Frequency
-from .scope import Scope
 
 
 class _TemplateHandler:
@@ -57,10 +55,6 @@ class _TemplateHandler:
                 return cls._to_int(val)
             elif type is float:
                 return cls._to_float(val)
-            elif type is Scope:
-                return cls._to_scope(val)
-            elif type is Frequency:
-                return cls._to_frequency(val)
             else:
                 if dynamic_type == "bool":
                     return cls._to_bool(val)
@@ -75,7 +69,7 @@ class _TemplateHandler:
     def _to_bool(val: str) -> bool:
         possible_values = ["true", "false"]
         if str.lower(val) not in possible_values:
-            raise InconsistentEnvVariableError("{val} is not a Boolean.")
+            raise InconsistentEnvVariableError(f"{val} is not a Boolean.")
         return str.lower(val) == "true" or str.lower(val) != "false"
 
     @staticmethod
@@ -119,20 +113,6 @@ class _TemplateHandler:
         time_params = {name: float(param) for name, param in parts.groupdict().items() if param}
         return timedelta(**time_params)  # type: ignore
 
-    @staticmethod
-    def _to_scope(val: str) -> Scope:
-        try:
-            return Scope[str.upper(val)]
-        except Exception:
-            raise InconsistentEnvVariableError(f"{val} is not a valid scope.") from None
-
-    @staticmethod
-    def _to_frequency(val: str) -> Frequency:
-        try:
-            return Frequency[str.upper(val)]
-        except Exception:
-            raise InconsistentEnvVariableError(f"{val} is not a valid frequency.") from None
-
     @staticmethod
     def _to_function(val: str):
         module_name, fct_name = val.rsplit(".", 1)

+ 4 - 2
taipy/common/config/config.py

@@ -266,6 +266,8 @@ class Config:
             cls._default_config._sections[default_section.name] = {default_section.id: default_section}
         cls._serializer._section_class[default_section.name] = default_section.__class__  # type: ignore
         cls.__json_serializer._section_class[default_section.name] = default_section.__class__  # type: ignore
+        cls._serializer._register(default_section)
+        cls.__json_serializer._register(default_section)
         cls._compile_configs()
 
     @classmethod
@@ -283,8 +285,8 @@ class Config:
                 sections[section.id] = section
         else:
             cls._python_config._sections[section.name] = {section.id: section}
-        cls._serializer._section_class[section.name] = section.__class__
-        cls.__json_serializer._section_class[section.name] = section.__class__
+        cls._serializer._register(section)
+        cls.__json_serializer._register(section)
         cls._compile_configs()
 
     @classmethod

+ 2 - 2
taipy/common/config/config.pyi

@@ -13,13 +13,13 @@ from datetime import timedelta
 from typing import Any, Callable, Dict, List, Optional, Union
 
 from taipy.common.config._config import _Config
+from taipy.core.common.frequency import Frequency
+from taipy.core.common.scope import Scope
 from taipy.core.config import CoreSection, DataNodeConfig, JobConfig, ScenarioConfig, TaskConfig
 
 from .checker.issue_collector import IssueCollector
 from .common._classproperty import _Classproperty
 from .common._config_blocker import _ConfigBlocker
-from .common.frequency import Frequency
-from .common.scope import Scope
 from .global_app.global_app_config import GlobalAppConfig
 from .section import Section
 from .unique_section import UniqueSection

+ 2 - 0
taipy/common/config/exceptions/exceptions.py

@@ -25,6 +25,8 @@ class MissingEnvVariableError(Exception):
 class InvalidConfigurationId(Exception):
     """Configuration id is not valid."""
 
+class InvalidConfigurationType(Exception):
+    """Configuration attribute has an invalid type."""
 
 class ConfigurationUpdateBlocked(Exception):
     """The configuration is being blocked from update by other Taipy services."""

+ 9 - 1
taipy/common/config/section.py

@@ -10,7 +10,7 @@
 # specific language governing permissions and limitations under the License.
 
 from abc import abstractmethod
-from typing import Any, Dict, Optional
+from typing import Any, Dict, List, Optional
 
 from .common._config_blocker import _ConfigBlocker
 from .common._template_handler import _TemplateHandler as _tpl
@@ -54,6 +54,14 @@ class Section:
         self.id = _validate_id(id)
         self._properties = properties or {}
 
+    def _stringify(self):
+        return f"{self.id}:SECTION"
+
+    @staticmethod
+    def _types_to_register() -> List[type]:
+        """Return a list of types to register for serialization."""
+        return []
+
     @abstractmethod
     def __copy__(self):
         raise NotImplementedError

+ 2 - 2
taipy/common/config/stubs/pyi_header.py

@@ -13,13 +13,13 @@ from datetime import timedelta
 from typing import Any, Callable, Dict, List, Optional, Union
 
 from taipy.common.config._config import _Config
+from taipy.core.common.frequency import Frequency
+from taipy.core.common.scope import Scope
 from taipy.core.config import CoreSection, DataNodeConfig, JobConfig, ScenarioConfig, TaskConfig
 
 from .checker.issue_collector import IssueCollector
 from .common._classproperty import _Classproperty
 from .common._config_blocker import _ConfigBlocker
-from .common.frequency import Frequency
-from .common.scope import Scope
 from .global_app.global_app_config import GlobalAppConfig
 from .section import Section
 from .unique_section import UniqueSection

+ 2 - 0
taipy/core/_init.py

@@ -11,6 +11,8 @@
 
 from ._core import Core
 from ._entity.submittable import Submittable
+from .common.frequency import Frequency
+from .common.scope import Scope
 from .cycle.cycle import Cycle
 from .cycle.cycle_id import CycleId
 from .data.data_node import DataNode

+ 2 - 0
taipy/core/common/__init__.py

@@ -9,4 +9,6 @@
 # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 # specific language governing permissions and limitations under the License.
 
+from .frequency import Frequency
 from .mongo_default_document import MongoDefaultDocument
+from .scope import Scope

+ 24 - 1
taipy/common/config/common/frequency.py → taipy/core/common/frequency.py

@@ -9,7 +9,7 @@
 # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 # specific language governing permissions and limitations under the License.
 
-from ..common._repr_enum import _ReprEnum
+from taipy.common._repr_enum import _ReprEnum
 
 
 class Frequency(_ReprEnum):
@@ -39,3 +39,26 @@ class Frequency(_ReprEnum):
     MONTHLY = 3
     QUARTERLY = 4
     YEARLY = 5
+
+    @staticmethod
+    def _type_identifier():
+        """Return a string to identify the object type.
+
+        The type identifier is used to identify the type of the value when serializing
+        and deserializing the configuration. As a consequence, the identifier must be
+        a unique string and must not change over time to ensure backward compatibility.
+        """
+        return "FREQUENCY"
+
+    def _stringify(self) -> str:
+        """Return a string representation of the object.
+
+        The string representation is used to serialize the object. It must be a unique string
+        that can be used to deserialize the object. The string representation must not change
+        over time to ensure backward compatibility.
+        """
+        return f"{self.name}:{self._type_identifier()}"
+
+    @classmethod
+    def _pythonify(cls, value: str):
+        return Frequency[str.upper(value)]

+ 24 - 34
taipy/common/config/common/scope.py → taipy/core/common/scope.py

@@ -1,37 +1,4 @@
-# Copyright 2021-2025 Avaiga Private Limited
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-#        http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
-# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations under the License.
-
-from ..common._repr_enum import _ReprEnum
-
-
-class _OrderedEnum(_ReprEnum):
-    def __ge__(self, other):
-        if self.__class__ is other.__class__:
-            return self.value >= other.value
-        return NotImplemented
-
-    def __gt__(self, other):
-        if self.__class__ is other.__class__:
-            return self.value > other.value
-        return NotImplemented
-
-    def __le__(self, other):
-        if self.__class__ is other.__class__:
-            return self.value <= other.value
-        return NotImplemented
-
-    def __lt__(self, other):
-        if self.__class__ is other.__class__:
-            return self.value < other.value
-        return NotImplemented
+from taipy.common._repr_enum import _OrderedEnum
 
 
 class Scope(_OrderedEnum):
@@ -96,3 +63,26 @@ class Scope(_OrderedEnum):
     GLOBAL = 3
     CYCLE = 2
     SCENARIO = 1
+
+    @staticmethod
+    def _type_identifier() -> str:
+        """Return a string to identify the object type.
+
+        The type identifier is used to identify the type of the value when serializing
+        and deserializing the configuration. As a consequence, the identifier must be
+        a unique string and must not change over time to ensure backward compatibility.
+        """
+        return "SCOPE"
+
+    def _stringify(self) -> str:
+        """Return a string representation of the object.
+
+        The string representation is used to serialize the object. It must be a unique string
+        that can be used to deserialize the object. The string representation must not change
+        over time to ensure backward compatibility.
+        """
+        return f"{self.name}:{self._type_identifier()}"
+
+    @classmethod
+    def _pythonify(cls, value: str):
+        return Scope[str.upper(value)]

+ 1 - 6
taipy/core/config/__init__.py

@@ -10,13 +10,8 @@
 # specific language governing permissions and limitations under the License.
 """Configuration of the core package functionalities."""
 
-from taipy.common.config import (
-    Config,  # type: ignore
-    _inject_section,
-)
+from taipy.common.config import _inject_section
 from taipy.common.config.checker._checker import _Checker
-from taipy.common.config.common.frequency import Frequency  # type: ignore
-from taipy.common.config.common.scope import Scope  # type: ignore
 from taipy.common.config.global_app.global_app_config import GlobalAppConfig  # type: ignore
 
 from .checkers._config_id_checker import _ConfigIdChecker

+ 1 - 1
taipy/core/config/checkers/_data_node_config_checker.py

@@ -16,7 +16,7 @@ from typing import Callable, Dict, List, cast
 from taipy.common.config._config import _Config
 from taipy.common.config.checker._checkers._config_checker import _ConfigChecker
 from taipy.common.config.checker.issue_collector import IssueCollector
-from taipy.common.config.common.scope import Scope
+from taipy.core.common.scope import Scope
 
 from ...scenario.scenario import Scenario
 from ...task.task import Task

+ 1 - 1
taipy/core/config/checkers/_scenario_config_checker.py

@@ -15,8 +15,8 @@ from taipy.common.config import Config
 from taipy.common.config._config import _Config
 from taipy.common.config.checker._checkers._config_checker import _ConfigChecker
 from taipy.common.config.checker.issue_collector import IssueCollector
-from taipy.common.config.common.frequency import Frequency
 
+from ...common.frequency import Frequency
 from ..data_node_config import DataNodeConfig
 from ..scenario_config import ScenarioConfig
 from ..task_config import TaskConfig

+ 5 - 1
taipy/core/config/data_node_config.py

@@ -21,12 +21,12 @@ from taipy.common.config import Config
 from taipy.common.config._config import _Config
 from taipy.common.config.common._config_blocker import _ConfigBlocker
 from taipy.common.config.common._template_handler import _TemplateHandler as _tpl
-from taipy.common.config.common.scope import Scope
 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 ..common.scope import Scope
 
 
 class DataNodeConfig(Section):
@@ -505,6 +505,10 @@ class DataNodeConfig(Section):
                 if default_value is not None and self._properties.get(optional_property) is None:
                     self._properties[optional_property] = default_value
 
+    @staticmethod
+    def _types_to_register() -> List[type]:
+        return [Scope]
+
     @staticmethod
     def _set_default_configuration(
         storage_type: str, scope: Optional[Scope] = None, validity_period: Optional[timedelta] = None, **properties

+ 5 - 1
taipy/core/config/scenario_config.py

@@ -19,9 +19,9 @@ from taipy.common.config import Config
 from taipy.common.config._config import _Config
 from taipy.common.config.common._template_handler import _TemplateHandler as _tpl
 from taipy.common.config.common._validate_id import _validate_id
-from taipy.common.config.common.frequency import Frequency
 from taipy.common.config.section import Section
 
+from ..common.frequency import Frequency
 from .data_node_config import DataNodeConfig
 from .task_config import TaskConfig
 
@@ -301,6 +301,10 @@ class ScenarioConfig(Section):
         if default_section:
             self._properties = {**default_section.properties, **self._properties}
 
+    @staticmethod
+    def _types_to_register() -> List[type]:
+        return [Frequency]
+
     @staticmethod
     def _configure(
         id: str,

+ 1 - 2
taipy/core/cycle/_cycle_manager.py

@@ -13,11 +13,10 @@ import calendar
 from datetime import datetime, time, timedelta
 from typing import Callable, List, Optional
 
-from taipy.common.config.common.frequency import Frequency
-
 from .._entity._entity_ids import _EntityIds
 from .._manager._manager import _Manager
 from .._repository._abstract_repository import _AbstractRepository
+from ..common.frequency import Frequency
 from ..job._job_manager_factory import _JobManagerFactory
 from ..notification import EventEntityType, EventOperation, _publish_event
 from ..submission._submission_manager_factory import _SubmissionManagerFactory

+ 1 - 2
taipy/core/cycle/_cycle_model.py

@@ -12,9 +12,8 @@
 from dataclasses import dataclass
 from typing import Any, Dict
 
-from taipy.common.config.common.frequency import Frequency
-
 from .._repository._base_taipy_model import _BaseModel
+from ..common.frequency import Frequency
 from .cycle_id import CycleId
 
 

+ 1 - 2
taipy/core/cycle/cycle.py

@@ -14,12 +14,11 @@ import uuid
 from datetime import datetime
 from typing import Any, Dict, Optional
 
-from taipy.common.config.common.frequency import Frequency
-
 from .._entity._entity import _Entity
 from .._entity._labeled import _Labeled
 from .._entity._properties import _Properties
 from .._entity._reload import _Reloader, _self_reload, _self_setter
+from ..common.frequency import Frequency
 from ..exceptions.exceptions import _SuspiciousFileOperation
 from ..notification.event import Event, EventEntityType, EventOperation, _make_event
 from .cycle_id import CycleId

+ 1 - 2
taipy/core/data/_abstract_sql.py

@@ -20,9 +20,8 @@ import numpy as np
 import pandas as pd
 from sqlalchemy import create_engine, text
 
-from taipy.common.config.common.scope import Scope
-
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from ..data.operator import JoinOperator, Operator
 from ..exceptions.exceptions import MissingRequiredProperty, UnknownDatabaseEngine
 from ._tabular_datanode_mixin import _TabularDataNodeMixin

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

@@ -14,10 +14,10 @@ from typing import Dict, Iterable, List, Optional, Set, Union
 
 from taipy.common.config import Config
 from taipy.common.config._config import _Config
-from taipy.common.config.common.scope import Scope
 
 from .._manager._manager import _Manager
 from .._version._version_mixin import _VersionMixin
+from ..common.scope import Scope
 from ..config.data_node_config import DataNodeConfig
 from ..cycle.cycle_id import CycleId
 from ..exceptions.exceptions import InvalidDataNodeType

+ 1 - 2
taipy/core/data/_data_model.py

@@ -12,9 +12,8 @@
 from dataclasses import dataclass
 from typing import Any, Dict, List, Optional
 
-from taipy.common.config.common.scope import Scope
-
 from .._repository._base_taipy_model import _BaseModel
+from ..common.scope import Scope
 from .data_node_id import Edit
 
 

+ 1 - 2
taipy/core/data/aws_s3.py

@@ -18,9 +18,8 @@ from ..common._check_dependencies import _check_dependency_is_installed
 if util.find_spec("boto3"):
     import boto3
 
-from taipy.common.config.common.scope import Scope
-
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from ..exceptions.exceptions import MissingRequiredProperty
 from .data_node import DataNode
 from .data_node_id import DataNodeId, Edit

+ 1 - 2
taipy/core/data/csv.py

@@ -16,10 +16,9 @@ from typing import Any, Dict, List, Optional, Set
 import numpy as np
 import pandas as pd
 
-from taipy.common.config.common.scope import Scope
-
 from .._entity._reload import _Reloader
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from ._file_datanode_mixin import _FileDataNodeMixin
 from ._tabular_datanode_mixin import _TabularDataNodeMixin
 from .data_node import DataNode

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

@@ -21,7 +21,6 @@ import networkx as nx
 
 from taipy.common.config import Config
 from taipy.common.config.common._validate_id import _validate_id
-from taipy.common.config.common.scope import Scope
 from taipy.common.logger._taipy_logger import _TaipyLogger
 
 from .._entity._entity import _Entity
@@ -30,6 +29,7 @@ from .._entity._properties import _Properties
 from .._entity._ready_to_run_property import _ReadyToRunProperty
 from .._entity._reload import _Reloader, _self_reload, _self_setter
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from ..exceptions.exceptions import DataNodeIsBeingEdited, NoData
 from ..job.job_id import JobId
 from ..notification.event import Event, EventEntityType, EventOperation, _make_event

+ 1 - 2
taipy/core/data/excel.py

@@ -16,10 +16,9 @@ import numpy as np
 import pandas as pd
 from openpyxl import load_workbook
 
-from taipy.common.config.common.scope import Scope
-
 from .._entity._reload import _Reloader
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from ..exceptions.exceptions import ExposedTypeLengthMismatch, NonExistingExcelSheet, SheetNameLengthMismatch
 from ._file_datanode_mixin import _FileDataNodeMixin
 from ._tabular_datanode_mixin import _TabularDataNodeMixin

+ 1 - 2
taipy/core/data/generic.py

@@ -12,9 +12,8 @@
 from datetime import datetime, timedelta
 from typing import Any, Dict, List, Optional, Set
 
-from taipy.common.config.common.scope import Scope
-
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from ..exceptions.exceptions import MissingReadFunction, MissingRequiredProperty, MissingWriteFunction
 from .data_node import DataNode
 from .data_node_id import DataNodeId, Edit

+ 1 - 2
taipy/core/data/in_memory.py

@@ -12,9 +12,8 @@
 from datetime import datetime, timedelta
 from typing import Any, Dict, List, Optional, Set
 
-from taipy.common.config.common.scope import Scope
-
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from .data_node import DataNode
 from .data_node_id import DataNodeId, Edit
 

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

@@ -16,10 +16,9 @@ from enum import Enum
 from pydoc import locate
 from typing import Any, Dict, List, Optional, Set
 
-from taipy.common.config.common.scope import Scope
-
 from .._entity._reload import _Reloader, _self_reload
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from ._file_datanode_mixin import _FileDataNodeMixin
 from .data_node import DataNode
 from .data_node_id import DataNodeId, Edit

+ 1 - 2
taipy/core/data/mongo.py

@@ -14,10 +14,9 @@ from importlib import util
 from inspect import isclass
 from typing import Any, Dict, List, Optional, Set, Tuple, Union
 
-from taipy.common.config.common.scope import Scope
-
 from .._version._version_manager_factory import _VersionManagerFactory
 from ..common._check_dependencies import _check_dependency_is_installed
+from ..common.scope import Scope
 
 if util.find_spec("pymongo"):
     from ..common._mongo_connector import _connect_mongodb

+ 1 - 2
taipy/core/data/parquet.py

@@ -16,10 +16,9 @@ from typing import Any, Dict, List, Optional, Set
 import numpy as np
 import pandas as pd
 
-from taipy.common.config.common.scope import Scope
-
 from .._entity._reload import _Reloader
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from ..exceptions.exceptions import UnknownCompressionAlgorithm, UnknownParquetEngine
 from ._file_datanode_mixin import _FileDataNodeMixin
 from ._tabular_datanode_mixin import _TabularDataNodeMixin

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

@@ -13,10 +13,9 @@ import pickle
 from datetime import datetime, timedelta
 from typing import Any, List, Optional, Set
 
-from taipy.common.config.common.scope import Scope
-
 from .._entity._reload import _Reloader
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from ._file_datanode_mixin import _FileDataNodeMixin
 from .data_node import DataNode
 from .data_node_id import DataNodeId, Edit

+ 1 - 2
taipy/core/data/sql.py

@@ -14,9 +14,8 @@ from typing import Dict, List, Optional, Set
 
 from sqlalchemy import text
 
-from taipy.common.config.common.scope import Scope
-
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from ..exceptions.exceptions import MissingAppendQueryBuilder, MissingRequiredProperty
 from ._abstract_sql import _AbstractSQLDataNode
 from .data_node_id import DataNodeId, Edit

+ 1 - 2
taipy/core/data/sql_table.py

@@ -15,9 +15,8 @@ from typing import Any, Dict, List, Optional, Set, Union
 import pandas as pd
 from sqlalchemy import MetaData, Table
 
-from taipy.common.config.common.scope import Scope
-
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from ..exceptions.exceptions import MissingRequiredProperty
 from ._abstract_sql import _AbstractSQLDataNode
 from .data_node_id import DataNodeId, Edit

+ 1 - 1
taipy/core/taipy.py

@@ -12,7 +12,6 @@
 from datetime import datetime
 from typing import Any, Callable, Dict, List, Literal, Optional, Set, Union, overload
 
-from taipy.common.config import Scope
 from taipy.common.logger._taipy_logger import _TaipyLogger
 
 from ._entity._entity import _Entity
@@ -27,6 +26,7 @@ from .common._check_instance import (
     _is_task,
 )
 from .common._warnings import _warn_no_orchestrator_service
+from .common.scope import Scope
 from .config.data_node_config import DataNodeConfig
 from .config.scenario_config import ScenarioConfig
 from .cycle._cycle_manager_factory import _CycleManagerFactory

+ 1 - 1
taipy/core/task/_task_manager.py

@@ -12,7 +12,6 @@
 from typing import Callable, List, Optional, Type, Union, cast
 
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 
 from .._entity._entity_ids import _EntityIds
 from .._manager._manager import _Manager
@@ -20,6 +19,7 @@ from .._orchestrator._abstract_orchestrator import _AbstractOrchestrator
 from .._repository._abstract_repository import _AbstractRepository
 from .._version._version_manager_factory import _VersionManagerFactory
 from .._version._version_mixin import _VersionMixin
+from ..common.scope import Scope
 from ..common.warn_if_inputs_not_ready import _warn_if_inputs_not_ready
 from ..config.task_config import TaskConfig
 from ..cycle.cycle_id import CycleId

+ 1 - 1
taipy/core/task/task.py

@@ -13,13 +13,13 @@ import uuid
 from typing import Any, Callable, Dict, Iterable, List, Optional, Set, Union
 
 from taipy.common.config.common._validate_id import _validate_id
-from taipy.common.config.common.scope import Scope
 
 from .._entity._entity import _Entity
 from .._entity._labeled import _Labeled
 from .._entity._properties import _Properties
 from .._entity._reload import _Reloader, _self_reload, _self_setter
 from .._version._version_manager_factory import _VersionManagerFactory
+from ..common.scope import Scope
 from ..data.data_node import DataNode
 from ..exceptions import AttributeKeyAlreadyExisted
 from ..notification.event import Event, EventEntityType, EventOperation, _make_event

+ 1 - 1
taipy/gui_core/_adapters.py

@@ -23,6 +23,7 @@ from operator import attrgetter, contains, eq, ge, gt, le, lt, ne
 
 import pandas as pd
 
+from taipy.common.config import Config
 from taipy.core import (
     Cycle,
     DataNode,
@@ -35,7 +36,6 @@ from taipy.core import (
     is_submittable,
 )
 from taipy.core import get as core_get
-from taipy.core.config import Config
 from taipy.core.data import JSONDataNode
 from taipy.core.data._file_datanode_mixin import _FileDataNodeMixin
 from taipy.core.data._tabular_datanode_mixin import _TabularDataNodeMixin

+ 1 - 1
taipy/rest/api/resources/cycle.py

@@ -14,8 +14,8 @@ from datetime import datetime
 from flask import request
 from flask_restful import Resource
 
-from taipy.common.config.common.frequency import Frequency
 from taipy.core import Cycle
+from taipy.core.common.frequency import Frequency
 from taipy.core.cycle._cycle_manager_factory import _CycleManagerFactory
 from taipy.core.exceptions.exceptions import NonExistingCycle
 

+ 1 - 1
taipy/templates/sdm/{{cookiecutter.__root_folder}}/config/config.py

@@ -11,7 +11,7 @@
 
 from algos import clean_data
 
-from taipy.common.config import Config, Frequency, Scope
+from taipy import Config, Frequency, Scope
 
 
 def configure():

+ 1 - 1
tests/common/config/common/test_scope.py

@@ -11,7 +11,7 @@
 
 import pytest
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 
 
 def test_scope():

+ 0 - 30
tests/common/config/common/test_template_handler.py

@@ -16,8 +16,6 @@ from unittest import mock
 import pytest
 
 from taipy.common.config.common._template_handler import _TemplateHandler
-from taipy.common.config.common.frequency import Frequency
-from taipy.common.config.common.scope import Scope
 from taipy.common.config.exceptions.exceptions import InconsistentEnvVariableError
 
 
@@ -169,31 +167,3 @@ def test_to_float():
     assert 0.0 == _TemplateHandler._to_float("0")
     assert -2.1 == _TemplateHandler._to_float("-2.1")
     assert 156165.3 == _TemplateHandler._to_float("156165.3")
-
-
-def test_to_scope():
-    with pytest.raises(InconsistentEnvVariableError):
-        _TemplateHandler._to_scope("okhds")
-    with pytest.raises(InconsistentEnvVariableError):
-        _TemplateHandler._to_scope("plop")
-
-    assert Scope.GLOBAL == _TemplateHandler._to_scope("global")
-    assert Scope.GLOBAL == _TemplateHandler._to_scope("GLOBAL")
-    assert Scope.SCENARIO == _TemplateHandler._to_scope("SCENARIO")
-    assert Scope.CYCLE == _TemplateHandler._to_scope("cycle")
-
-
-def test_to_frequency():
-    with pytest.raises(InconsistentEnvVariableError):
-        _TemplateHandler._to_frequency("okhds")
-    with pytest.raises(InconsistentEnvVariableError):
-        _TemplateHandler._to_frequency("plop")
-
-    assert Frequency.DAILY == _TemplateHandler._to_frequency("DAILY")
-    assert Frequency.DAILY == _TemplateHandler._to_frequency("Daily")
-    assert Frequency.WEEKLY == _TemplateHandler._to_frequency("weekly")
-    assert Frequency.WEEKLY == _TemplateHandler._to_frequency("WEEKLY")
-    assert Frequency.MONTHLY == _TemplateHandler._to_frequency("Monthly")
-    assert Frequency.MONTHLY == _TemplateHandler._to_frequency("MONThLY")
-    assert Frequency.QUARTERLY == _TemplateHandler._to_frequency("QuaRtERlY")
-    assert Frequency.YEARLY == _TemplateHandler._to_frequency("Yearly")

+ 2 - 2
tests/common/config/test_section_serialization.py

@@ -16,8 +16,8 @@ from unittest import mock
 
 from taipy.common.config import Config
 from taipy.common.config._serializer._json_serializer import _JsonSerializer
-from taipy.common.config.common.frequency import Frequency
-from taipy.common.config.common.scope import Scope
+from taipy.core.common.frequency import Frequency
+from taipy.core.common.scope import Scope
 from tests.common.config.utils.named_temporary_file import NamedTemporaryFile
 from tests.common.config.utils.section_for_tests import SectionForTest
 from tests.common.config.utils.unique_section_for_tests import UniqueSectionForTest

+ 1 - 1
tests/core/_entity/test_dag.py

@@ -10,9 +10,9 @@
 # specific language governing permissions and limitations under the License.
 from typing import List
 
-from taipy.common.config.common.scope import Scope
 from taipy.core import DataNode, Sequence, SequenceId, Task, TaskId
 from taipy.core._entity._dag import _DAG
+from taipy.core.common.scope import Scope
 
 
 def assert_x(x: int, *nodes):

+ 3 - 1
tests/core/_entity/test_labelled.py

@@ -13,9 +13,11 @@ from unittest import mock
 
 import pytest
 
-from taipy.common.config import Config, Frequency, Scope
+from taipy.common.config import Config
 from taipy.core import taipy
 from taipy.core._entity._labeled import _Labeled
+from taipy.core.common.frequency import Frequency
+from taipy.core.common.scope import Scope
 
 
 class MockOwner:

+ 1 - 1
tests/core/_entity/test_ready_to_run_property.py

@@ -12,8 +12,8 @@
 
 from taipy import ScenarioId, SequenceId, TaskId
 from taipy.common.config import Config
-from taipy.common.config.common.frequency import Frequency
 from taipy.core._entity._ready_to_run_property import _ReadyToRunProperty
+from taipy.core.common.frequency import Frequency
 from taipy.core.reason import DataNodeEditInProgress, DataNodeIsNotWritten, ReasonCollection
 from taipy.core.scenario._scenario_manager_factory import _ScenarioManagerFactory
 from taipy.core.sequence._sequence_manager_factory import _SequenceManagerFactory

+ 1 - 1
tests/core/_orchestrator/_dispatcher/test_task_function_wrapper.py

@@ -12,9 +12,9 @@
 import random
 import string
 
+from taipy import Scope
 from taipy.common.config import Config
 from taipy.common.config._serializer._toml_serializer import _TomlSerializer
-from taipy.common.config.common.scope import Scope
 from taipy.common.config.exceptions import ConfigurationUpdateBlocked
 from taipy.core._orchestrator._dispatcher._task_function_wrapper import _TaskFunctionWrapper
 from taipy.core.data._data_manager import _DataManager

+ 1 - 1
tests/core/_orchestrator/test_orchestrator.py

@@ -19,10 +19,10 @@ from typing import cast
 import pytest
 
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.core._orchestrator._dispatcher import _StandaloneJobDispatcher
 from taipy.core._orchestrator._orchestrator import _Orchestrator
 from taipy.core._orchestrator._orchestrator_factory import _OrchestratorFactory
+from taipy.core.common.scope import Scope
 from taipy.core.config.job_config import JobConfig
 from taipy.core.data._data_manager import _DataManager
 from taipy.core.scenario.scenario import Scenario

+ 1 - 3
tests/core/_orchestrator/test_orchestrator__submit.py

@@ -16,10 +16,8 @@ from unittest import mock
 import freezegun
 import pytest
 
-from taipy import Scenario, Task
 from taipy.common.config import Config
-from taipy.common.config.common import Scope
-from taipy.core import Orchestrator, taipy
+from taipy.core import Orchestrator, Scenario, Scope, Task, taipy
 from taipy.core._orchestrator._orchestrator import _Orchestrator
 from taipy.core._orchestrator._orchestrator_factory import _OrchestratorFactory
 from taipy.core.config import JobConfig

+ 2 - 2
tests/core/_version/test_version_cli.py

@@ -16,11 +16,11 @@ import pytest
 
 from taipy._entrypoint import _entrypoint
 from taipy.common.config import Config
-from taipy.common.config.common.frequency import Frequency
-from taipy.common.config.common.scope import Scope
 from taipy.core import Orchestrator
 from taipy.core._version._cli._version_cli_factory import _VersionCLIFactory
 from taipy.core._version._version_manager import _VersionManager
+from taipy.core.common.frequency import Frequency
+from taipy.core.common.scope import Scope
 from taipy.core.data._data_manager import _DataManager
 from taipy.core.job._job_manager import _JobManager
 from taipy.core.scenario._scenario_manager import _ScenarioManager

+ 1 - 1
tests/core/config/checkers/test_data_node_config_checker.py

@@ -14,9 +14,9 @@ from datetime import datetime, timedelta
 
 import pytest
 
+from taipy import Scope
 from taipy.common.config import Config
 from taipy.common.config.checker.issue_collector import IssueCollector
-from taipy.common.config.common.scope import Scope
 from taipy.core.config.data_node_config import DataNodeConfig
 
 

+ 1 - 1
tests/core/config/checkers/test_scenario_config_checker.py

@@ -15,7 +15,7 @@ import pytest
 
 from taipy.common.config import Config
 from taipy.common.config.checker.issue_collector import IssueCollector
-from taipy.common.config.common.frequency import Frequency
+from taipy.core.common.frequency import Frequency
 from taipy.core.config import ScenarioConfig
 from taipy.core.config.data_node_config import DataNodeConfig
 from taipy.core.config.task_config import TaskConfig

+ 1 - 1
tests/core/config/test_config.py

@@ -11,8 +11,8 @@
 
 from datetime import timedelta
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 
 
 class TestConfig:

+ 2 - 2
tests/core/config/test_config_serialization.py

@@ -14,8 +14,8 @@ import json
 
 from taipy.common.config import Config
 from taipy.common.config._serializer._json_serializer import _JsonSerializer
-from taipy.common.config.common.frequency import Frequency
-from taipy.common.config.common.scope import Scope
+from taipy.core.common.frequency import Frequency
+from taipy.core.common.scope import Scope
 from taipy.core.config import CoreSection, DataNodeConfig, JobConfig, ScenarioConfig, TaskConfig
 from tests.core.utils.named_temporary_file import NamedTemporaryFile
 

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

@@ -12,8 +12,8 @@
 import json
 from datetime import timedelta
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.core.common.mongo_default_document import MongoDefaultDocument
 
 

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

@@ -15,8 +15,8 @@ from unittest import mock
 
 import pytest
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.common.config.exceptions.exceptions import ConfigurationUpdateBlocked
 from taipy.core import MongoDefaultDocument
 from taipy.core._orchestrator._orchestrator_factory import _OrchestratorFactory

+ 1 - 1
tests/core/config/test_default_config.py

@@ -8,9 +8,9 @@
 # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 # specific language governing permissions and limitations under the License.
+from taipy import Scope
 from taipy.common.config import Config
 from taipy.common.config._config import _Config
-from taipy.common.config.common.scope import Scope
 from taipy.common.config.global_app.global_app_config import GlobalAppConfig
 from taipy.core.config import CoreSection
 from taipy.core.config.data_node_config import DataNodeConfig

+ 2 - 2
tests/core/config/test_file_config.py

@@ -14,8 +14,8 @@ from datetime import timedelta
 from unittest import mock
 
 from taipy.common.config import Config
-from taipy.common.config.common.frequency import Frequency
-from taipy.common.config.common.scope import Scope
+from taipy.core.common.frequency import Frequency
+from taipy.core.common.scope import Scope
 from taipy.core.config import DataNodeConfig, ScenarioConfig, TaskConfig
 from taipy.core.config.core_section import CoreSection
 from tests.core.utils.named_temporary_file import NamedTemporaryFile

+ 1 - 1
tests/core/config/test_scenario_config.py

@@ -15,7 +15,7 @@ from unittest import mock
 import pytest
 
 from taipy.common.config import Config
-from taipy.common.config.common.frequency import Frequency
+from taipy.core.common.frequency import Frequency
 from tests.core.utils.named_temporary_file import NamedTemporaryFile
 
 

+ 2 - 2
tests/core/conftest.py

@@ -23,11 +23,11 @@ from sqlalchemy.orm import close_all_sessions
 
 from taipy.common.config import Config
 from taipy.common.config.checker._checker import _Checker
-from taipy.common.config.common.frequency import Frequency
-from taipy.common.config.common.scope import Scope
 from taipy.core._orchestrator._orchestrator_factory import _OrchestratorFactory
 from taipy.core._version._version import _Version
 from taipy.core._version._version_manager_factory import _VersionManagerFactory
+from taipy.core.common.frequency import Frequency
+from taipy.core.common.scope import Scope
 from taipy.core.config import (
     _ConfigIdChecker,
     _CoreSectionChecker,

+ 2 - 2
tests/core/cycle/test_cycle.py

@@ -12,11 +12,11 @@
 import datetime
 from datetime import timedelta
 
-from taipy.common.config.common.frequency import Frequency
-from taipy.core import CycleId
+from taipy.core.common.frequency import Frequency
 from taipy.core.cycle._cycle_manager import _CycleManager
 from taipy.core.cycle._cycle_manager_factory import _CycleManagerFactory
 from taipy.core.cycle.cycle import Cycle
+from taipy.core.cycle.cycle_id import CycleId
 from taipy.core.task.task import Task
 
 

+ 2 - 2
tests/core/cycle/test_cycle_manager.py

@@ -12,8 +12,8 @@
 from datetime import datetime
 
 from taipy.common.config import Config
-from taipy.common.config.common.frequency import Frequency
-from taipy.common.config.common.scope import Scope
+from taipy.core.common.frequency import Frequency
+from taipy.core.common.scope import Scope
 from taipy.core.cycle._cycle_manager import _CycleManager
 from taipy.core.cycle.cycle import Cycle
 from taipy.core.cycle.cycle_id import CycleId

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

@@ -20,8 +20,8 @@ import pytest
 from moto import mock_s3
 from pandas.testing import assert_frame_equal
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.core.data._data_manager_factory import _DataManagerFactory
 from taipy.core.data.aws_s3 import S3ObjectDataNode
 

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

@@ -23,8 +23,8 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.common.config.exceptions.exceptions import InvalidConfigurationId
 from taipy.core.common._utils import _normalize_path
 from taipy.core.data._data_manager import _DataManager

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

@@ -14,8 +14,8 @@ import pathlib
 
 import pytest
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.core._version._version_manager import _VersionManager
 from taipy.core.config.data_node_config import DataNodeConfig
 from taipy.core.data._data_manager import _DataManager

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

@@ -19,8 +19,8 @@ import pandas as pd
 import pytest
 
 import taipy.core as tp
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.common.config.exceptions.exceptions import InvalidConfigurationId
 from taipy.core.data._data_manager import _DataManager
 from taipy.core.data._data_manager_factory import _DataManagerFactory

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

@@ -23,8 +23,8 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.core.common._utils import _normalize_path
 from taipy.core.data._data_manager import _DataManager
 from taipy.core.data._data_manager_factory import _DataManagerFactory

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

@@ -17,7 +17,7 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.csv import CSVDataNode
 from taipy.core.data.operator import JoinOperator, Operator
 

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

@@ -17,7 +17,7 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.excel import ExcelDataNode
 from taipy.core.data.operator import JoinOperator, Operator
 

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

@@ -18,7 +18,7 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.operator import JoinOperator, Operator
 from taipy.core.data.parquet import ParquetDataNode
 

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

@@ -15,7 +15,7 @@ import numpy as np
 import pandas as pd
 from pandas.testing import assert_frame_equal
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.operator import JoinOperator, Operator
 from taipy.core.data.sql_table import SQLTableDataNode
 

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

@@ -11,8 +11,8 @@
 
 import pytest
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.common.config.exceptions.exceptions import InvalidConfigurationId
 from taipy.core.data._data_manager_factory import _DataManagerFactory
 from taipy.core.data.data_node import DataNode

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

@@ -11,8 +11,8 @@
 
 import pytest
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.common.config.exceptions.exceptions import InvalidConfigurationId
 from taipy.core.data._data_manager_factory import _DataManagerFactory
 from taipy.core.data.data_node_id import DataNodeId

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

@@ -24,8 +24,8 @@ import numpy as np
 import pandas as pd
 import pytest
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.common.config.exceptions.exceptions import InvalidConfigurationId
 from taipy.core.common._utils import _normalize_path
 from taipy.core.data._data_manager import _DataManager

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

@@ -20,8 +20,8 @@ import pytest
 from bson import ObjectId
 from bson.errors import InvalidDocument
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.core import MongoDefaultDocument
 from taipy.core.common._mongo_connector import _connect_mongodb
 from taipy.core.data._data_manager_factory import _DataManagerFactory

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

@@ -23,8 +23,8 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.common.config.exceptions.exceptions import InvalidConfigurationId
 from taipy.core.common._utils import _normalize_path
 from taipy.core.data._data_manager import _DataManager

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

@@ -21,8 +21,8 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.common.config.exceptions.exceptions import InvalidConfigurationId
 from taipy.core.common._utils import _normalize_path
 from taipy.core.data._data_manager import _DataManager

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

@@ -17,7 +17,7 @@ import numpy as np
 import pandas as pd
 import pytest
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.csv import CSVDataNode
 from taipy.core.exceptions.exceptions import NoData
 

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

@@ -17,7 +17,7 @@ import numpy as np
 import pandas as pd
 import pytest
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.excel import ExcelDataNode
 from taipy.core.exceptions.exceptions import (
     ExposedTypeLengthMismatch,

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

@@ -17,7 +17,7 @@ import numpy as np
 import pandas as pd
 import pytest
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.parquet import ParquetDataNode
 from taipy.core.exceptions.exceptions import NoData
 

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

@@ -16,7 +16,7 @@ import numpy as np
 import pandas as pd
 import pytest
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.operator import JoinOperator, Operator
 from taipy.core.data.sql_table import SQLTableDataNode
 

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

@@ -17,8 +17,8 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.core.data._data_manager_factory import _DataManagerFactory
 from taipy.core.data.data_node_id import DataNodeId
 from taipy.core.data.operator import JoinOperator, Operator

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

@@ -14,8 +14,8 @@ from unittest.mock import patch
 
 import pytest
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.core.data._data_manager_factory import _DataManagerFactory
 from taipy.core.data.data_node_id import DataNodeId
 from taipy.core.data.sql_table import SQLTableDataNode

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

@@ -18,7 +18,7 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.csv import CSVDataNode
 
 

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

@@ -18,7 +18,7 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.excel import ExcelDataNode
 from taipy.core.exceptions.exceptions import SheetNameLengthMismatch
 

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

@@ -18,7 +18,7 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.parquet import ParquetDataNode
 
 

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

@@ -17,7 +17,7 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.excel import ExcelDataNode
 from taipy.core.exceptions.exceptions import SheetNameLengthMismatch
 

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

@@ -17,7 +17,7 @@ import pandas as pd
 import pytest
 from pandas.testing import assert_frame_equal
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.sql_table import SQLTableDataNode
 
 

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

@@ -9,7 +9,7 @@
 # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 # specific language governing permissions and limitations under the License.
 
-from taipy.common.config.common.scope import Scope
+from taipy import Scope
 from taipy.core.data.data_node import DataNode
 from taipy.core.data.in_memory import InMemoryDataNode
 

+ 1 - 1
tests/core/job/test_job.py

@@ -18,8 +18,8 @@ from unittest.mock import MagicMock
 import freezegun
 import pytest
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.core import JobId, TaskId
 from taipy.core._orchestrator._abstract_orchestrator import _AbstractOrchestrator
 from taipy.core._orchestrator._dispatcher._development_job_dispatcher import _DevelopmentJobDispatcher

+ 1 - 1
tests/core/job/test_job_manager.py

@@ -19,8 +19,8 @@ from unittest import mock
 
 import pytest
 
+from taipy import Scope
 from taipy.common.config import Config
-from taipy.common.config.common.scope import Scope
 from taipy.core._orchestrator._dispatcher import _StandaloneJobDispatcher
 from taipy.core._orchestrator._orchestrator_factory import _OrchestratorFactory
 from taipy.core.config.job_config import JobConfig

+ 2 - 1
tests/core/notification/test_core_event_consumer.py

@@ -11,8 +11,9 @@
 
 from queue import SimpleQueue
 
-from taipy.common.config import Config, Frequency
+from taipy.common.config import Config
 from taipy.core import taipy as tp
+from taipy.core.common.frequency import Frequency
 from taipy.core.notification.core_event_consumer import CoreEventConsumerBase
 from taipy.core.notification.event import Event, EventEntityType, EventOperation
 from taipy.core.notification.notifier import Notifier

+ 1 - 1
tests/core/notification/test_event.py

@@ -11,7 +11,7 @@
 
 import pytest
 
-from taipy.common.config.common.frequency import Frequency
+from taipy.core.common.frequency import Frequency
 from taipy.core.exceptions.exceptions import InvalidEventAttributeName, InvalidEventOperation
 from taipy.core.notification.event import Event, EventEntityType, EventOperation, _make_event
 from taipy.core.submission.submission import Submission

+ 2 - 1
tests/core/notification/test_events_published.py

@@ -15,8 +15,9 @@ from typing import Any, Dict, List
 import pytest
 
 from taipy import Orchestrator
-from taipy.common.config import Config, Frequency
+from taipy.common.config import Config
 from taipy.core import taipy as tp
+from taipy.core.common.frequency import Frequency
 from taipy.core.job.status import Status
 from taipy.core.notification.core_event_consumer import CoreEventConsumerBase
 from taipy.core.notification.event import Event, EventEntityType, EventOperation

+ 2 - 1
tests/core/notification/test_notifier.py

@@ -11,9 +11,10 @@
 
 from queue import SimpleQueue
 
-from taipy.common.config import Config, Frequency
+from taipy.common.config import Config
 from taipy.core import taipy as tp
 from taipy.core._version._version_manager_factory import _VersionManagerFactory
+from taipy.core.common.frequency import Frequency
 from taipy.core.notification import EventEntityType, EventOperation
 from taipy.core.notification._topic import _Topic
 from taipy.core.notification.event import Event

+ 1 - 1
tests/core/repository/test_encoding.py

@@ -10,7 +10,7 @@
 # specific language governing permissions and limitations under the License.
 
 import taipy.core.taipy as tp
-from taipy.core.config import Config
+from taipy.common.config import Config
 
 
 def test_no_special_characters():

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio