0001-endpoints-add-check-for-base_adresse-endpoint-9416.patch
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 |
- |