Projet

Général

Profil

Bug #39134

gesbac: retourner la bonne réponse pour une demande envoyée à Gesbac

Ajouté par Serghei Mihai il y a plus de 4 ans. Mis à jour il y a environ 4 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Sinon on a le problème décrit dans #38926.


Fichiers

Révisions associées

Révision 7eac49af (diff)
Ajouté par Serghei Mihai il y a environ 4 ans

gesbac: get demand response by gesbac id instead of form id (#39134)

Historique

#2

Mis à jour par Serghei Mihai il y a plus de 4 ans

J'aurais du le prévoir dès le début: interroger le statut d'une demande par l'identifiant gesbac, puisqu'on le calcule, et non celui du formulaire.

#3

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

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

Pas fan1 de la façon dont on génère le gesbac_id mais maintenant c'est fait.

1 form_id.split()[1] et self.id vont s'incrémenter à peu près à la même vitesse, il aurait mieux fallu prévoir un compteur par form_id, comme ça on sait si c'est la première sous-demande pour une demande, la deuxième, la troisième, etc.., en plus interpoller self.id en plein milieu ça rend le résultat illisible, un

form_id.replace('-', '0') + '%02d' % self.counter
aurait été plus compréhensible. Mais modifier la construction des id maintenant ça va impacter la lecture des réponses actuelles.

#4

Mis à jour par Serghei Mihai il y a environ 4 ans

Tu as bien raison.
J'ai fait les modifs car le connecteur n'est pas encore en production et en recette il y a peu de demandes en attente de retour Gesbac, je me débrouillerai pour corriger leur counter.

#5

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

Serghei Mihai a écrit :

Tu as bien raison.
J'ai fait les modifs car le connecteur n'est pas encore en production et en recette il y a peu de demandes en attente de retour Gesbac, je me débrouillerai pour corriger leur counter.

Ok alors pour que ce soit correct il faut au minimum un index d'unicité sur la paire (form_id, counter), ensuite remplace ça :

        try:
            old_form = Form.objects.filter(resource=self, form_id=form_id).latest()
            counter = old_form.counter+1
        except Form.DoesNotExist:
            counter = 1
        form = Form.objects.create(resource=self, form_id=form_id, counter=counter)

par ça :
        for counter in range(20):
            try:
                form = Form.objects.create(resource=self, form_id=form_id, counter=counter)
                break
            except django.db.IntegrityError as e:
                continue
        else:
            raise APIError('failed to create form object, more than 20 creations.')

si en général counter < 10 ne pas chercher mieux.

#7

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

Serghei Mihai a écrit :

D'accord.

Tu mets toujours le compteur en plein milieu, .replace('-', '0') + '%02d' % self.counter.

#8

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

  • Statut changé de Solution proposée à En cours
#10

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

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

Mis à jour par Serghei Mihai il y a environ 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 7eac49aff386a74ac743320f9bcaf58499bae556 (origin/master, origin/HEAD)
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Thu Jan 23 14:45:26 2020 +0100

    gesbac: get demand response by gesbac id instead of form id (#39134)
#12

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

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

Formats disponibles : Atom PDF