Projet

Général

Profil

0001-endpoints-add-check-for-base_adresse-endpoint-9416.patch

Jean-Baptiste Jaillet, 29 septembre 2016 19:05

Télécharger (4,02 ko)

Voir les différences:

Subject: [PATCH] endpoints: add check for base_adresse endpoint (#9416)

 passerelle/apps/base_adresse/models.py             | 29 +++++++++++++++++++++-
 .../base/migrations/0003_endpointcheckping.py      | 23 +++++++++++++++++
 passerelle/base/models.py                          |  6 +++++
 3 files changed, 57 insertions(+), 1 deletion(-)
 create mode 100644 passerelle/base/migrations/0003_endpointcheckping.py
passerelle/apps/base_adresse/models.py
1 1
import urlparse
2 2
import unicodedata
3
import json
3 4

  
4 5
from django.db import models
5 6
from django.utils.http import urlencode
6 7
from django.utils.translation import ugettext_lazy as _
7 8
from django.utils import timezone
8 9

  
9
from passerelle.base.models import BaseResource
10
from passerelle.base.models import BaseResource, EndpointCheckPing
10 11
from passerelle.utils.api import endpoint
11 12

  
12 13

  
14
class BaseAdrException(Exception):
15
    http_status = 200
16
    log_error = False
17

  
18

  
13 19
class BaseAdresse(BaseResource):
14 20
    service_url = models.CharField(
15 21
        max_length=128, blank=False,
......
95 101
        return result
96 102

  
97 103
    @endpoint(serializer_type='json-api')
104
    def ping(self, request, **kwargs):
105
        q = kwargs.get('q') if kwargs.get('q') else '?q=169 rue du chateau, paris'
106
        q += '&limit=1'
107
        res = self.requests.request('GET', self.service_url + 'search/' + q)
108
        checker = EndpointCheckPing.objects.get_or_create(connector=self.slug)[0]
109

  
110
        if res.status_code != 200:
111
            checker.break_begin = timezone.now()
112
            checker.save()
113
            raise BaseAdrException('Service not available.')
114

  
115
        result = {'ping': 'pong'}
116
        result['content'] = json.loads(res.content)
117

  
118
        if checker.break_begin:
119
            checker.break_end = timezone.now()
120
            checker.save()
121

  
122
        return result
123

  
124
    @endpoint(serializer_type='json-api')
98 125
    def streets(self, request, zipcode=None, q=None):
99 126
        result = []
100 127
        streets = StreetModel.objects.all()
passerelle/base/migrations/0003_endpointcheckping.py
1
# -*- coding: utf-8 -*-
2
from __future__ import unicode_literals
3

  
4
from django.db import models, migrations
5

  
6

  
7
class Migration(migrations.Migration):
8

  
9
    dependencies = [
10
        ('base', '0002_auto_20151009_0326'),
11
    ]
12

  
13
    operations = [
14
        migrations.CreateModel(
15
            name='EndpointCheckPing',
16
            fields=[
17
                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
18
                ('connector', models.CharField(max_length=50, verbose_name=b"Connector's slug")),
19
                ('break_begin', models.DateTimeField(null=True, verbose_name=b'Begining of break')),
20
                ('break_end', models.DateTimeField(null=True, verbose_name=b'End of break')),
21
            ],
22
        ),
23
    ]
passerelle/base/models.py
169 169
    def __unicode__(self):
170 170
        return '%s (on %s <%s>) (for %s)' % (self.codename,
171 171
                self.resource_type, self.resource_pk, self.apiuser)
172

  
173

  
174
class EndpointCheckPing(models.Model):
175
    connector = models.CharField(max_length=50, verbose_name='Connector\'s slug')
176
    break_begin = models.DateTimeField(verbose_name='Begining of break', null=True)
177
    break_end = models.DateTimeField(verbose_name='End of break', null=True)
172
-