Skip to content

Commit 9eefa2e

Browse files
committed
Added event to make sure session data (size, title, filename) is updated when annex updated
1 parent e425dcf commit 9eefa2e

File tree

4 files changed

+55
-0
lines changed

4 files changed

+55
-0
lines changed

src/imio/esign/configure.zcml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
<i18n:registerTranslations directory="locales" />
1010

11+
<include file="events.zcml" />
1112
<include file="permissions.zcml" />
1213

1314
<include package=".browser" />

src/imio/esign/events.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# -*- coding: utf-8 -*-
2+
3+
from imio.esign.utils import get_sessions_for
4+
5+
6+
def on_categorized_annex_updated(annex, event):
7+
'''When an annex is modified, update check if need to update esign session.'''
8+
old_values = event.old_values
9+
# we are creating a new annex, not in a session
10+
if not old_values:
11+
return
12+
13+
sessions = get_sessions_for(event.parent.UID())
14+
if not sessions:
15+
return
16+
17+
new_values = event.new_values
18+
# if something usefull changed, we will update the session
19+
update = False
20+
checked_keys = ['title', 'filesize', 'relative_url']
21+
for checked_key in checked_keys:
22+
if new_values[checked_key] != old_values[checked_key]:
23+
update = True
24+
break
25+
if update:
26+
annex_uid = annex.UID()
27+
for session in sessions:
28+
# size
29+
size_diff = new_values['filesize'] - old_values['filesize']
30+
session['size'] += size_diff
31+
# title and filename
32+
for file_data in session['files']:
33+
if file_data['uid'] == annex_uid:
34+
file_data['title'] = new_values['title']
35+
file_data['filename'] = annex.file.filename

src/imio/esign/events.zcml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<configure
2+
xmlns="http://namespaces.zope.org/zope">
3+
4+
<subscriber for="imio.annex.content.annex.IAnnex
5+
collective.iconifiedcategory.interfaces.ICategorizedElementUpdatedEvent"
6+
handler=".events.on_categorized_annex_updated" />
7+
8+
</configure>

src/imio/esign/utils.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,17 @@ def get_session_info(session_id, portal=None):
352352
return annot['sessions'][session_id]
353353

354354

355+
def get_sessions_for(context_uid):
356+
""" """
357+
sessions = []
358+
annot = get_session_annotation()
359+
for f_uid in annot["c_uids"].get(context_uid, []):
360+
session_id = annot["uids"].get(f_uid)
361+
if session_id is not None:
362+
sessions.append(annot["sessions"].get(session_id))
363+
return sessions
364+
365+
355366
def remove_context_from_session(context_uids):
356367
"""Remove all files from a session that are linked to the given context UIDs.
357368

0 commit comments

Comments
 (0)