Projet

Général

Profil

Development #49148

faire de payment_status un accesseur de la méthode sur le backend

Ajouté par Benjamin Dauvergne il y a plus de 3 ans. Mis à jour il y a environ 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
05 décembre 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Ce sera plus simple pour détecter si la méthode est implémentée ou pas que d'utiliser NotImplementedError.


Fichiers


Demandes liées

Bloque Combo - Development #49149: utiliser la méthode payment_status d'eopayment quand elle est présente pour valider les transactions en tâche de fondFermé05 décembre 2020

Actions

Révisions associées

Révision dbb2301e (diff)
Ajouté par Benjamin Dauvergne il y a environ 3 ans

misc: transform Payment.payment_status into a property (#49148)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

#2

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

  • Bloque Development #49149: utiliser la méthode payment_status d'eopayment quand elle est présente pour valider les transactions en tâche de fond ajouté
#3

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

Mouais, en plus d'être pas ouf niveau lisibilité cette approche perd la signature commune de la méthode imposée par la classe Payment, je pense qu'il ne faut pas faire comme ça.

Plutôt implémenter la méthode dans PaymentCommon histoire que tous les backends l'aient, et lui faire retourner None ou une constante par défaut.

#4

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

Valentin Deniaud a écrit :

Plutôt implémenter la méthode dans PaymentCommon histoire que tous les backends l'aient, et lui faire retourner None ou une constante par défaut.

Bon ben je vais rajouter un flag alors, ça me paraissait vraiment plus simple de faire comme cela, on fait ça partout sans avoir de signature commune à partager, ça n'a choqué personne (wcs.fields.Field.store_display_value, etc...).

#6

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

Benjamin Dauvergne a écrit :

on fait ça partout sans avoir de signature commune à partager

Ce qui est spécifique ici ça me semble être que Payment est la classe « publique » de eopayment, dont le rôle est de manipuler les backends « privés ». Et donc c'est important que les trucs publics aient une signature fixe.

Valentin Deniaud a écrit :

pas ouf niveau lisibilité

Et je me rends compte que ce qui rend cette histoire cryptique c'est dans common.py

199     payment_status = None

Tu peux peut-être faire sauter ça, en remplaçant par un truc normal genre

def payment_status(self, transaction_id, **kwargs):
    raise NotImplementedError

et retirer le raise de la méthode dans __init__.py ?

Ça empêche naturellement le raccourci que prenait le premier patch, et dans le deuxième patch has_payment_status deviendrait un truc qui rattrape l'exception. Mais ça m'aiderait probablement de voir ou tout ça va être utilisé, il y a un ticket côté lingo ?

#7

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

Valentin Deniaud a écrit :

Ça empêche naturellement le raccourci que prenait le premier patch, et dans le deuxième patch has_payment_status deviendrait un truc qui rattrape l'exception.

Tu me demandes de faire ce que ce ticket essaie d'éviter depuis le début, appeler la méthode pour savoir si elle existe.

Mais ça m'aiderait probablement de voir ou tout ça va être utilisé, il y a un ticket côté lingo ?

#49149 le code n'y est pas encore, je dois le réécrire pour ces changements.

#8

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

Benjamin Dauvergne a écrit :

Valentin Deniaud a écrit :

Ça empêche naturellement le raccourci que prenait le premier patch, et dans le deuxième patch has_payment_status deviendrait un truc qui rattrape l'exception.

Tu me demandes de faire ce que ce ticket essaie d'éviter depuis le début, appeler la méthode pour savoir si elle existe.

J'ai pas l'impression, je suis d'accord sur le principe du patch qui est pour moi « c'est nul d'avoir une lib qui lève des NotImplementedError qu'il faut ensuite gérer ». Mais à partir du moment où c'est géré en interne ça me paraissait OK (et davantage dans les clous que d'avoir une méthode qui des fois est une méthode, des fois est None).

Mais OK pour ne pas faire comme ça, je reprends, dans le patch :

244        return bool(getattr(self.backend, 'payment_status', False))

C'est bizarre comme ligne, sans bizarrerie ça devrait être

244        return hasattr(self.backend, 'payment_status')

Et on en revient à virer ce payment_status = None, en ne mettant rien à la place (avec petite adaptation à Payment.payment_status).

#10

Mis à jour par Emmanuel Cazenave il y a environ 3 ans

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

Mis à jour par Benjamin Dauvergne il y a environ 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit dbb2301eb54d27e6a1a7f0d99b4a48b083513881
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Sat Dec 5 09:16:30 2020 +0100

    misc: transform Payment.payment_status into a property (#49148)
#12

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

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

Formats disponibles : Atom PDF