Vie privée : Supprimer les emails des candidats de Brevo#5989
Conversation
af3e451 to
16b6db1
Compare
08d1b45 to
c43a72a
Compare
fd89c2a to
c99d1f1
Compare
rsebille
left a comment
There was a problem hiding this comment.
La PR étant en brouillon j'ai fait des commentaires généraux donc ils ne sont pas forcément cohérents entre-eux :).
Remarques générales
EmailWaitingForExternalDeletionAdmin()
J'ai un peu l'impression qu'on fait une queue persistante mais ultra-spécialisé, donc je me demande si ça serais pas "mieux" d'implémenter un storage personnalisé dans huey 🤔 en prenant comme exemple leur SqliteStorage.
Sinon je pense qu'on pourrais au moins rendre la classe plus générique afin de pouvoir gérer d'autre type de tâche et ne pas soit dupliquer ce genre de table ou avoir à faire une migration dans le futur 🤷.
notify_archive_jobseekers.py
Pas super convaincu de découpler par défaut la suppression dans le service distant de celui en local, je m'attendais un peu à qu'on essaye en synchrone et si erreur alors on met pour plus tard.
Ce qui d'ailleurs me fait me demander si on ne veux pas forcer le couplage entre la suppression dans les services externes avec celle en interne, un peu en mode "supprimé partout ou nul part".
delete_emails_from_brevo.py
Je pense qu'il manque un mécanisme pour les réessais, un last_try_at et tries_counter pourrais sans doute faire le boulot.
c99d1f1 to
0556120
Compare
2d48087 to
12d5cc9
Compare
de84ac9 to
615d2c5
Compare
|
Là quand on supprime un candidat, on met l'email dans notre redis et on croise fort les doigts pour que l'API de Brevo soit rapidement dispo avant notre prochain redémarrage de redis. |
921496e to
25a951e
Compare
25a951e to
0b99450
Compare
|
02/06/2025, réunion de travail avec @francoisfreitag et @rsebille : décisions
|
0b99450 to
44cc531
Compare
Warning/error dans Sentry* |
01361f5 to
904e279
Compare
904e279 to
2e33ab9
Compare
tonial
left a comment
There was a problem hiding this comment.
Ça me va.
Je pense qu'il faudra prévoir une carte pour gérer un nettoyage de brevo pour les utilisateurs qui changent d'email, mais ce n'est lié à ce changement, donc tu peux lire puis ignorer le commentaire qui en parle 😝
| ) | ||
|
|
||
|
|
||
| @task(retries=24 * 6 * 90, retry_delay=10 * 60, context=True) # Retry every 10 minutes during 90 days. |
There was a problem hiding this comment.
Une bonne manière d'être sur de ne pas se louper :D
Je suis en train de me dCela dit, je me demande si une autre solution ne serait pas de gérer la suppression des emails depuis la commande de synchronisation.
On pourrait lister les candidats dans brevo et supprimer ceux qui ne sont plus dans notre DB 🤔
Après, vu le nombre de candidats, ça pourrait être un cron qui ne tourne qu'une fois par mois, et ça permettrait de réduire la durée de cette tâche ?
Ça ne remplacera sans doute pas cette tâche asynchrone, donc c'est plus une amélioration qu'on pourrait faire à côté (et qui permettra également de gérer les changements d'email de candidats).
| def test_delete_contact_request_error(mocker, caplog): | ||
| mocker.patch("itou.utils.brevo.httpx.Client.delete", side_effect=httpx.RequestError("Connection timed out")) | ||
|
|
||
| brevo_client = BrevoClient() | ||
|
|
||
| with pytest.raises(httpx.RequestError): | ||
| brevo_client.delete_contact("somebody@mail.com") | ||
|
|
||
| error_record = next(record for record in caplog.records if record.levelname == "ERROR") | ||
| assert error_record.message == "Brevo API: Request failed: Connection timed out" |
There was a problem hiding this comment.
Peut-être combiner ce test avec le test de retries pour vérifier que la tâche est réessayée tant qu’elle est en erreur.
There was a problem hiding this comment.
J'ai conservé des tests appelant directement delete_contact pour tester les exceptions levées, et un appelant la méthode asynchrone async_delete_contact pour tester les retries.
Huey semble ne pas propager les exceptions levées dans les méthodes décorées, nous avons accès uniquement aux logs, donc sans certitude sur la présence d'un raise.
Peut-être une optimisation pourra être apportée plus tard.
d7714b1 to
4d91aaa
Compare
Setup Client's base_url, update headers in order to avoid duplicated code in upcoming udpdates
4d91aaa to
5c1e917
Compare
🤔 Pourquoi ?
Supprimmer les emalis des candidats lors de leur archivage, en appelant l'API Brevo, sans générer de contention avec la commande
notify_archive_jobseekers🍰 Comment ?
BrevoClientet ajout de la méthode de suppressiondelete_contactsnotify_archive_jobseekers