Projet

Général

Profil

Development #6222

Assurer que object.id est uniformément une chaine de caractères

Ajouté par Frédéric Péters il y a plus de 9 ans. Mis à jour il y a plus de 8 ans.

Statut:
Fermé
Priorité:
Bas
Assigné à:
Version cible:
-
Début:
30 décembre 2014
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

L'idée simple est de faire un str() de la valeur retournée par get_new_id() et de faire un self.id = str(self.id) lors du chargement d'un objet. Dans la pratique il y aura sans doute un peu plus, mais il y a désormais une série de tests pour aider.


Fichiers

Révisions associées

Révision f2bdee6f (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

general: always store&use object id as strings (#6222)

Révision b486e304 (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

storage: store hashed_index with strings (#6222)

Révision 85d4f014 (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

general: always store&use object id as strings (#6222)

Révision 9434cef8 (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

storage: store hashed_index with strings (#6222)

Révision d6b18f0f (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

general: always store&use object id as strings (#6222)

Révision 32f297d8 (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

storage: store hashed_index with strings (#6222)

Révision ecc29298 (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

general: always store&use object id as strings (#6222)

Révision 92e8fa6d (diff)
Ajouté par Frédéric Péters il y a environ 9 ans

storage: store hashed_index with strings (#6222)

Révision 5178ee8b (diff)
Ajouté par Frédéric Péters il y a presque 9 ans

general: always store&use object id as strings (#6222)

Révision 65c684de (diff)
Ajouté par Frédéric Péters il y a presque 9 ans

storage: store hashed_index with strings (#6222)

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 9 ans

#2

Mis à jour par Frédéric Péters il y a plus de 9 ans

Un morceau qui avait été oublié, dans les hashed_index il y avait une liste d'identifiants, qui pouvaient être des entiers; cas réel d'erreur : ancien formulaire sauvegardé en brouillon, suppression de ce formulaire, (sa valeur entière n'est pas retirée du hashed_index correspondant à l'utilisateur), affichage de la page "my space" qui utilise l'index, crash parce qu'un id de formulaire renseignée comme appartenant à l'utilisateur n'existe plus.

#3

Mis à jour par Thomas Noël il y a plus de 9 ans

Ack mais haaaaaa non j'avais pas vu le 0001-general qui fait peur. Pas Ack.

#4

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

Je m'y colle.

#5

Mis à jour par Benjamin Dauvergne il y a presque 9 ans

Le code suivant n'est il pas une migration soupoudré dans le fonctionnement du workflow, est-ce qu'il ne vaudrait pas mieux mettre cela de façon générique dans le migrate() de la classe Workflow ? Ça éviterait les str(self.role_id) un peu partout dans les status items.

# wcs/wf/roles.py, l. 45
    def perform(self, formdata):
        if not self.role_id:
            return
+       self.role_id = str(self.role_id)
        if not formdata.user_id:
            # we can't work on anonymous or user_hash'ed forms
            return

Dans wcs/workflows.py, le pourquoi de :

+        if False:
+            if type(self.last_modification_user_id) is int:
+                self.last_modification_user_id = str(self.last_modification_user_id)
+                changed = True

juste après:

-       return role_id
+       return str(role_id)
    else:
-        return role_name
+        return str(role_name)

Ça me semble aller à l'encontre de l'idée que désormais les role_id sont tous des str() partout, tout le temps; non ? Pas forcément le str(role_name) car c'est un paramètre, mais le le role_id vient d'une structure interne par contre et devrait donc toujours être une chaîne (ça rejoint la première remarque).

#6

Mis à jour par Benjamin Dauvergne il y a presque 9 ans

Ack pour le patch sur les index.

#7

Mis à jour par Frédéric Péters il y a presque 9 ans

Le code suivant n'est il pas une migration soupoudré dans le fonctionnement du workflow, est-ce qu'il ne vaudrait pas mieux mettre cela de façon générique dans le migrate() de la classe Workflow ? Ça éviterait les str(self.role_id) un peu partout dans les status items.

Oui mais ça appellerait l'intégration de migrate() au niveau des statuts et le plan est plutôt d'obtenir ça de manière automatique via un autre patch, dans le travail de #4739.

Dans wcs/workflows.py, le pourquoi de : (if False)

Ça a été retiré après l'upload du patch, http://git.entrouvert.org/wcs.git/commit/?h=wip/fred-patch-stack&id=ecc292982bc1a4ce6567db45722d61ebe20befab

juste après :

Ça rejoint en effet la première remarque, c'est fait ainsi pour la même raison.

#8

Mis à jour par Benjamin Dauvergne il y a presque 9 ans

Ack alors.

#9

Mis à jour par Frédéric Péters il y a presque 9 ans

  • Statut changé de En cours à Résolu (à déployer)

Avec quelques adaptations nécessaires suite à des changements dans master (par exemple les /admin/ à remplacer par /backoffice/ dans les tests…).

Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Jan 19 16:14:00 2015 +0100

    storage: store hashed_index with strings (#6222)

commit 5178ee8b4eab2a3efd1a4bca3146be3aa6d617d2
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Wed Dec 31 10:08:18 2014 +0100

    general: always store&use object id as strings (#6222)
#10

Mis à jour par Thomas Noël il y a plus de 8 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF