diff --git a/passerelle_imio_liege_lisrue/__init__.py b/passerelle_imio_liege_lisrue/__init__.py
index 2f24a1d..e69de29 100644
--- a/passerelle_imio_liege_lisrue/__init__.py
+++ b/passerelle_imio_liege_lisrue/__init__.py
@@ -1,28 +0,0 @@
-# passerelle-imio-liege-lisrue - passerelle connector to Lisrue webservice
-# Copyright (C) 2016 Entr'ouvert
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-
-import django.apps
-
-class AppConfig(django.apps.AppConfig):
-
- name = 'passerelle_imio_liege_lisrue'
- verbose_name = 'Liege Lisrue'
-
- def get_after_urls(self):
- from . import urls
- return urls.urlpatterns
-
-default_app_config = 'passerelle_imio_liege_lisrue.AppConfig'
diff --git a/passerelle_imio_liege_lisrue/forms.py b/passerelle_imio_liege_lisrue/forms.py
deleted file mode 100644
index 9f13e33..0000000
--- a/passerelle_imio_liege_lisrue/forms.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# passerelle-imio-liege-lisrue - passerelle connector to Lisrue webservice
-# Copyright (C) 2016 Entr'ouvert
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-
-from django.utils.text import slugify
-from django import forms
-
-from .models import ImioLiegeLisrue
-
-class ImioLiegeLisrueForm(forms.ModelForm):
- class Meta:
- model = ImioLiegeLisrue
- exclude = ('slug', 'users')
-
- def save(self, commit=True):
- if not self.instance.slug:
- self.instance.slug = slugify(self.instance.title)
- return super(ImioLiegeLisrueForm, self).save(commit=commit)
diff --git a/passerelle_imio_liege_lisrue/models.py b/passerelle_imio_liege_lisrue/models.py
index ab2ea28..8dbf18a 100644
--- a/passerelle_imio_liege_lisrue/models.py
+++ b/passerelle_imio_liege_lisrue/models.py
@@ -14,6 +14,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
+import unicodedata
import urlparse
import requests
@@ -22,6 +23,7 @@ from django.db import models
from django.utils.translation import ugettext_lazy as _
from passerelle.base.models import BaseResource
+from passerelle.utils.api import endpoint
class ImioLiegeLisrue(BaseResource):
@@ -38,13 +40,6 @@ class ImioLiegeLisrue(BaseResource):
class Meta:
verbose_name = _('Liege Lisrue Service')
- def get_absolute_url(self):
- return reverse('imio-liege-lisrue-view', kwargs={'slug': self.slug})
-
- @classmethod
- def get_add_url(cls):
- return reverse('imio-liege-lisrue-add')
-
@classmethod
def get_verbose_name(cls):
return cls._meta.verbose_name
@@ -52,3 +47,44 @@ class ImioLiegeLisrue(BaseResource):
@classmethod
def get_icon_class(cls):
return 'gis'
+
+ @classmethod
+ def get_connector_slug(cls):
+ return 'imio-liege-lisrue'
+
+ @endpoint()
+ def voies(self, request, q=None):
+ url = self.service_url
+ if self.include_all_of_belgium:
+ url += 'jsonlisrue/'
+ else:
+ url += 'jsonlisrue2/'
+
+ if q:
+ q = unicodedata.normalize('NFKD', request.GET['q']).encode('ascii', 'ignore')
+ url += q.lower()
+
+ result = requests.get(url, headers={'Accept': 'application/json'},
+ verify=self.verify_cert).json()
+ if isinstance(result['rues'], list):
+ lisrues = result['rues']
+ elif isinstance(result['rues'], dict) and 'return' in result['rues']:
+ lisrues = [result['rues']['return']]
+ else:
+ lisrues = []
+
+ streets = []
+ for item in lisrues:
+ if item.get('rue'):
+ street_label = item.get('rue')
+ elif item.get('libelleMinuscule'):
+ street_label = '%s %s' % (
+ item.get('particuleMinuscule') or '',
+ item.get('libelleMinuscule'))
+ else:
+ continue
+ streets.append({
+ 'id': item.get('codeRue'),
+ 'text': street_label.strip(),
+ })
+ return {'data': streets}
diff --git a/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/base.html b/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/base.html
deleted file mode 100644
index 6c10e11..0000000
--- a/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/base.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{% extends "passerelle/manage.html" %}
-
-{% block breadcrumb %}
-{{ block.super }}
-{% if object.id %}
-{{ object.title }}
-{% endif %}
-{% endblock %}
diff --git a/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/imioliegelisrue_confirm_delete.html b/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/imioliegelisrue_confirm_delete.html
deleted file mode 100644
index a24c185..0000000
--- a/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/imioliegelisrue_confirm_delete.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{% extends "passerelle_imio_liege_lisrue/base.html" %}
-{% load i18n %}
-
-{% block appbar %}
-
Lisrue - {{ object.title }}
-{% endblock %}
-
-{% block content %}
-
-{% endblock %}
diff --git a/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/imioliegelisrue_detail.html b/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/imioliegelisrue_detail.html
index 26f5b42..f1d7adb 100644
--- a/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/imioliegelisrue_detail.html
+++ b/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/imioliegelisrue_detail.html
@@ -1,44 +1,20 @@
-{% extends "passerelle_imio_liege_lisrue/base.html" %}
+{% extends "passerelle/manage/service_view.html" %}
{% load i18n passerelle %}
-{% block appbar %}
-Lisrue - {{ object.title }}
-{% if perms.passerelle_imio_liege_lisrue.change_passerelle_imio_liege_lisrue %}
-{% trans 'edit' %}
-{% endif %}
-{% if perms.passerelle_imio_liege_lisrue.delete_passerelle_imio_liege_lisrue %}
-{% trans 'delete' %}
-{% endif %}
-{% endblock %}
-
-{% block content %}
-
-Service URLĀ : {{ object.service_url }}
-
-
-
-
{% trans 'Endpoints' %}
+{% block endpoints %}
+{% url "generic-endpoint" connector="imio-liege-lisrue" slug=object.slug endpoint="voies" as voies_url %}
-
-
-{% if perms.base.view_accessright %}
-
-
{% trans "Security" %}
+{% endblock %}
+{% block security %}
{% trans 'Accessing the listings is open.' %}
-
-{% endif %}
-
-
-
{% endblock %}
diff --git a/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/imioliegelisrue_form.html b/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/imioliegelisrue_form.html
deleted file mode 100644
index 5cea4af..0000000
--- a/passerelle_imio_liege_lisrue/templates/passerelle_imio_liege_lisrue/imioliegelisrue_form.html
+++ /dev/null
@@ -1,34 +0,0 @@
-{% extends "passerelle_imio_liege_lisrue/base.html" %}
-{% load i18n %}
-
-{% block more-user-links %}
-{{ block.super }}
-{% if not object.id %}
-{% trans 'Add Liege Lisrue Connector' %}
-{% endif %}
-{% endblock %}
-
-{% block appbar %}
-Lisrue - {% if object.id %}{{ object.title }}{% else %}{% trans 'New' %}{% endif %}
-{% endblock %}
-
-{% block content %}
-
-
-
-{% endblock %}
diff --git a/passerelle_imio_liege_lisrue/urls.py b/passerelle_imio_liege_lisrue/urls.py
deleted file mode 100644
index 93b0750..0000000
--- a/passerelle_imio_liege_lisrue/urls.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# passerelle-imio-liege-lisrue - passerelle connector to Lisrue webservice
-# Copyright (C) 2016 Entr'ouvert
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-
-from django.conf.urls import patterns, include, url
-from django.contrib.auth.decorators import login_required
-
-from passerelle.urls_utils import decorated_includes, required, app_enabled
-
-from views import *
-
-
-public_urlpatterns = patterns('',
- url(r'^(?P[\w,-]+)/$', SigDetailView.as_view(), name='imio-liege-lisrue-view'),
-
- url(r'^(?P[\w,-]+)/voies/$', VoiesView.as_view(), name='imio-liege-lisrue-voies'),
-)
-
-management_urlpatterns = patterns('',
- url(r'^add$', SigCreateView.as_view(), name='imio-liege-lisrue-add'),
- url(r'^(?P[\w,-]+)/edit$', SigUpdateView.as_view(), name='imio-liege-lisrue-edit'),
- url(r'^(?P[\w,-]+)/delete$', SigDeleteView.as_view(), name='imio-liege-lisrue-delete'),
-)
-
-urlpatterns = required(
- app_enabled('passerelle_imio_liege_lisrue'),
- patterns('',
- url(r'^imio-liege-lisrue/', include(public_urlpatterns)),
- url(r'^manage/imio-liege-lisrue/',
- decorated_includes(login_required, include(management_urlpatterns))),
- )
-)
diff --git a/passerelle_imio_liege_lisrue/views.py b/passerelle_imio_liege_lisrue/views.py
deleted file mode 100644
index 9e9161e..0000000
--- a/passerelle_imio_liege_lisrue/views.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# passerelle-imio-liege-lisrue - passerelle connector to Lisrue webservice
-# Copyright (C) 2016 Entr'ouvert
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-
-import requests
-import unicodedata
-
-from django.views.generic.detail import SingleObjectMixin, DetailView
-from django.views.generic.edit import CreateView, UpdateView, DeleteView
-from django.views.generic.base import View, RedirectView
-from django.core.urlresolvers import reverse
-from django.http import HttpResponseBadRequest
-
-from passerelle import utils
-
-from .models import ImioLiegeLisrue
-from .forms import ImioLiegeLisrueForm
-
-class SigCreateView(CreateView):
- model = ImioLiegeLisrue
- form_class = ImioLiegeLisrueForm
- template_name = 'passerelle/manage/service_form.html'
-
-
-class SigUpdateView(UpdateView):
- model = ImioLiegeLisrue
- form_class = ImioLiegeLisrueForm
-
-
-class SigDeleteView(DeleteView):
- model = ImioLiegeLisrue
-
- def get_success_url(self):
- return reverse('manage-home')
-
-
-class SigDetailView(DetailView):
- model = ImioLiegeLisrue
-
-
-class VoiesView(View, SingleObjectMixin):
- model = ImioLiegeLisrue
-
- def get(self, request, *args, **kwargs):
- url = self.get_object().service_url
- if self.get_object().include_all_of_belgium:
- url += 'jsonlisrue/'
- else:
- url += 'jsonlisrue2/'
-
- if 'q' in request.GET and request.GET['q']:
- q = unicodedata.normalize('NFKD', request.GET['q']).encode('ascii', 'ignore')
- url += q.lower()
-
- result = requests.get(url, headers={'Accept': 'application/json'},
- verify=self.get_object().verify_cert).json()
- if isinstance(result['rues'], list):
- lisrues = result['rues']
- elif isinstance(result['rues'], dict) and 'return' in result['rues']:
- lisrues = [result['rues']['return']]
- else:
- lisrues = []
-
- streets = []
- for item in lisrues:
- if item.get('rue'):
- street_label = item.get('rue')
- elif item.get('libelleMinuscule'):
- street_label = '%s %s' % (
- item.get('particuleMinuscule') or '',
- item.get('libelleMinuscule'))
- else:
- continue
- streets.append({
- 'id': item.get('codeRue'),
- 'text': street_label.strip(),
- })
-
- return utils.response_for_json(request, {'data': streets})