From 22184d8a900de8ee0b105c03bfaf1ea399d1f9fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sun, 5 Jun 2016 20:16:59 +0200 Subject: [PATCH] general: add a generic connector view (#11200) --- passerelle/apps/base_adresse/models.py | 3 -- ...se_detail.html => baseadresse_detail.html} | 0 passerelle/apps/base_adresse/urls.py | 8 ++--- passerelle/apps/base_adresse/views.py | 12 ------- passerelle/apps/mobyt/models.py | 9 ------ passerelle/apps/mobyt/urls.py | 6 ---- passerelle/apps/mobyt/views.py | 8 ----- passerelle/apps/ovh/__init__.py | 31 ------------------- passerelle/apps/ovh/models.py | 10 ------ passerelle/apps/ovh/urls.py | 6 ---- passerelle/apps/ovh/views.py | 8 ----- passerelle/apps/oxyd/models.py | 9 ------ passerelle/apps/oxyd/urls.py | 6 ---- passerelle/apps/oxyd/views.py | 8 ----- passerelle/base/models.py | 4 +++ passerelle/contrib/stub_invoices/models.py | 3 -- .../stubinvoicesconnector_detail.html} | 0 passerelle/contrib/stub_invoices/urls.py | 2 -- passerelle/contrib/stub_invoices/views.py | 5 --- passerelle/urls.py | 4 ++- passerelle/views.py | 7 ++++- 21 files changed, 15 insertions(+), 134 deletions(-) rename passerelle/apps/base_adresse/templates/base_adresse/{base_adresse_detail.html => baseadresse_detail.html} (100%) delete mode 100644 passerelle/apps/mobyt/urls.py delete mode 100644 passerelle/apps/mobyt/views.py delete mode 100644 passerelle/apps/ovh/urls.py delete mode 100644 passerelle/apps/ovh/views.py delete mode 100644 passerelle/apps/oxyd/urls.py delete mode 100644 passerelle/apps/oxyd/views.py rename passerelle/contrib/stub_invoices/templates/{passerelle/stub-invoices/detail.html => stub_invoices/stubinvoicesconnector_detail.html} (100%) diff --git a/passerelle/apps/base_adresse/models.py b/passerelle/apps/base_adresse/models.py index 5bb83bc9..54f4eb61 100644 --- a/passerelle/apps/base_adresse/models.py +++ b/passerelle/apps/base_adresse/models.py @@ -21,9 +21,6 @@ class BaseAdresse(BaseResource): class Meta: verbose_name = _('Base Adresse Web Service') - def get_absolute_url(self): - return reverse('base_adresse-view', kwargs={'slug': self.slug}) - @classmethod def get_icon_class(cls): return 'gis' diff --git a/passerelle/apps/base_adresse/templates/base_adresse/base_adresse_detail.html b/passerelle/apps/base_adresse/templates/base_adresse/baseadresse_detail.html similarity index 100% rename from passerelle/apps/base_adresse/templates/base_adresse/base_adresse_detail.html rename to passerelle/apps/base_adresse/templates/base_adresse/baseadresse_detail.html diff --git a/passerelle/apps/base_adresse/urls.py b/passerelle/apps/base_adresse/urls.py index 3805e579..402e8aed 100644 --- a/passerelle/apps/base_adresse/urls.py +++ b/passerelle/apps/base_adresse/urls.py @@ -1,11 +1,7 @@ -from django.views.decorators.csrf import csrf_exempt -from django.conf.urls import patterns, include, url +from django.conf.urls import patterns, url -from passerelle.urls_utils import decorated_includes, required, app_enabled - -from views import * +from views import SearchPathView urlpatterns = patterns('', - url(r'^(?P[\w,-]+)/$', BaseAdresseDetailView.as_view(), name='base_adresse-view'), url(r'^(?P[\w,-]+)/search/(?P.*)$', SearchPathView.as_view(), name='base_adresse-path-search'), ) diff --git a/passerelle/apps/base_adresse/views.py b/passerelle/apps/base_adresse/views.py index 23975f29..f82d0b52 100644 --- a/passerelle/apps/base_adresse/views.py +++ b/passerelle/apps/base_adresse/views.py @@ -1,16 +1,4 @@ -from django.views.generic.detail import DetailView from passerelle.views import GenericEndpointView -from .models import BaseAdresse - - -class BaseAdresseDetailView(DetailView): - model = BaseAdresse - template_name = 'base_adresse/base_adresse_detail.html' - - def get_context_data(self, **kwargs): - context = super(BaseAdresseDetailView, self).get_context_data(**kwargs) - return context - class SearchPathView(GenericEndpointView): def get_connector(self, **kwargs): diff --git a/passerelle/apps/mobyt/models.py b/passerelle/apps/mobyt/models.py index 4293b685..f67d0fc3 100644 --- a/passerelle/apps/mobyt/models.py +++ b/passerelle/apps/mobyt/models.py @@ -41,15 +41,6 @@ class MobytSMSGateway(BaseResource, SMSGatewayMixin): def get_icon_class(cls): return 'phone' - def get_absolute_url(self): - return reverse('mobyt-view', kwargs={'slug': self.slug}) - - def get_edit_url(self): - return reverse('edit-connector', kwargs={'connector': 'mobyt', 'slug': self.slug}) - - def get_delete_url(self): - return reverse('delete-connector', kwargs={'connector': 'mobyt', 'slug': self.slug}) - def send_msg(self, text, sender, destinations): """Send a SMS using the Mobyt provider""" # unfortunately it lacks a batch API... diff --git a/passerelle/apps/mobyt/urls.py b/passerelle/apps/mobyt/urls.py deleted file mode 100644 index 433ceff6..00000000 --- a/passerelle/apps/mobyt/urls.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.conf.urls import patterns, url -from views import * - -urlpatterns = patterns('', - url(r'^(?P[\w,-]+)/$', MobytDetailView.as_view(), name='mobyt-view'), -) diff --git a/passerelle/apps/mobyt/views.py b/passerelle/apps/mobyt/views.py deleted file mode 100644 index a985ecc1..00000000 --- a/passerelle/apps/mobyt/views.py +++ /dev/null @@ -1,8 +0,0 @@ -from passerelle.base.views import ResourceView - -from .models import MobytSMSGateway - - -class MobytDetailView(ResourceView): - model = MobytSMSGateway - template_name = 'passerelle/manage/messages_service_view.html' diff --git a/passerelle/apps/ovh/__init__.py b/passerelle/apps/ovh/__init__.py index bf23bbf6..e69de29b 100644 --- a/passerelle/apps/ovh/__init__.py +++ b/passerelle/apps/ovh/__init__.py @@ -1,31 +0,0 @@ -# passerelle - uniform access to multiple data sources and services -# 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 = 'ovh' - label = 'ovh' - - def get_after_urls(self): - from . import urls - return urls.urlpatterns - - def get_connector_model(self): - from . import models - return models.OVHSMSGateway - -default_app_config = 'ovh.AppConfig' diff --git a/passerelle/apps/ovh/models.py b/passerelle/apps/ovh/models.py index 31679c27..fe8162a1 100644 --- a/passerelle/apps/ovh/models.py +++ b/passerelle/apps/ovh/models.py @@ -4,7 +4,6 @@ import json from django.utils.translation import ugettext_lazy as _ from django.db import models -from django.core.urlresolvers import reverse from passerelle.base.models import BaseResource from passerelle.sms import SMSGatewayMixin @@ -47,15 +46,6 @@ class OVHSMSGateway(BaseResource, SMSGatewayMixin): def get_icon_class(cls): return 'phone' - def get_absolute_url(self): - return reverse('ovh-view', kwargs={'slug': self.slug}) - - def get_edit_url(self): - return reverse('edit-connector', kwargs={'connector': 'ovh', 'slug': self.slug}) - - def get_delete_url(self): - return reverse('delete-connector', kwargs={'connector': 'ovh', 'slug': self.slug}) - def send_msg(self, text, sender, destinations): """Send a SMS using the OVH provider""" # unfortunately it lacks a batch API... diff --git a/passerelle/apps/ovh/urls.py b/passerelle/apps/ovh/urls.py deleted file mode 100644 index 7f322fe0..00000000 --- a/passerelle/apps/ovh/urls.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.conf.urls import patterns, url -from views import * - -urlpatterns = patterns('', - url(r'^(?P[\w,-]+)/$', OvhDetailView.as_view(), name='ovh-view'), -) diff --git a/passerelle/apps/ovh/views.py b/passerelle/apps/ovh/views.py deleted file mode 100644 index a1ad8dc0..00000000 --- a/passerelle/apps/ovh/views.py +++ /dev/null @@ -1,8 +0,0 @@ -from passerelle.base.views import ResourceView - -from .models import OVHSMSGateway - - -class OvhDetailView(ResourceView): - model = OVHSMSGateway - template_name = 'passerelle/manage/messages_service_view.html' diff --git a/passerelle/apps/oxyd/models.py b/passerelle/apps/oxyd/models.py index 45a99fd4..5c60b0ee 100644 --- a/passerelle/apps/oxyd/models.py +++ b/passerelle/apps/oxyd/models.py @@ -29,15 +29,6 @@ class OxydSMSGateway(BaseResource, SMSGatewayMixin): def get_icon_class(cls): return 'phone' - def get_absolute_url(self): - return reverse('oxyd-view', kwargs={'slug': self.slug}) - - def get_edit_url(self): - return reverse('edit-connector', kwargs={'connector': 'oxyd', 'slug': self.slug}) - - def get_delete_url(self): - return reverse('delete-connector', kwargs={'connector': 'oxyd', 'slug': self.slug}) - def send_msg(self, text, sender, destinations): """Send a SMS using the Oxyd provider""" # unfortunately it lacks a batch API... diff --git a/passerelle/apps/oxyd/urls.py b/passerelle/apps/oxyd/urls.py deleted file mode 100644 index 7ddeef1a..00000000 --- a/passerelle/apps/oxyd/urls.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.conf.urls import patterns, url -from views import * - -urlpatterns = patterns('', - url(r'^(?P[\w,-]+)/$', OxydDetailView.as_view(), name='oxyd-view'), -) diff --git a/passerelle/apps/oxyd/views.py b/passerelle/apps/oxyd/views.py deleted file mode 100644 index a460a86f..00000000 --- a/passerelle/apps/oxyd/views.py +++ /dev/null @@ -1,8 +0,0 @@ -from passerelle.base.views import ResourceView - -from .models import OxydSMSGateway - - -class OxydDetailView(ResourceView): - model = OxydSMSGateway - template_name = 'passerelle/manage/messages_service_view.html' diff --git a/passerelle/base/models.py b/passerelle/base/models.py index 1a02cfd6..e6da6980 100644 --- a/passerelle/base/models.py +++ b/passerelle/base/models.py @@ -133,6 +133,10 @@ class BaseResource(models.Model): def get_connector_slug(cls): return cls._meta.app_label.replace('_', '-') + def get_absolute_url(self): + return reverse('view-connector', + kwargs={'connector': self.get_connector_slug(), 'slug': self.slug}) + @classmethod def get_add_url(cls): return reverse('create-connector', kwargs={'connector': cls.get_connector_slug()}) diff --git a/passerelle/contrib/stub_invoices/models.py b/passerelle/contrib/stub_invoices/models.py index 59dbd563..14a77db7 100644 --- a/passerelle/contrib/stub_invoices/models.py +++ b/passerelle/contrib/stub_invoices/models.py @@ -36,9 +36,6 @@ class StubInvoicesConnector(BaseResource): def get_icon_class(cls): return 'ressources' - def get_absolute_url(self): - return reverse('stub-invoices-view', kwargs={'slug': self.slug}) - # generate a serie of stub invoices invoices = {} for i in range(15): diff --git a/passerelle/contrib/stub_invoices/templates/passerelle/stub-invoices/detail.html b/passerelle/contrib/stub_invoices/templates/stub_invoices/stubinvoicesconnector_detail.html similarity index 100% rename from passerelle/contrib/stub_invoices/templates/passerelle/stub-invoices/detail.html rename to passerelle/contrib/stub_invoices/templates/stub_invoices/stubinvoicesconnector_detail.html diff --git a/passerelle/contrib/stub_invoices/urls.py b/passerelle/contrib/stub_invoices/urls.py index 4a8714e3..1326abf7 100644 --- a/passerelle/contrib/stub_invoices/urls.py +++ b/passerelle/contrib/stub_invoices/urls.py @@ -22,8 +22,6 @@ from .views import * urlpatterns = patterns('', - url(r'^(?P[\w,-]+)/$', StubInvoicesConnectorDetailView.as_view(), - name='stub-invoices-view'), url(r'^(?P[\w,-]+)/invoices/history/$', HistoryInvoicesView.as_view(), name='stub-invoices-invoices-history'), url(r'^(?P[\w,-]+)/invoices/$', InvoicesView.as_view(), diff --git a/passerelle/contrib/stub_invoices/views.py b/passerelle/contrib/stub_invoices/views.py index 1b1d2879..2be4d80c 100644 --- a/passerelle/contrib/stub_invoices/views.py +++ b/passerelle/contrib/stub_invoices/views.py @@ -28,11 +28,6 @@ from passerelle import utils from .models import StubInvoicesConnector -class StubInvoicesConnectorDetailView(DetailView): - model = StubInvoicesConnector - template_name = 'passerelle/stub-invoices/detail.html' - - class InvoicesView(DetailView): model = StubInvoicesConnector diff --git a/passerelle/urls.py b/passerelle/urls.py index e54e9490..b0ada8d9 100644 --- a/passerelle/urls.py +++ b/passerelle/urls.py @@ -8,7 +8,7 @@ from django.views.static import serve as static_serve from .views import (HomePageView, ManageView, ManageAddView, GenericCreateConnectorView, GenericDeleteConnectorView, - GenericEditConnectorView, GenericEndpointView, + GenericEditConnectorView, GenericEndpointView, GenericConnectorView, LEGACY_APPS_PATTERNS, LegacyPageView, login, logout) from .urls_utils import decorated_includes, required, app_enabled from .base.urls import access_urlpatterns @@ -85,6 +85,8 @@ urlpatterns += patterns('', ))))) urlpatterns += patterns('', + url(r'^(?P[\w,-]+)/(?P[\w,-]+)/$', + GenericConnectorView.as_view(), name='view-connector'), url(r'^(?P[\w,-]+)/(?P[\w,-]+)/(?P[\w,-]+)$', GenericEndpointView.as_view(), name='generic-endpoint') ) diff --git a/passerelle/views.py b/passerelle/views.py index b8f30179..2ecac152 100644 --- a/passerelle/views.py +++ b/passerelle/views.py @@ -4,7 +4,8 @@ from django.contrib.auth import logout as auth_logout from django.contrib.auth import views as auth_views from django.http import HttpResponseBadRequest, HttpResponseRedirect, Http404 from django.views.decorators.csrf import csrf_exempt -from django.views.generic import RedirectView, View, TemplateView, CreateView, DeleteView, UpdateView +from django.views.generic import (RedirectView, View, TemplateView, CreateView, + DeleteView, UpdateView, DetailView) from django.views.generic.detail import SingleObjectMixin from django.conf import settings from django.db import models @@ -91,6 +92,10 @@ class GenericConnectorMixin(object): request, *args, **kwargs) +class GenericConnectorView(GenericConnectorMixin, DetailView): + pass + + class GenericCreateConnectorView(GenericConnectorMixin, CreateView): template_name = 'passerelle/manage/service_form.html'