nanterre: améliore la gestion d'erreur sur implicit
* mieux vérifier les appels HTTPs pour récupérer les cartes familles * ajouter des logs en warning dans tous les WS de QF * améliorer tous les messages d'erreur dans qf.py
This commit is contained in:
parent
7dafbc6382
commit
c94cfa85d0
|
@ -43,6 +43,9 @@ from zoo.zoo_data.models import Entity, Relation, Transaction, Log
|
|||
from . import utils, fragments, saga, qf, models
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def flatten_errors(serializer_errors):
|
||||
errors = []
|
||||
for k, v in serializer_errors.items():
|
||||
|
@ -1663,6 +1666,7 @@ class QFLireQuotientsValide(APIView):
|
|||
ws = qf.QF()
|
||||
response, error = ws.lire_quotients_valides(now())
|
||||
if error:
|
||||
logger.warning(u'lire-quotients-valide %s', error)
|
||||
return Response({
|
||||
'err': 1,
|
||||
'errors': [error],
|
||||
|
@ -1705,6 +1709,7 @@ class QFSimuler(APIView):
|
|||
d = serializer.validated_data
|
||||
result, error = ws.simuler_qf(**d)
|
||||
if error:
|
||||
logger.warning('qf-simuler %s', error)
|
||||
return Response({
|
||||
'err': 1,
|
||||
'errors': [error],
|
||||
|
@ -1732,6 +1737,8 @@ class QFCalculer(IndividuViewMixin, TransactionalView):
|
|||
result, error = qf.CalculQF.calcul_qf(meta=serializer.journal_meta,
|
||||
transaction=self.transaction, **d)
|
||||
if error:
|
||||
logger.warning(u'qf-calculer identifier: %s request: %s erreur: %s', identifier,
|
||||
serializer.validated_data, error)
|
||||
return Response({
|
||||
'err': 1,
|
||||
'errors': [error],
|
||||
|
@ -1751,6 +1758,7 @@ class QFCalculer(IndividuViewMixin, TransactionalView):
|
|||
else:
|
||||
result, error = ws.lire_quotient_familial(individu, now())
|
||||
if error:
|
||||
logger.warning(u'lire-quotients-valides identifier: %s erreur: %s', identifier, error)
|
||||
return Response({
|
||||
'err': 1,
|
||||
'errors': [error],
|
||||
|
@ -1769,6 +1777,8 @@ class QFEditerCarte(IndividuViewMixin, APIView):
|
|||
ws = qf.QF()
|
||||
result, error = ws.editer_carte(individu, int(id_qf))
|
||||
if error:
|
||||
logger.warning(u'editer-carte identifier: %s id-qf: %s erreur: %s', identifier, id_qf,
|
||||
error)
|
||||
return Response({
|
||||
'err': 1,
|
||||
'errors': [error],
|
||||
|
|
|
@ -7,6 +7,7 @@ import json
|
|||
from zoo.models import Job
|
||||
|
||||
import requests
|
||||
|
||||
from django.utils.timezone import now
|
||||
from django.conf import settings
|
||||
|
||||
|
@ -40,16 +41,14 @@ class QF(object):
|
|||
'Content-Type': 'application/json'
|
||||
})
|
||||
except requests.RequestException as e:
|
||||
logging.getLogger(__name__).warning(u'Erreur connexion Implicit/QF : %s', unicode(e))
|
||||
return None, unicode(e)
|
||||
return None, u'Implicit connexion impossible: %r' % e
|
||||
if response.status_code != 200:
|
||||
return None, u'Implicit réponse non 200: %s %r' % (
|
||||
response.status_code, response.content[:1024])
|
||||
try:
|
||||
data = response.json()
|
||||
except ValueError as e:
|
||||
logging.getLogger(__name__).warning(u'JSON invalide rendu par Implicit/QF : %r',
|
||||
response.content[:512])
|
||||
return None, unicode(e)
|
||||
if response.status_code != 200:
|
||||
return None, data
|
||||
return None, u'Implicit contenu non JSON: %s %r' % (e, response.content[:1024])
|
||||
return data, None
|
||||
|
||||
def lire_quotients_valides(self, date_de_reference):
|
||||
|
@ -147,7 +146,7 @@ class QF(object):
|
|||
else:
|
||||
return response[0], None
|
||||
else:
|
||||
return None, response
|
||||
return None, u'Implicit calcul-qf réponse invalide: %r' % unicode(response)[:1024]
|
||||
|
||||
def lire_quotient_familial(self, individu, date_de_reference):
|
||||
federation = individu.content['cles_de_federation'].get('implicit')
|
||||
|
@ -167,12 +166,13 @@ class QF(object):
|
|||
if isinstance(response, list):
|
||||
return response, None
|
||||
else:
|
||||
return None, response
|
||||
return None, (u'Implicit lire-quotient-familial réponse invalide: %r'
|
||||
% unicode(response)[:1024])
|
||||
|
||||
def editer_carte(self, individu, id_qf):
|
||||
federation = individu.content['cles_de_federation'].get('implicit')
|
||||
if not federation:
|
||||
return None, 'pas de clé métier'
|
||||
return None, u'Implicit editer-carte: pas de clé métier'
|
||||
fragment = {
|
||||
self.ID_FRAGMENT: 1,
|
||||
'type': 'donnees-carte-quotient-familial',
|
||||
|
@ -184,16 +184,21 @@ class QF(object):
|
|||
response, error = self.request('editer-carte-quotient-familial', [fragment])
|
||||
if error:
|
||||
return None, error
|
||||
if isinstance(response, dict) and 'lien' in response:
|
||||
response = requests.get(response['lien'])
|
||||
if response.status_code == 200:
|
||||
return response.content, None
|
||||
return None, {
|
||||
'status_code': 'erreur-de-recuperation-du-lien',
|
||||
'lien': response['lien']
|
||||
}
|
||||
else:
|
||||
return None, response
|
||||
if not isinstance(response, dict) or 'lien' not in response:
|
||||
return None, u'Implicit editer-carte réponse invalide: %s' % response
|
||||
try:
|
||||
url = str(response['lien'])
|
||||
except Exception as e:
|
||||
return None, u'Implicit editer-carte impossible de convertir le lien: %r' % response
|
||||
try:
|
||||
response = requests.get(url)
|
||||
except requests.RequestException as e:
|
||||
return None, (u'Implicit editer-carte connexion impossible pour récupérer le lien: '
|
||||
'%s %r' % (url, e))
|
||||
if response.status_code != 200:
|
||||
return None, (u'Implicit editer-carte code non 200 sur récupération du lien: '
|
||||
'%s %s %r' % (url, response.status_code, response.content[:1024]))
|
||||
return response.content, None
|
||||
|
||||
|
||||
class CalculQF(fragments.FragmentBuilder):
|
||||
|
|
Loading…
Reference in New Issue