Projet

Général

Profil

Development #24778

exposer l'id de session dans les variables de substitution

Ajouté par Frédéric Péters il y a presque 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
26 juin 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Pour être utilisé dans des appels genre préréservation (iws, chrono).


Fichiers


Demandes liées

Lié à Passerelle - Development #25018: iws: inclure l'identifiant de la session wcs dans les paramètres du endpoint checkdateFermé03 juillet 2018

Actions

Révisions associées

Révision 6d243cb1 (diff)
Ajouté par Frédéric Péters il y a presque 6 ans

misc: expose session identifier in substitution variables (#24778)

Historique

#1

Mis à jour par Frédéric Péters il y a presque 6 ans

Au prix de forcer la pose d'un cookie dès la consultation de la première page d'un formulaire.

#2

Mis à jour par Thomas Noël il y a presque 6 ans

Je me pose la question de savoir si session_var_id existera assez tôt, typiquement sur une condition ou une datasource sur la première page. J'ai donc écrit le test suivant... et zut, il ne passe pas.

diff --git a/tests/test_sessions.py b/tests/test_sessions.py
index a5983bb2..790dd9eb 100644
--- a/tests/test_sessions.py
+++ b/tests/test_sessions.py
@@ -181,3 +181,21 @@ def test_session_substitution_variables(pub, user, app):
     session_id = [x for x in pub.session_manager.session_class.select() if x.id != session_id][0].id
     resp = app.get('/foobar/')
     assert 'Hello %s' % session_id in resp.body
+
+def test_session_substitution_variables_1st_page_condition(pub, user, app):
+    pub.session_manager.session_class.wipe()
+    resp = app.get('/')
+
+    formdef = FormDef()
+    formdef.name = 'foobar'
+    formdef.fields = [fields.PageField(id='0', label='1st PAGE', type='page',
+            condition={'type': 'python', 'value': 'vars().get("session_var_id") is not None'}),
+            fields.CommentField(id='7', label='COM1 [session_var_id]', type='comment'),
+            fields.PageField(id='8', label='2nd PAGE', type='page'),
+            fields.CommentField(id='9', label='COM2 [session_var_id]', type='comment')]
+    formdef.store()
+
+    resp = app.get('/foobar/')
+    assert pub.session_manager.session_class.count() == 1
+    session_id = pub.session_manager.session_class.select()[0].id
+    assert 'COM1' in resp.body

si on met 'COM2' dans le dernier assert, ça passe, ce qui montre qu'on arrive sur la seconde page parce que la condition vars().get("session_var_id") is not None plante sur la première page.

#3

Mis à jour par Benjamin Dauvergne il y a presque 6 ans

Pour faire ce que tu veux il faut peut-être plutôt placer le forçage de session au niveau de _q_index() pas page, je vois un self.fedd_current_data(None) dans _q_index() avant l'appel à page() en fin de méthode.

#4

Mis à jour par Frédéric Péters il y a presque 6 ans

Ok pour l'avoir plus tôt encore.

#6

Mis à jour par Thomas Noël il y a presque 6 ans

Je préférerais session_id, sans le var. Je pense que ça peut se changer facilement avec un prefix="session" (qui n'est pas utile, en réalité, j'ai l'impression) et l'ajout du _var dans les for

#7

Mis à jour par Frédéric Péters il y a presque 6 ans

J'ai quand même conservé le prefix='...' même si ça n'est pas/plus utilisé, on verra pour nettoyage plus tard.

#8

Mis à jour par Thomas Noël il y a presque 6 ans

  • Statut changé de Solution proposée à Solution validée

Ack. Je me demandais si on devait l'afficher ou la documenter, mais vu que son usage va plutôt être "en attendant mieux", restons discret.

#9

Mis à jour par Frédéric Péters il y a presque 6 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 6d243cb1981ff85b8684f7a922b6f2b187324a5a
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Tue Jun 26 16:29:04 2018 +0200

    misc: expose session identifier in substitution variables (#24778)
#10

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

  • Lié à Development #25018: iws: inclure l'identifiant de la session wcs dans les paramètres du endpoint checkdate ajouté
#11

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF