Development #7898
clicrdv : remplacer urllib par requests
0%
Description
Afin de faciliter les tests en utilisant mock(https://dev.entrouvert.org/projects/prod-eo/wiki/HowDoWeDoTests#Ressources)
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Serghei Mihai il y a environ 8 ans
- Fichier 0001-replace-urllib-calls-by-requests-7898.patch 0001-replace-urllib-calls-by-requests-7898.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
J'avais oublié ce patch dans une branche locale.
Mis à jour par Serghei Mihai il y a presque 8 ans
- Lié à Development #5188: Migrer le connecteur solis ajouté
Mis à jour par Serghei Mihai il y a presque 8 ans
Patch à revoir suite au refactoring du connecteur solis (#5188)
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).
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
Mis à jour par Serghei Mihai il y a presque 8 ans
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.
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é
Mis à jour par Serghei Mihai il y a plus de 7 ans
- Fichier 0001-clicrdv-replace-urllib2-by-connectors-requests-7898.patch 0001-clicrdv-replace-urllib2-by-connectors-requests-7898.patch ajouté
- Patch proposed changé de Non à Oui
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.
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 ?
Mis à jour par Serghei Mihai il y a plus de 7 ans
- Fichier 0001-clicrdv-replace-urllib2-by-connectors-requests-7898.patch 0001-clicrdv-replace-urllib2-by-connectors-requests-7898.patch ajouté
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.
Mis à jour par Serghei Mihai il y a plus de 7 ans
- Fichier 0001-clicrdv-replace-urllib2-by-connectors-requests-7898.patch 0001-clicrdv-replace-urllib2-by-connectors-requests-7898.patch ajouté
Patch à jour après quelques tests sur la sandbox de clicrdv.
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.
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)
Mis à jour par Serghei Mihai il y a environ 7 ans
- Fichier 0001-clicrdv-replace-urllib2-by-connector-s-requests-7898.patch 0001-clicrdv-replace-urllib2-by-connector-s-requests-7898.patch ajouté
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.
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.
Mis à jour par Serghei Mihai il y a plus de 4 ans
- Fichier 0001-clicrdv-replace-urllib2-by-connector-s-requests-7898.patch 0001-clicrdv-replace-urllib2-by-connector-s-requests-7898.patch ajouté
- Statut changé de En cours à Solution proposée
Patch à jour sur master.
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 ?
Mis à jour par Serghei Mihai il y a plus de 4 ans
- Fichier 0001-clicrdv-replace-urllib2-by-connector-s-requests-7898.patch 0001-clicrdv-replace-urllib2-by-connector-s-requests-7898.patch ajouté
Non, je me suis trop embalé et voulu procéder de la même manière que pour create_appointment
. Corrigé.
Mis à jour par Emmanuel Cazenave il y a plus de 4 ans
- Statut changé de Solution proposée à Solution validée
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)
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
clicrdv: replace urllib2 by connector's requests (#7898)