Projet

Général

Profil

Development #43651

wipe(), ne pas autoriser les appels depuis une instance

Ajouté par Frédéric Péters il y a presque 4 ans. Mis à jour il y a plus d'un an.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Pour éviter les erreurs façon #43635#note-5, où .wipe() est appelé plutôt que .remove_self().


Fichiers

Révisions associées

Révision 13a54d9f (diff)
Ajouté par Frédéric Péters il y a plus d'un an

misc: make sure .wipe() is only called on classes (#43651)

Historique

#1

Mis à jour par Frédéric Péters il y a plus d'un an

Très basiquement ça serait

     @classmethod
     def wipe(cls):
+        assert isinstance(cls, type)

je ne sais pas ce qui avait pu me bloquer au moment de ce ticket.

J'attache déjà mon idée de patch mais je ne suis pas encore en mesure de pousser la branche pour jenkins, je ferai ça quand j'aurai du réseau adéquat.

#2

Mis à jour par Frédéric Péters il y a plus d'un an

  • Patch proposed changé de Oui à Non

C'est qu'en fait on a beau appeler sur un objet, une fois dans la méthode le cls est bien la classe et pas l'objet.

#3

Mis à jour par Frédéric Péters il y a plus d'un an

J'ai quelque chose dans la branche mais c'est une catastrophe pour pylint (1352 warnings, avec principalement marqués tous les appels .wipe() des tests, ignorer globalement le warning en question je ne suis pas fan, mais taper 1300 # noqa non plus).

#4

Mis à jour par Benjamin Dauvergne il y a plus d'un an

La version dans Django hérite de classmethod, ça devrait aider (ou l'utiliser directement si elle est dispo depuis longtemps):

django$ git grep -A5 classonlymethod
django/utils/decorators.py:class classonlymethod(classmethod):
django/utils/decorators.py-    def __get__(self, instance, cls=None):
django/utils/decorators.py-        if instance is not None:
django/utils/decorators.py-            raise AttributeError("This method is available only on the class, not on instances.")
django/utils/decorators.py-        return super().__get__(instance, cls)
django/utils/decorators.py-

#5

Mis à jour par Frédéric Péters il y a plus d'un an

Voilà avec la version django de classonlymethod et pylint la vit bien.

#6

Mis à jour par Lauréline Guérin il y a plus d'un an

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

Mis à jour par Frédéric Péters il y a plus d'un an

  • Statut changé de Solution validée à Résolu (à déployer)
commit 13a54d9f7d841eec7f873f6e84d043aaf6858a42
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Fri Sep 30 13:26:45 2022 +0200

    misc: make sure .wipe() is only called on classes (#43651)
#8

Mis à jour par Transition automatique il y a plus d'un an

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

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF