From 47268115b93e2177ef7f2153ee77f50a49321a5d Mon Sep 17 00:00:00 2001 From: Arnau Date: Wed, 20 May 2026 09:17:42 +0200 Subject: [PATCH] [IMP] fs_storage: add _move_file method --- fs_storage/models/fs_storage.py | 10 ++++++++++ fs_storage/tests/test_fs_storage.py | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/fs_storage/models/fs_storage.py b/fs_storage/models/fs_storage.py index 0e60422123..7d5e8b5a75 100644 --- a/fs_storage/models/fs_storage.py +++ b/fs_storage/models/fs_storage.py @@ -10,6 +10,7 @@ import os.path import re import warnings +from pathlib import PurePath from typing import AnyStr import fsspec @@ -819,3 +820,12 @@ def _get_root_filesystem(self, fs=None): while hasattr(fs, "fs"): fs = fs.fs return fs + + def _move_file(self, from_dir_str, to_dir_str, filename): + self.ensure_one() + src = (PurePath(from_dir_str) / filename).as_posix() + if not self.fs.exists(src): + return False + dst = (PurePath(to_dir_str) / filename).as_posix() + self.env.cr.postcommit.add(functools.partial(self.fs.move, src, dst)) + return True diff --git a/fs_storage/tests/test_fs_storage.py b/fs_storage/tests/test_fs_storage.py index 631ce4f250..4dcd092321 100644 --- a/fs_storage/tests/test_fs_storage.py +++ b/fs_storage/tests/test_fs_storage.py @@ -304,3 +304,22 @@ def test_no_unlink_in_safe_eval(self): safe_eval.safe_eval( "env['fs.storage'].search([]).unlink()", {"env": self.env} ) + + def test_move_file(self): + src_dir = "src" + dst_dir = "dst" + self.backend.fs.makedirs(src_dir, exist_ok=True) + self.backend.fs.makedirs(dst_dir, exist_ok=True) + self._create_file(self.backend, f"{src_dir}/{self.filename}", self.filedata) + + res = self.backend._move_file(src_dir, dst_dir, self.filename) + self.assertTrue(res) + # The actual move runs on post-commit, so until then the file + # must still live in the source directory. + self.assertTrue(self.backend.fs.exists(f"{src_dir}/{self.filename}")) + self.assertFalse(self.backend.fs.exists(f"{dst_dir}/{self.filename}")) + + self.env.cr.postcommit.run() + + self.assertFalse(self.backend.fs.exists(f"{src_dir}/{self.filename}")) + self.assertTrue(self.backend.fs.exists(f"{dst_dir}/{self.filename}"))