Projet

Général

Profil

Development #7898

clicrdv : remplacer urllib par requests

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

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description


Fichiers


Demandes liées

Lié à Passerelle - Development #5188: Migrer le connecteur solisFermé22 juillet 2014

Actions
Lié à Passerelle - Development #14354: Partout utiliser requests à travers BaseResource.requestsNouveau17 décembre 2016

Actions

Révisions associées

Révision 85eb1355 (diff)
Ajouté par Serghei Mihai il y a plus de 4 ans

clicrdv: replace urllib2 by connector's requests (#7898)

Historique

#1

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

  • Assigné à mis à Serghei Mihai
#2

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

J'avais oublié ce patch dans une branche locale.

#3

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

Est-il rebasé sur master ?

#4

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

Oui

#5

Mis à jour par Serghei Mihai il y a presque 8 ans

#6

Mis à jour par Serghei Mihai il y a presque 8 ans

Patch à revoir suite au refactoring du connecteur solis (#5188)

#7

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

Serghei Mihai a écrit :

Patch à revoir suite au refactoring du connecteur solis (#5188)

Nope ; Josué a écrit un nouveau connecteur Solis. L'ancien ne doit pas bouger (en prod sur une vieille CentOS au CG14).

#8

Mis à jour par Serghei Mihai il y a presque 8 ans

Ah. Donc on n'est même pas sûr d'avoir requests.
Alors je vire les modifications du connecteur solis du patch

#10

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

  • Sujet changé de Remplacer urllib par requests dans les connecteurs existants à clicrdv : remplacer urllib par requests
  • Patch proposed changé de Oui à Non

Le seul endroit qui reste pertinent c'est le connecteur clicrdv; et il faut passer par le .requests du connecteur.

#11

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

  • Lié à Development #14354: Partout utiliser requests à travers BaseResource.requests ajouté
#12

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

Patch avec les tests mis à jour.
Lors des erreurs HTTP je leve une exception APIError, pour être uniforme avec le reste, mais je ne sais pas en quelle mésure cela impacte l'interaction avec wcs.

#13

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

mock_response.json.return_value = {'ok'}

Quelle chaine json produirait ça ?

#14

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

Ma faute, je m'étais imaginé qu'il fallait retourner quelque chose, mais en fait non, le payload de la réponse n'est pris en compte que lors de l'échec de l'annulation.
Patch à jour.

#15

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

Patch à jour après quelques tests sur la sandbox de clicrdv.

#16

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

Il y a un changement d'API si on passe de :

            response = e.read()
            response = json.loads(response)
            return {'success': False, 'error': response}

à

            raise APIError('ClicRDV error: %s' % e)

On perd de l'info renvoyée par ClicRDV, ici le message d'erreur. Or c'est un message qui est utilisé dans les workflows, en cas de pépin.

Par ailleurs, les appels actuels à ClicRDV (Vincennes) utilisent la valeur success, et ici il n'y en aura pas.

Pour moi, requests d'abord, mais il faut conserver l'API actuelle.

Si on veut changer l'API, il faut étudier les usages actuels et en prévoir la modification.

#17

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

Ça devient quand même un peu ridicule comme fonction :

     def get_json(self, uri):
-        req = self.get_request(uri)
-        return json.load(urllib2.urlopen(req))
+        response = self.request(uri)
+        return response.json()

C'est quand même dommage de perdre les informations précises fournies par clicrdv :

-            response = e.read()
-            response = json.loads(response)
-            return {'success': False, 'error': response}
+            raise APIError('ClicRDV error: %s' % e)

Plus loin on essaie davantage :

+            r.raise_for_status()
+        except requests.exceptions.HTTPError as e:
             try:
-                error = json.load(e.fp)[0].get('error')
+                error = json.loads(str(e)).get('error')
             except:
                 error = 'Unknown error (Passerelle)'

Mais ça ne risque pas de marcher, chez moi j'ai :

>>> str(e)
'500 Server Error: INTERNAL SERVER ERROR for url: http://passerelle.127.0.0.1.xip.io:8006/clicrdv/test/interventionsets'

et je pense que tu veux plutôt :

>>> r.content
'{"err_class": "urllib2.URLError", "err_desc": "<urlopen error [Errno -2] Name or service not known>", "data": null, "err": 1}'

Et derrière à nouveau quand même l'information structurée qu'on aurait pu récupérer est gaspillée avec :

+            raise APIError('ClicRDV error: %s' % error)
#18

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

get_json et APIError virés.

Quant aux récuperations d'erreurs:

error = json.loads(str(e)).get('error')

je dois bien faire cela car r (du r.content) n'est pas présent dans le contexte de l'exception : local variable 'r' referenced before assignment, les tests le démontrent.

#19

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

Bien sûr il ne s'agit pas de taper l'affectation dans le try/except, uniquement le raise_for_status.

#20

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

Patch à jour sur master.

#21

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

Ligne 145 :

return {'success': False, 'error': response.get('error')}

Alors qu'avant tu ne supposais pas qu'il y avait une entrée 'error' dans le JSON, c'est normal ?

#22

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

Non, je me suis trop embalé et voulu procéder de la même manière que pour create_appointment. Corrigé.

#23

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

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

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit 85eb13551658c4982b396ba91f4d16f7b6364d68 (origin/master, origin/HEAD)
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Thu Dec 29 14:13:22 2016 +0100

    clicrdv: replace urllib2 by connector's requests (#7898)
#25

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