cartads_cs: cache additional dossier infos (#36561)

This commit is contained in:
Frédéric Péters 2019-09-30 17:41:53 +02:00
parent 0a97c0ee1f
commit 3eb45f4e5f
3 changed files with 42 additions and 5 deletions

View File

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.12 on 2019-09-30 15:42
from __future__ import unicode_literals
from django.db import migrations
import jsonfield.fields
class Migration(migrations.Migration):
dependencies = [
('cartads_cs', '0010_cartadsdossier_cartads_cache_code_acces'),
]
operations = [
migrations.AddField(
model_name='cartadsdossier',
name='cartads_cache_infos',
field=jsonfield.fields.JSONField(default={}),
),
]

View File

@ -46,7 +46,7 @@ import zeep.helpers as zeep_helpers
from passerelle.base.models import BaseResource
from passerelle.utils.api import endpoint
from passerelle.utils.jsonresponse import APIError
from passerelle.utils.jsonresponse import APIError, JSONEncoder
def cartads_file_location(instance, filename):
@ -94,6 +94,7 @@ class CartaDSDossier(models.Model):
cartads_id_dossier = models.CharField(max_length=50, null=True)
cartads_numero_dossier = models.CharField(max_length=50, null=True)
cartads_cache_code_acces = models.CharField(max_length=200, null=True)
cartads_cache_infos = JSONField(default={})
cartads_steps_cache = JSONField(default={})
last_update_datetime = models.DateTimeField(auto_now=True)
subscribers = models.ManyToManyField(CartaDSSubscriber, blank=True)
@ -301,11 +302,26 @@ class AbstractCartaDSCS(BaseResource):
def update_dossier_cache(self):
client = self.soap_client(wsdl_url=self.get_wsdl_url('ServiceEtapeDossier'))
client_suivi = self.soap_client(wsdl_url=self.get_wsdl_url('ServiceSuiviNumerique'))
client_dossier = self.soap_client(wsdl_url=self.get_wsdl_url('ServiceDossier'))
token = self.get_token()
for dossier in CartaDSDossier.objects.filter(cartads_id_dossier__isnull=False):
dossier.cartads_steps_cache = {'steps': self.get_dossier_steps(client, token, dossier)}
dossier.cartads_cache_code_acces = client_suivi.service.GetMotPasse(
self.get_token(), dossier.cartads_id_dossier)
try:
dossier.cartads_cache_code_acces = client_suivi.service.GetMotPasse(
self.get_token(), dossier.cartads_id_dossier)
except zeep.exceptions.Fault as e:
self.logger.exception('error getting access code (%s) (%r)', dossier.id, e.message)
try:
infos_dossier = client_dossier.service.GetInfosDossier(self.client_name, dossier.cartads_id_dossier)
if infos_dossier:
# load(dump(...)) to serialize dates
dossier.cartads_cache_infos = json.loads(json.dumps(
zeep_helpers.serialize_object(
client_dossier.service.GetInfosDossier(
self.client_name, dossier.cartads_id_dossier)),
cls=JSONEncoder))
except zeep.exceptions.Fault as e:
self.logger.exception('error getting dossier infos (%s) (%r)', dossier.id, e.message)
dossier.save()
def hourly(self):

View File

@ -165,7 +165,7 @@ class FakeService():
return 123
def GetInfosDossier(self, client_name, id_dossier):
assert id_dossier == 123
assert id_dossier in (123, '135792')
return OrderedDict([
(u'AdresseTerrain', u'all\xe9e des Fleurs'),
(u'CoTypeDossier', 'PC'),
@ -402,7 +402,7 @@ def test_status(connector, app, cached_data):
assert CartaDSDossier.objects.get(pk=dossier.id).cartads_steps_cache
assert CartaDSDossier.objects.get(pk=dossier.id).cartads_cache_code_acces
assert CartaDSDossier.objects.get(pk=dossier.id).cartads_cache_infos
def test_status_error(connector, app, cached_data):
CartaDSDossier.objects.all().delete()