From 0c86f79669289a1503ec88f36f82d011d742802e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Didderen?= Date: Tue, 27 Oct 2026 23:14:07 +0100 Subject: [PATCH] [FIX] account_ebics - Number duplicate upload file names before the extension A duplicate upload name got the counter appended to the previous candidate and after the extension: pay.xml_1, then pay.xml_1_2, pay.xml_1_2_3. Keep the extension and number from the original name: pay_1.xml, pay_2.xml. --- account_ebics/tests/test_ebics_xfer.py | 14 ++++++++++---- account_ebics/wizards/ebics_xfer.py | 7 +++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/account_ebics/tests/test_ebics_xfer.py b/account_ebics/tests/test_ebics_xfer.py index f27b561..2dd0e09 100644 --- a/account_ebics/tests/test_ebics_xfer.py +++ b/account_ebics/tests/test_ebics_xfer.py @@ -190,14 +190,20 @@ class TestEbicsXferUpload(EbicsTestCommon): self.assertFalse(self.ebics_config.order_number) def test_upload_same_name_twice(self): + """The counter goes before the extension and does not stack up.""" names = [] - for _i in range(3): + for _i in range(4): wizard = self._upload_wizard(self.ff_btu) with self._fake_client(FakeEbicsClient()): names.append(wizard._ebics_upload().name) - # Pinned, probably unintended: _update_ef_vals appends each counter to - # the previous candidate (pay.xml_1_2) instead of pay.xml_2. - self.assertEqual(names, ["pay.xml", "pay.xml_1", "pay.xml_1_2"]) + self.assertEqual(names, ["pay.xml", "pay_1.xml", "pay_2.xml", "pay_3.xml"]) + # without extension + wizard = self._upload_wizard(self.ff_btu, fname="pay") + with self._fake_client(FakeEbicsClient()): + self.assertEqual(wizard._ebics_upload().name, "pay") + wizard = self._upload_wizard(self.ff_btu, fname="pay") + with self._fake_client(FakeEbicsClient()): + self.assertEqual(wizard._ebics_upload().name, "pay_1") def test_upload_ful_h003_order_number(self): self.ebics_config.write({"ebics_version": "H003", "order_number": "A00Z"}) diff --git a/account_ebics/wizards/ebics_xfer.py b/account_ebics/wizards/ebics_xfer.py index 8801730..f19c9ea 100644 --- a/account_ebics/wizards/ebics_xfer.py +++ b/account_ebics/wizards/ebics_xfer.py @@ -3,6 +3,7 @@ import base64 import logging +import os from sys import exc_info from traceback import format_exception @@ -578,11 +579,13 @@ class EbicsXfer(models.TransientModel): fn = ef_vals["name"] dups = self._check_duplicate_ebics_file(fn, self.format_id) if dups: + # pay.xml -> pay_1.xml, pay_2.xml, ... + base, ext = os.path.splitext(fn) n = 1 - fn = "_".join([fn, str(n)]) + fn = f"{base}_{n}{ext}" while self._check_duplicate_ebics_file(fn, self.format_id): n += 1 - fn = "_".join([fn, str(n)]) + fn = f"{base}_{n}{ext}" ef_vals["name"] = fn def _handle_download_data(self, data, file_format):