Skip to content

Commit 72edf45

Browse files
committed
Take every usecases into account when updating a file already in a session:
- scan_id - file filename Added utils.get_file_info
1 parent eb62f2a commit 72edf45

File tree

3 files changed

+40
-2
lines changed

3 files changed

+40
-2
lines changed

src/imio/esign/events.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# -*- coding: utf-8 -*-
22

3+
from imio.esign.utils import get_file_info
34
from imio.esign.utils import get_sessions_for
5+
from imio.helpers.transmogrifier import get_correct_id
6+
from os import path
47

58

69
def on_categorized_annex_updated(annex, event):
@@ -14,6 +17,7 @@ def on_categorized_annex_updated(annex, event):
1417
if not sessions:
1518
return
1619

20+
annex_uid = annex.UID()
1721
new_values = event.new_values
1822
# if something usefull changed, we will update the session
1923
update = False
@@ -22,8 +26,15 @@ def on_categorized_annex_updated(annex, event):
2226
if new_values[checked_key] != old_values[checked_key]:
2327
update = True
2428
break
29+
# check scan_id and filename
30+
for session_id in sessions:
31+
file_info = get_file_info(session_id, annex_uid)
32+
if annex.scan_id != file_info['scan_id'] or \
33+
annex.file.filename != file_info['filename']:
34+
update = True
35+
break
36+
2537
if update:
26-
annex_uid = annex.UID()
2738
for session_id, session in sessions.items():
2839
# size
2940
size_diff = new_values['filesize'] - old_values['filesize']
@@ -32,4 +43,12 @@ def on_categorized_annex_updated(annex, event):
3243
for file_data in session['files']:
3344
if file_data['uid'] == annex_uid:
3445
file_data['title'] = new_values['title']
35-
file_data['filename'] = annex.file.filename
46+
file_data['scan_id'] = annex.scan_id
47+
# filename changed, need to make sure new filename is unique
48+
if annex.file.filename != file_data['filename']:
49+
existing_files = [path.splitext(f["filename"])[0]
50+
for f in session["files"]]
51+
filename, ext = path.splitext(annex.file.filename)
52+
new_filename = get_correct_id(existing_files, filename)
53+
file_data['filename'] = new_filename + ext
54+
session._p_changed = True

src/imio/esign/tests/test_utils.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,15 @@ def test_add_files_already_exist_is_updated(self):
508508
self.assertEqual(len(session["files"]), 2)
509509
self.assertEqual(session["files"][1]["filename"], "new_annex1.pdf")
510510
self.assertEqual(session["files"][1]["title"], "New Annex 1")
511+
self.assertEqual(session["files"][1]["scan_id"], "012345600000001")
511512
self.assertEqual(session["size"], 13936)
513+
# change file but add a filename already used, change scan_id as well
514+
with open(os.path.join(os.path.dirname(__file__), "annex1.pdf"), "rb") as f:
515+
annex1.file = NamedBlobFile(data=f.read(), filename=u"new_annex0.pdf", contentType="application/pdf")
516+
annex1.scan_id = str(int(annex1.scan_id) + 1)
517+
notify(ObjectModifiedEvent(annex1))
518+
self.assertEqual(session["files"][1]["filename"], "new_annex0-1.pdf")
519+
self.assertEqual(session["files"][1]["scan_id"], "012345600000002")
512520
# just to check, remove annex1
513521
remove_files_from_session((annex0_uid,))
514522
self.assertEqual(session["size"], 6968)

src/imio/esign/utils.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,17 @@ def get_session_annotation(portal=None):
340340
return annotations["imio.esign"]
341341

342342

343+
def get_file_info(session_id, file_uid, portal=None, readonly=True):
344+
""" """
345+
session = get_session_info(session_id, portal=portal)
346+
if session:
347+
for file_info in session['files']:
348+
if file_info['uid'] == file_uid:
349+
if readonly:
350+
file_info = deepcopy(file_info)
351+
return file_info
352+
353+
343354
def get_session_info(session_id, portal=None, readonly=True):
344355
"""Return a session info for a given numbering.
345356

0 commit comments

Comments
 (0)