toulouse-maelis: prevent creating invoice in concurency (#82706) #378
No reviewers
Labels
No Label
No Milestone
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: entrouvert/passerelle#378
Loading…
Reference in New Issue
No description provided.
Delete Branch "wip/82706-manage-concurency-on-create-invoice"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Les objets "Invoice" du connecteur sont créés par la fonction get_invoices.
Cette fonction récupère la liste des factures connues de Maélis,
puis boucle sur cette liste pour ajouter les nouvelles factures en base.
Le patch place le code de recherche puis d'ajout des factures dans une transaction,
afin que 2 appels ne puissent pas ajouter la même facture en même temps.
Pourquoi ne pas juste faire un get_or_create ou un update_or_create, via l'index sur resource, regie_id, invoice_id il ne peut pas y avoir de problème de concurrence (la transaction ne protégera pas vraiment des soucis dans ce cas de toute façon).
Pas la bonne solution.
Le code pourrait ressembler à ça:
59d0209cfb
to4865168e4e
Oui, je fais ça, merci d'avoir détricoté mon code.
4865168e4e
tod1a2f8d26b
@ -4075,0 +4062,4 @@
invoice.family_id,
)
continue
content_one = json.dumps(invoice.maelis_data, sort_keys=True, indent=2)
Ne suffirait-il pas de faire juste invoice.maelis_data != item ? Je ne comprends pas le passage par la sérialisation JSON, python sait déjà comparer deux dicos (je comprends ensuite pour le difflib, mais donc déplacer la sérialisation à cet endroit).
d1a2f8d26b
toe59765eaf7