Projet

Général

Profil

Development #45333

intégrer au niveau des connecteurs SMS la possibilité d'un envoi de test

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

Statut:
Fermé
Priorité:
Bas
Assigné à:
Version cible:
-
Début:
21 juillet 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Plutôt qu'avoir ça délégué à w.c.s.


Fichiers


Demandes liées

Lié à Passerelle - Development #45814: Appliquer par defaut le template message_service_views aux connecteurs SMSFermé11 août 2020

Actions
Lié à Passerelle - Development #45815: Déplacer le template message_service_view dans le répertoire SMSFermé11 août 2020

Actions
Lié à Passerelle - Development #45816: Exclure les attributs sensibles des champs décrivants les connecteurs SMSFermé11 août 2020

Actions
Lié à Passerelle - Development #45817: Afficher les attributs des connecteurs SMS dans le template message_service_viewFermé11 août 2020

Actions
Lié à Passerelle - Development #45829: Ajouter une description au endpoint send des connecteurs SMSFermé11 août 2020

Actions
Lié à Passerelle - Development #46611: Permettre de charger les fichiers urls depuis une application commune, tout en gardant les fonctionnalités liées aux connecteurs qui dérivent de cette application.Fermé14 septembre 2020

Actions

Révisions associées

Révision 6ff2dc43 (diff)
Ajouté par Nicolas Roche il y a plus de 3 ans

