Skip to content

Commit df35686

Browse files
committed
Manage file added again to same session, data is updated.
See #PARAF-359
1 parent 94c7b5e commit df35686

File tree

4 files changed

+47
-2
lines changed

4 files changed

+47
-2
lines changed

CHANGES.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ Changelog
2929
[chris-adam]
3030
- Added external watchers for esign sessions.
3131
[chris-adam, sgeulette]
32+
- Manage file added again to same session, data is updated.
33+
[gbastien]
3234

3335
1.0a2 (2026-02-06)
3436
------------------

src/imio/esign/tests/test_utils.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,30 @@ def test_add_files_with_duplicate_filenames(self):
450450
self.assertIn("same_filename-1.pdf", filenames)
451451
self.assertIn("same_filename-2.pdf", filenames)
452452

453+
def test_add_files_already_exist_is_updated(self):
454+
"""When adding a file to the same session, it is updated."""
455+
annot = get_session_annotation()
456+
self.assertEqual(len(annot["sessions"]), 0)
457+
458+
signers = [
459+
("user1", "user1@sign.com", "User 1", "Position 1"),
460+
]
461+
462+
annex_uid = self.uids[0]
463+
annex = api.content.get(UID=annex_uid)
464+
465+
sid, session = add_files_to_session(signers, (annex_uid,))
466+
self.assertEqual(len(session["files"]), 1)
467+
self.assertEqual(session["files"][0]["filename"], "annex0.pdf")
468+
self.assertEqual(session["files"][0]["title"], "Annex 0")
469+
# edit annex and add again, still one annex in session and data are updated
470+
annex.file.filename = u"new_filename.pdf"
471+
annex.setTitle('New title')
472+
sid, session = add_files_to_session(signers, (annex_uid,))
473+
self.assertEqual(len(session["files"]), 1)
474+
self.assertEqual(session["files"][0]["filename"], "new_filename.pdf")
475+
self.assertEqual(session["files"][0]["title"], "New title")
476+
453477
def test_remove_context_from_session(self):
454478
"""Test removing a context from a session."""
455479
annot = get_session_annotation()

src/imio/esign/utils.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,20 @@ def add_files_to_session(
8383
annex = uuidToObject(uuid=uid, unrestricted=True)
8484
context_uid_provider = getAdapter(annex, IContextUidProvider)
8585
context_uid = context_uid_provider.get_context_uid()
86+
# update data if adding same file to same session
87+
if annot['uids'].get(uid, -1) == session_id:
88+
logger.info('File with UID %s is already in session_id %s and data were updated!', uid, session_id)
89+
# remove old data from "files", existing_files and c_uids
90+
#data_index = [file_data['uid'] for file_data in session["files"]].index(uid)
91+
#old_filename = path.splitext([fn for fn in session["files"] if fn['uid'] == uid][0]['filename'])[0]
92+
#existing_files.remove(old_filename)
93+
#annot["c_uids"][context_uid].remove(uid)
94+
#del session["files"][data_index]
95+
old_filename = path.splitext([fn for fn in session["files"]
96+
if fn['uid'] == uid][0]['filename'])[0]
97+
existing_files.remove(old_filename)
98+
remove_files_from_session([uid], remove_empty_session=False)
99+
86100
filename, ext = path.splitext(annex.file.filename or "no_filename.pdf")
87101
new_filename = get_correct_id(existing_files, filename)
88102
session["files"].append(
@@ -353,7 +367,7 @@ def remove_context_from_session(context_uids):
353367
remove_files_from_session(list(c_uids[context_uid]))
354368

355369

356-
def remove_files_from_session(files_uids):
370+
def remove_files_from_session(files_uids, remove_empty_session=True):
357371
"""Remove files from their corresponding sessions.
358372
359373
:param files_uids: list of file UIDs to remove
@@ -386,7 +400,7 @@ def remove_files_from_session(files_uids):
386400
continue
387401

388402
del session["files"][i]
389-
if not session["files"]:
403+
if not session["files"] and remove_empty_session:
390404
del sessions[session_id]
391405
else:
392406
session["last_update"] = datetime.now()

test-4.3.cfg

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,8 @@ Pygments = 2.5.2
150150
# beautifulsoup
151151
soupsieve = 1.9.2
152152
backports.functools-lru-cache = 1.5
153+
154+
# Required by:
155+
# mock
156+
mock = 3.0.5
157+
funcsigs = 1.0.2

0 commit comments

Comments
 (0)