diff --git a/src/hards/filesystem.py b/src/hards/filesystem.py index 0f32e32..a82bb0e 100644 --- a/src/hards/filesystem.py +++ b/src/hards/filesystem.py @@ -196,7 +196,7 @@ def get_file(self, name: str) -> Path: return location def add_file( - self, file: Path, *, name: str | None = None, permissions: int | None = None + self, file: Path, *, name: str | None = None, permissions: int = 0o400 ) -> None: super().add_file(file, name=name) if not file.exists() or not file.is_file: @@ -209,9 +209,11 @@ def add_file( new_name = name or file.name destination = self._files_location / new_name + if destination.exists(): + Path(destination).chmod(0o700) + shutil.copy2(file, destination, follow_symlinks=True) - if permissions is not None: - Path(destination).chmod(0o400) + Path(destination).chmod(permissions) self._files.append(new_name) diff --git a/tests/test_filesystem_dataset.py b/tests/test_filesystem_dataset.py index 84c5764..5d8a552 100644 --- a/tests/test_filesystem_dataset.py +++ b/tests/test_filesystem_dataset.py @@ -70,12 +70,15 @@ def test_dataset_files_overwrite(filesystem_dataset, data_assets): assert filesystem_dataset.has_file("example_file.dat") -def test_dataset_files_permissions(filesystem_dataset, data_assets): - filesystem_dataset.add_file(data_assets / "example_file.dat", permissions=0o400) +def test_dataset_files_read_only(filesystem_dataset, data_assets): + filesystem_dataset.add_file(data_assets / "example_file.dat") assert filesystem_dataset.has_file("example_file.dat") - with pytest.raises(PermissionError): - filesystem_dataset.add_file(data_assets / "example_file.dat") + with ( + pytest.raises(PermissionError), + filesystem_dataset.get_file("example_file.dat").open("w") as f, + ): + f.write("test") def test_dataset_files_rename(filesystem_dataset, data_assets):