views: explicitly get form_class from generic connector mixin (#45333)

Révision 257334fd (diff)
Ajouté par Nicolas Roche il y a plus de 3 ans

sms: add a button to test sending sms (#45333)

Historique

#1

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Lié à Development #34067: test de sms : ça affiche "Le SMS a été envoyé correctement." alors que non ajouté
#2

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Lié à Development #44815: avoir la possibilité d'ajouter un job en lui demandant de s'exécuter tout de suite ajouté
#3

Mis à jour par Nicolas Roche il y a plus de 3 ans

Patch qui reprend de l'ancien code avant le passage aux envois asynchrone : https://dev.entrouvert.org/issues/21465

#4

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

L'objectif ici n'est pas d'avoir un endpoint d'envoi synchrone.

Il s'agit d'avoir un bouton "Tester l’envoi" qui ouvre une popup et permette à l'admin de taper un numéro de destination et un texte puis de valider le formulaire, l'envoi se fait et la page s'affiche avec l'info "un envoi vient d'être fait" (django.contrib.messages).

#5

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Statut changé de Solution proposée à Nouveau

(compris)

#6

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Lié à Development #34067: test de sms : ça affiche "Le SMS a été envoyé correctement." alors que non supprimé
#7

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Lié à Development #44815: avoir la possibilité d'ajouter un job en lui demandant de s'exécuter tout de suite supprimé
#8

Mis à jour par Nicolas Roche il y a plus de 3 ans

Pour info, ici j'envisagerais de partir sur un chemin de croix (cf mon patch fourre-tout) :
  • uniformiser l'utilisation du template messages_services_views pour tous les connecteurs SMS
  • le déplacer dans /sms/template
  • ajouter le lien vers une popup dedans
  • ajouter des fichiers urls.py, views.py et forms.py dans /sms
  • bidouiller base/__init__.py pour charger sms/urls.py sur les connecteurs SMS
  • bidouiller une fonction get_instance() dans la vue pour retrouver l'objet connecteur
Et là Thomas me dit que je pourrais éviter tout ça :
  • permettre d'appeler le endpoint de façon synchrone
  • ajouter mon formulaire directement dans le template messages_services_views
  • faire en sorte que le formulaire envoie ses paramètres en JSON sur le endpoint

Bref, je préfère passer mon chemin pour le moment quitte à revenir plus tard.

#9

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Lié à Development #45814: Appliquer par defaut le template message_service_views aux connecteurs SMS ajouté
#10

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Lié à Development #45815: Déplacer le template message_service_view dans le répertoire SMS ajouté
#11

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Lié à Development #45816: Exclure les attributs sensibles des champs décrivants les connecteurs SMS ajouté
#12

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Lié à Development #45817: Afficher les attributs des connecteurs SMS dans le template message_service_view ajouté
#13

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Lié à Development #45829: Ajouter une description au endpoint send des connecteurs SMS ajouté
#14

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Lié à Development #46611: Permettre de charger les fichiers urls depuis une application commune, tout en gardant les fonctionnalités liées aux connecteurs qui dérivent de cette application. ajouté
#15

Mis à jour par Nicolas Roche il y a plus de 3 ans

Un bouton (oups, un lien en fait) "Tester l’envoi" qui ouvre une popup.

#16

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Assigné à mis à Nicolas Roche
#17

Mis à jour par Valentin Deniaud il y a plus de 3 ans

get_instance ne peut pas fonctionner comme ça (capitalize()), il faut utiliser GenericConnectorMixin qui te donne self.model. Par contre le formulaire ne doit pas être écrasé, donc il faut patcher le mixin avec genre

-        self.form_class = self.model.get_manager_form_class(exclude=self.exclude_fields)
+        if not hasattr(self, 'form_class'):
+            self.form_class = self.model.get_manager_form_class(exclude=self.exclude_fields)

L'appel à send_sms n'est pas le même que celui qui est fait par l'envoi normal via BaseSMSResource, il manque le paramètre stop. Ça fait crasher l'envoi avec le connecteur OVH par ex, qui fait un kwargs['stop'] (le test passe parce que tu mock la fonction d'envoi). Bref, juste ajouter un stop=False.

À l'usage, j'aurais aimé avoir un bouton « Resend test message », parce que remplir le formulaire de test, valider l'envoi, voir que ça ne marche pas, corriger, remplir le formulaire de test avec les mêmes infos, valider l'envoi, etc, c'est un peu relou.
Genre au moment de la redirection vers instance.get_absolute_url(), ajouter des paramètres d'URL correspondant à ceux du formulaire, puis sur la page du connecteur avoir un formulaire vers SmsTestSendView avec que des champs cachés ayant pour valeur request.GET.<champ>, et le bouton de soumission qui s'appelle « Resend test message ». Je te laisse voir si c'est faisable, sinon pas grave.

#18

Mis à jour par Nicolas Roche il y a plus de 3 ans

get_instance ne peut pas fonctionner comme ça (capitalize()), il faut utiliser GenericConnectorMixin qui te donne self.model.

merci. J'ai dû surcharger init_stuff (avec le patch du mixin proposé les tests plantent sur le connecteur CSV).

L'appel à send_sms n'est pas le même que celui qui est fait par l'envoi normal via BaseSMSResource, il manque le paramètre stop. Ça fait crasher l'envoi avec le connecteur OVH par ex. Bref, juste ajouter un stop=False.

merci, je n'avais pas détecté le soucis en m'envoyant les SMS avec twilio.

       if not kwargs['stop']:   # yep, crash ici
            params.update({'noStop': 1})  # yep, je met stop=False

rq: https://dev.entrouvert.org/issues/47034#note-1
noStop: 1 pour ne pas afficher "STOP au XXXXX" à la fin du message pour un SMS à caractère non commercial

À l'usage, j'aurais aimé avoir un bouton « Resend test message », parce que remplir le formulaire de test, valider l'envoi, voir que ça ne marche pas, corriger, remplir le formulaire de test avec les mêmes infos, valider l'envoi, etc, c'est un peu relou.

Moi je veux bien, mais c'est pas un peu over-engenering (le navigateur se souvient des valeurs, ça fait 7 clics) ?

#19

Mis à jour par Valentin Deniaud il y a plus de 3 ans

Nicolas Roche a écrit :

get_instance ne peut pas fonctionner comme ça (capitalize()), il faut utiliser GenericConnectorMixin qui te donne self.model.

merci. J'ai dû surcharger init_stuff (avec le patch du mixin proposé les tests plantent sur le connecteur CSV).

Et si tu essayais d'ajouter get_form_class à GenericConnectorMixin, à la place d'affecter un self.form_class autoritaire, et ensuite surcharger cette nouvelle méthode dans SmsTestSendView, ça permettrait de remettre ce bazar dans les clous de django (https://docs.djangoproject.com/en/3.1/ref/class-based-views/mixins-editing/#django.views.generic.edit.FormMixin.get_form_class).

#20

Mis à jour par Nicolas Roche il y a plus de 3 ans

Oui, je ne voulais pas toucher au code du Mixin mais c'est plus propre.

#21

Mis à jour par Valentin Deniaud il y a plus de 3 ans

Tu dois pouvoir enlever l'affectation explicite de self.form_class dans le mixin, et en fait pas besoin de surcharger get_form_class dans le formulaire SMS, l'attribut statique devrait suffire (le problème initial étant qu'il était écrasé par la précédente affectation).

#22

Mis à jour par Nicolas Roche il y a plus de 3 ans

Oui et non.

Tu dois pouvoir enlever l'affectation explicite de self.form_class dans le mixin

oui à condition de remplacer l'endroit où cette affectation est utilisée (dans GenericConnectorView) -> 0001

et en fait pas besoin de surcharger get_form_class dans le formulaire SMS, l'attribut statique devrait suffire

non, il faut de toute façon redéfinir get_form_class car elle est appelée par le FormMixin de django.

#23

Mis à jour par Valentin Deniaud il y a plus de 3 ans

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

Mis à jour par Nicolas Roche il y a plus de 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 257334fdc5354773797297eb69ece1ffaac332bb
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Wed Sep 16 16:23:49 2020 +0200

    sms: add a button to test sending sms (#45333)

commit 6ff2dc4365c8511e083ee6c16ee6b91ea691224a
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Thu Oct 15 14:52:35 2020 +0200

    views: explicitly get form_class from generic connector mixin (#45333)
#25

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

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

Formats disponibles : Atom PDF