Przeglądaj źródła

Merge pull request #1385 from Avaiga/fix/#1359-can-not-access-sequences-inconsistently

Fix/#1359 - Inconsistently not be able to access sequences
Đỗ Trường Giang 11 miesięcy temu
rodzic
commit
b277187cfe

+ 6 - 4
taipy/core/_repository/_filesystem_repository.py

@@ -19,7 +19,7 @@ from taipy.config.config import Config
 
 from ..common._utils import _retry_repository_operation
 from ..common.typing import Converter, Entity, Json, ModelType
-from ..exceptions import FileCannotBeRead, ModelNotFound
+from ..exceptions import FileCannotBeRead, FileEmpty, ModelNotFound
 from ._abstract_repository import _AbstractRepository
 from ._decoder import _Decoder
 from ._encoder import _Encoder
@@ -39,7 +39,7 @@ class _FileSystemRepository(_AbstractRepository[ModelType, Entity]):
         dir_name (str): Folder that will hold the files for this dataclass model.
     """
 
-    __EXCEPTIONS_TO_RETRY = (FileCannotBeRead,)
+    __EXCEPTIONS_TO_RETRY = (FileCannotBeRead, FileEmpty)
 
     def __init__(self, model_type: Type[ModelType], converter: Type[Converter], dir_name: str):
         self.model_type = model_type
@@ -74,7 +74,7 @@ class _FileSystemRepository(_AbstractRepository[ModelType, Entity]):
 
         try:
             file_content = self.__read_file(path)
-        except (FileNotFoundError, FileCannotBeRead):
+        except (FileNotFoundError, FileCannotBeRead, FileEmpty):
             raise ModelNotFound(str(self.dir_path), entity_id) from None
 
         return self.__file_content_to_entity(file_content)
@@ -224,7 +224,7 @@ class _FileSystemRepository(_AbstractRepository[ModelType, Entity]):
 
         try:
             file_content = self.__read_file(filepath)
-        except (FileNotFoundError, FileCannotBeRead):
+        except (FileNotFoundError, FileCannotBeRead, FileEmpty):
             return None
 
         for _filter in filters:
@@ -243,6 +243,8 @@ class _FileSystemRepository(_AbstractRepository[ModelType, Entity]):
         try:
             with filepath.open("r", encoding="UTF-8") as f:
                 file_content = f.read()
+            if not file_content:
+                raise FileEmpty(str(filepath))
             return file_content
         except Exception:
             raise FileCannotBeRead(str(filepath)) from None

+ 4 - 0
taipy/core/exceptions/exceptions.py

@@ -369,6 +369,10 @@ class FileCannotBeRead(Exception):
     """Raised when a file cannot be read."""
 
 
+class FileEmpty(Exception):
+    """Raised when a file is empty."""
+
+
 class ExportPathAlreadyExists(Exception):
     """Raised when the export folder already exists."""
 

+ 18 - 0
tests/core/repository/test_repositories.py

@@ -16,10 +16,28 @@ import shutil
 
 import pytest
 
+from taipy.core.exceptions.exceptions import ModelNotFound
+
 from .mocks import MockConverter, MockFSRepository, MockModel, MockObj, MockSQLRepository
 
 
 class TestRepositoriesStorage:
+    def test_load_from_non_existent_file_on_fs_repo(self):
+        r = MockFSRepository(model_type=MockModel, dir_name="mock_model", converter=MockConverter)
+
+        # The file does not exist should raise ModelNotFound exception
+        with pytest.raises(ModelNotFound):
+            r._load("non_existent_file")
+
+        # The file exists but is empty should also raise ModelNotFound exception
+        os.makedirs(r.dir_path)
+        with open(r.dir_path / "empty_file.json", "w") as f:
+            f.write("")
+
+        assert r._exists("empty_file")
+        with pytest.raises(ModelNotFound):
+            r._load("empty_file")
+
     @pytest.mark.parametrize(
         "mock_repo,params",
         [