Development #63778
emails, accepter une lazylist de destinataires
0%
Description
On gère une possibilité de liste,
if isinstance(dest, list): addresses.extend(dest) continue
et la possibilité d'une longue chaine avec des adresses séparées par des virgules, mais on devrait aussi pouvoir accepter une "lazylist", ne pas avoir à construire de chaine.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a environ 2 ans
- Lié à Development #60513: Pouvoir envoyer des mails en masse ajouté
Mis à jour par Frédéric Péters il y a environ 2 ans
- Fichier 0001-workflows-allow-sending-emails-to-lazy-lists-63778.patch 0001-workflows-allow-sending-emails-to-lazy-lists-63778.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Une lazylist d'adresses mais également une lazylist de (lazy ou pasa) users (sur le modèle de ce qui a été fait pour les notifs, mais sans la partie uuid).
Mis à jour par Lauréline Guérin il y a environ 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Thomas Noël il y a environ 2 ans
- Statut changé de Solution validée à Solution proposée
Je me permets de dévalider.
Sans trop d'importance d'abord, je pense que le test
if not dest: continue
pourrait être posé après la transformation de la
LazyList
en list
.
Mais plus important, dans l'idée que dest peut maintenant contenir tout autre chose que du str
, ajouter avant la gestion de la présence de "@" :
+ if isinstance(dest, (LazyUser, get_publisher().user_class)): + dests.extend(dest) + continue + + if not isinstance(dest, str): <--- parce que je pense qu'on ne veut rien gérer d'autre comme type + # logguer un truc ou pas + continue + if '@' in str(dest): ...
Mis à jour par Frédéric Péters il y a environ 2 ans
- Fichier 0001-workflows-allow-sending-emails-to-lazy-lists-63778.patch 0001-workflows-allow-sending-emails-to-lazy-lists-63778.patch ajouté
pourrait être posé après la transformation de la LazyList en list.
Il y a un __nonzero__
sur LazyList, si elle est vide on prendra déjà le chemin du continue.
Pour la suite j'ai repris davantage le code, principalement pour accepter les autres itérables (en imaginant pas impossible de recevoir un set); ça donne en gros :
si pas str: unlazy l'éventuelle lazy list si itérable: tout ajouter continue traiter le cas str
Mis à jour par Thomas Noël il y a environ 2 ans
- Statut changé de Solution proposée à Solution validée
Juste pour être sûr qu'on s'entend : on ne considère pas le cas où self.to n'est pas itérable et est un user ?
Notant que ce n'est pas l'objet du ticket... je valide déjà le présent patch.
Mis à jour par Frédéric Péters il y a environ 2 ans
- Fichier 0001-workflows-allow-sending-emails-to-lazy-lists-63778.patch 0001-workflows-allow-sending-emails-to-lazy-lists-63778.patch ajouté
- Statut changé de Solution validée à Solution proposée
Juste pour être sûr qu'on s'entend : on ne considère pas le cas où self.to n'est pas itérable et est un user ?
Je ne comprenais pas je me demandais si ça faisait référence à :
# this works around the fact that parametric workflows only support # string values, so if we get set a string, we convert it here to an # array. if isinstance(self.to, str): self.to = [self.to]
(i.e. on gère l'éventuel cas où self.to serait une chaine).
Mais à essayer de mettre en rapport ton commentaire et le patch, la question porterait non pas sur self.to
mais sur dest, qu'on obtient en "donnée complexe", et qui pourrait être LazyUser, et ça ferait
+ if not isinstance(dest, str): + if isinstance(dest, LazyList): + dest = list(dest) + if isinstance(dest, collections.abc.Iterable): + dests.extend(dest) continue
"continue" sans toucher à dests.
~~
Si c'est bien ça, tant qu'à y penser maintenant autant le faire, je viens de modifier pour avoir
if isinstance(dest, (LazyUser, get_publisher().user_class)): dests.append(dest) continue
et j'ai ajouté le test approprié,
+ formdata.user_id = user1.id + pub.substitutions.feed(formdata) + item.to = ['{{form_user}}'] + emails.empty() + item.perform(formdata) + get_response().process_after_jobs() + assert emails.count() == 1 + assert set(formdata.evolution[-1].parts[-1].addresses) == {'user1@example.com'}
Mis à jour par Benjamin Dauvergne il y a environ 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Frédéric Péters il y a environ 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 6b59e3614566c3378c18bd1cda160fda16f5806f Author: Frédéric Péters <fpeters@entrouvert.com> Date: Sun Apr 10 19:45:22 2022 +0200 workflows: allow sending emails to lazy lists (#63778)
Mis à jour par Transition automatique il y a environ 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
workflows: allow sending emails to lazy lists (#63778)