Skip to content

Commit 6730ff2

Browse files
authored
Merge pull request #26 from IMIO/PARAF-345/2_fix_faceted_viewlet_sessions_format
Fixed faceted viewlet broken because sessions format changed from list to OrderedDict.
2 parents 63a035f + ad2a6d7 commit 6730ff2

File tree

4 files changed

+24
-14
lines changed

4 files changed

+24
-14
lines changed

CHANGES.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ Changelog
3434
- Configured the `@@remove-from-esign-session` the same way as `@@remove-item-from-esign-session`
3535
so relying on an `available` method to show it only if a context is in a session.
3636
[gbastien]
37+
- Fixed faceted viewlet broken because sessions format changed from list to OrderedDict.
38+
[gbastien]
3739

3840
1.0a2 (2026-02-06)
3941
------------------

src/imio/esign/browser/views.py

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

33
from AccessControl import Unauthorized
4-
from copy import deepcopy
54
from datetime import datetime
65
from datetime import timedelta
76
from imio.esign import _
@@ -13,6 +12,7 @@
1312
from imio.esign.config import get_registry_signing_users_email_content
1413
from imio.esign.utils import create_external_session
1514
from imio.esign.utils import get_session_annotation
15+
from imio.esign.utils import get_session_info
1616
from imio.esign.utils import get_sessions_for
1717
from imio.esign.utils import get_state_description
1818
from imio.esign.utils import remove_session
@@ -215,18 +215,21 @@ def render(self):
215215

216216
@property
217217
def sessions(self):
218+
# caching
219+
if hasattr(self, "_cached_session"):
220+
return self._cached_session
218221
session_id = self.request.form.get("esign_session_id[]", None)
219222
try:
220223
session_id = int(session_id)
221224
except (TypeError, ValueError):
222-
return []
223-
sessions = get_session_annotation()["sessions"]
224-
session = sessions.get(session_id)
225-
if not session:
226-
return []
227-
session = deepcopy(session)
228-
session["id"] = session_id
229-
return [session]
225+
return {}
226+
session = {}
227+
session_info = get_session_info(session_id)
228+
if session_info:
229+
session = {session_id: session_info}
230+
# caching
231+
self._cached_session = session
232+
return session
230233

231234
def get_table_rows(self, column):
232235
"""Get the table rows following the column"""

src/imio/esign/tests/test_utils.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -494,9 +494,9 @@ def test_get_session_info(self):
494494
"""Test getting info about a given session id."""
495495
annot = get_session_annotation()
496496
self.assertEqual(len(annot["sessions"]), 0)
497-
self.assertIsNone(get_session_info(0))
498-
self.assertIsNone(get_session_info(1))
499-
self.assertIsNone(get_session_info(2))
497+
self.assertEqual(get_session_info(0), {})
498+
self.assertEqual(get_session_info(1), {})
499+
self.assertEqual(get_session_info(2), {})
500500
signers = [
501501
("user1", "user1@sign.com", "User 1", "Position 1"),
502502
("user2", "user2@sign.com", "User 2", "Position 2"),

src/imio/esign/utils.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,15 +331,20 @@ def get_session_annotation(portal=None):
331331
return annotations["imio.esign"]
332332

333333

334-
def get_session_info(session_id, portal=None):
334+
def get_session_info(session_id, portal=None, readonly=True):
335335
"""Return a session info for a given numbering.
336336
337337
:param session_id: the session id to return
338338
:param portal: portal if necessary to get the session annotation
339+
:param readonly: return a copy of stored data to avoid modifying it
339340
"""
340341
annot = get_session_annotation(portal=portal)
342+
session = {}
341343
if session_id in annot['sessions']:
342-
return annot['sessions'][session_id]
344+
session = annot['sessions'][session_id]
345+
if readonly:
346+
session = deepcopy(session)
347+
return session
343348

344349

345350
def remove_context_from_session(context_uids):

0 commit comments

Comments
 (0)