Bump Django to 2.0 and simplify URL routing syntax

See: https://docs.djangoproject.com/en/stable/releases/2.0/

The only required changes are - as reported in #1466 - the addition of
`app_name` in `urls.py` for URL namespaces.
This commit is contained in:
Jérôme Lebleu
2020-01-13 09:55:17 +01:00
parent c4b2decff2
commit 817015688d
8 changed files with 137 additions and 113 deletions
+55 -53
View File
@@ -1,6 +1,6 @@
"""Admin urls."""
from django.conf.urls import url
from django.urls import path
from . import views
from .views import (
@@ -8,71 +8,73 @@ from .views import (
identity as identity_views, import_ as import_views
)
app_name = "admin"
urlpatterns = [
url(r'^$', domain_views.index, name="index"),
url(r'^domains/$', domain_views.domains, name="domain_list"),
url(r'^domains/(?P<pk>\d+)/$', views.DomainDetailView.as_view(),
name="domain_detail"),
url(r'^domains/(?P<pk>\d+)/dnsbl/$', views.DNSBLDomainDetailView.as_view(),
name="dnsbl_domain_detail"),
url(r'^domains/(?P<pk>\d+)/mx/$', views.MXDomainDetailView.as_view(),
name="mx_domain_detail"),
url(r'^domains/list/$', domain_views._domains, name="_domain_list"),
url(r'^domains/quotas/$', domain_views.list_quotas,
name="domain_quota_list"),
url(r'^domains/flatlist/$', domain_views.domains_list,
name="domain_flat_list"),
url(r'^domains/new/', domain_views.newdomain, name="domain_add"),
url(r'^domains/(?P<dom_id>\d+)/edit/$', domain_views.editdomain,
name="domain_change"),
url(r'^domains/(?P<dom_id>\d+)/delete/$', domain_views.deldomain,
name="domain_delete"),
url(r'^domains/page/$', domain_views.get_next_page,
name="domain_page"),
path('', domain_views.index, name="index"),
path('domains/', domain_views.domains, name="domain_list"),
path('domains/<int:pk>/', views.DomainDetailView.as_view(),
name="domain_detail"),
path('domains/<int:pk>/dnsbl/', views.DNSBLDomainDetailView.as_view(),
name="dnsbl_domain_detail"),
path('domains/<int:pk>/mx/', views.MXDomainDetailView.as_view(),
name="mx_domain_detail"),
path('domains/list/', domain_views._domains, name="_domain_list"),
path('domains/quotas/', domain_views.list_quotas,
name="domain_quota_list"),
path('domains/flatlist/', domain_views.domains_list,
name="domain_flat_list"),
path('domains/new/', domain_views.newdomain, name="domain_add"),
path('domains/<int:dom_id>/edit/', domain_views.editdomain,
name="domain_change"),
path('domains/<int:dom_id>/delete/', domain_views.deldomain,
name="domain_delete"),
path('domains/page/', domain_views.get_next_page,
name="domain_page"),
]
urlpatterns += [
url(r'^permissions/remove/$', identity_views.remove_permission,
name="permission_remove"),
path('permissions/remove/', identity_views.remove_permission,
name="permission_remove"),
url(r'^identities/$', identity_views.identities, name="identity_list"),
url(r'^identities/list/$', identity_views._identities,
name="_identity_list"),
url(r'^identities/quotas/$', identity_views.list_quotas,
name="identity_quota_list"),
url(r'^identities/page/$', identity_views.get_next_page,
name="identity_page"),
path('identities/', identity_views.identities, name="identity_list"),
path('identities/list/', identity_views._identities,
name="_identity_list"),
path('identities/quotas/', identity_views.list_quotas,
name="identity_quota_list"),
path('identities/page/', identity_views.get_next_page,
name="identity_page"),
url(r'^accounts/list/$', identity_views.accounts_list,
name="account_list"),
url(r'^accounts/new/$', identity_views.newaccount, name="account_add"),
url(r'^accounts/(?P<pk>\d+)/$', views.AccountDetailView.as_view(),
name="account_detail"),
url(r'^accounts/(?P<pk>\d+)/edit/$', identity_views.editaccount,
name="account_change"),
url(r'^accounts/(?P<pk>\d+)/delete/$', identity_views.delaccount,
name="account_delete"),
path('accounts/list/', identity_views.accounts_list,
name="account_list"),
path('accounts/new/', identity_views.newaccount, name="account_add"),
path('accounts/<int:pk>/', views.AccountDetailView.as_view(),
name="account_detail"),
path('accounts/<int:pk>/edit/', identity_views.editaccount,
name="account_change"),
path('accounts/<int:pk>/delete/', identity_views.delaccount,
name="account_delete"),
]
urlpatterns += [
url(r'^aliases/new/$', alias_views.newalias, name="alias_add"),
url(r'^aliases/(?P<pk>\d+)/$', views.AliasDetailView.as_view(),
name="alias_detail"),
url(r'^aliases/(?P<alid>\d+)/edit/$', alias_views.editalias,
name="alias_change"),
url(r'^aliases/delete/$', alias_views.delalias, name="alias_delete"),
path('aliases/new/', alias_views.newalias, name="alias_add"),
path('aliases/<int:pk>/', views.AliasDetailView.as_view(),
name="alias_detail"),
path('aliases/<int:alid>/edit/', alias_views.editalias,
name="alias_change"),
path('aliases/delete/', alias_views.delalias, name="alias_delete"),
]
urlpatterns += [
url(r'^domains/import/$', import_views.import_domains,
name="domain_import"),
url(r'^identities/import/$', import_views.import_identities,
name="identity_import"),
path('domains/import/', import_views.import_domains,
name="domain_import"),
path('identities/import/', import_views.import_identities,
name="identity_import"),
]
urlpatterns += [
url(r'^domains/export/$', export_views.export_domains,
name="domain_export"),
url(r'^identities/export/$', export_views.export_identities,
name="identity_export"),
path('domains/export/', export_views.export_domains,
name="domain_export"),
path('identities/export/', export_views.export_identities,
name="identity_export"),
]
+1 -3
View File
@@ -103,17 +103,15 @@ class ExtensionsPool(object):
result = []
for ext_name in list(self.extensions.keys()):
ext = self.get_extension(ext_name)
options = {}
if category == "api":
root = ""
pattern = "{}.urls_api"
else:
root = r"^{}/".format(ext.get_url())
options.update({"namespace": ext_name})
pattern = "{}.urls"
try:
result.append(
url(root, include(pattern.format(ext_name), **options))
url(root, include(pattern.format(ext_name)))
)
except ImportError:
# No urls for this extension
@@ -0,0 +1,18 @@
# Generated by Django 2.0.13 on 2020-01-04 17:14
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0017_auto_20190705_1045'),
]
operations = [
migrations.AlterField(
model_name='user',
name='last_name',
field=models.CharField(blank=True, max_length=150, verbose_name='last name'),
),
]
+20 -18
View File
@@ -1,28 +1,30 @@
"""Core urls."""
from django.conf.urls import url
from django.urls import path
from . import views
app_name = "core"
urlpatterns = [
url(r'^$', views.RootDispatchView.as_view(), name="root"),
url(r'^dashboard/$', views.DashboardView.as_view(), name="dashboard"),
path('', views.RootDispatchView.as_view(), name="root"),
path('dashboard/', views.DashboardView.as_view(), name="dashboard"),
url(r'^accounts/login/$', views.dologin, name="login"),
url(r'^accounts/logout/$', views.dologout, name="logout"),
path('accounts/login/', views.dologin, name="login"),
path('accounts/logout/', views.dologout, name="logout"),
url(r'^core/$', views.viewsettings, name="index"),
url(r'^core/parameters/$', views.parameters, name="parameters"),
url(r'^core/info/$', views.information, name="information"),
url(r'^core/logs/$', views.logs, name="log_list"),
url(r'^core/logs/page/$', views.logs_page, name="logs_page"),
url(r'^core/top_notifications/check/$',
views.check_top_notifications,
name="top_notifications_check"),
path('core/', views.viewsettings, name="index"),
path('core/parameters/', views.parameters, name="parameters"),
path('core/info/', views.information, name="information"),
path('core/logs/', views.logs, name="log_list"),
path('core/logs/page/', views.logs_page, name="logs_page"),
path('core/top_notifications/check/',
views.check_top_notifications,
name="top_notifications_check"),
url(r'^user/$', views.index, name="user_index"),
url(r'^user/preferences/$', views.preferences,
name="user_preferences"),
url(r'^user/profile/$', views.profile, name="user_profile"),
url(r'^user/api/$', views.api_access, name="user_api_access"),
path('user/', views.index, name="user_index"),
path('user/preferences/', views.preferences,
name="user_preferences"),
path('user/profile/', views.profile, name="user_profile"),
path('user/api/', views.api_access, name="user_api_access"),
]
+10 -9
View File
@@ -1,17 +1,18 @@
"""App related urls."""
from django.conf.urls import url
from django.urls import path
from . import views
app_name = "dnstools"
urlpatterns = [
url(r'^dnsrecords/(?P<pk>\d+)/$', views.DNSRecordDetailView.as_view(),
name="dns_record_detail"),
url(r'^dnsrecords/autoconfig/(?P<pk>\d+)/$',
views.AutoConfigRecordsStatusView.as_view(),
name="autoconfig_records_status"),
url(r'^configuration/(?P<pk>\d+)/$',
views.DomainDNSConfigurationView.as_view(),
name="domain_dns_configuration"),
path('dnsrecords/<int:pk>/', views.DNSRecordDetailView.as_view(),
name="dns_record_detail"),
path('dnsrecords/autoconfig/<int:pk>/',
views.AutoConfigRecordsStatusView.as_view(),
name="autoconfig_records_status"),
path('configuration/<int:pk>/',
views.DomainDNSConfigurationView.as_view(),
name="domain_dns_configuration"),
]
+25 -23
View File
@@ -3,39 +3,41 @@ from functools import reduce
from ckeditor_uploader import views as cku_views
from django.conf import settings
from django.conf.urls import include, url
from django.contrib.auth import views as auth_views
from django.contrib.auth.decorators import login_required
from django.urls import include, path
from django.views.generic import TemplateView
from django.views.i18n import JavaScriptCatalog
from rest_framework.renderers import JSONOpenAPIRenderer
from rest_framework.schemas import get_schema_view
from modoboa.admin.views.user import forward
from modoboa.admin.views import user as user_views
from modoboa.core import signals as core_signals, views as core_views
from modoboa.core.extensions import exts_pool
urlpatterns = [
url(r'^jsi18n/$', JavaScriptCatalog.as_view(), name="javascript-catalog"),
url(r'^ckeditor/upload/', login_required(cku_views.upload),
name="ckeditor_upload"),
url(r'^ckeditor/browse/', login_required(cku_views.browse),
name="ckeditor_browse"),
url("", include("modoboa.core.urls", namespace="core")),
url("^user/forward/", forward, name="user_forward"),
url("admin/", include("modoboa.admin.urls", namespace="admin")),
url("dnstools/", include("modoboa.dnstools.urls", namespace="dnstools")),
# No namespace
url(r'^accounts/password_reset/$', core_views.password_reset,
name="password_reset"),
url(r'^accounts/password_reset/done/$', auth_views.password_reset_done,
name="password_reset_done"),
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', # noqa
auth_views.password_reset_confirm, name="password_reset_confirm"),
url(r'^reset/done/$', auth_views.password_reset_complete,
name="password_reset_complete"),
path('jsi18n/', JavaScriptCatalog.as_view(), name="javascript-catalog"),
path('ckeditor/upload/', login_required(cku_views.upload),
name="ckeditor_upload"),
path('ckeditor/browse/', login_required(cku_views.browse),
name="ckeditor_browse"),
path('', include("modoboa.core.urls")),
path('admin/', include("modoboa.admin.urls")),
path('dnstools/', include("modoboa.dnstools.urls")),
path('user/forward/', user_views.forward, name="user_forward"),
path('accounts/password_reset/', core_views.password_reset,
name="password_reset"),
path('accounts/password_reset/done/', auth_views.password_reset_done,
name="password_reset_done"),
path('reset/<uidb64>/<token>/', auth_views.password_reset_confirm,
name="password_reset_confirm"),
path('reset/done/', auth_views.password_reset_complete,
name="password_reset_complete"),
]
exts_pool.load_all()
@@ -55,10 +57,10 @@ schema_view = get_schema_view(
renderer_classes=[JSONOpenAPIRenderer],
)
urlpatterns += [
url(r'^docs/openapi.json$', schema_view, name="openapi_schema"),
url(r'^docs/api/', login_required(
path('docs/openapi.json', schema_view, name="openapi_schema"),
path('docs/api/', login_required(
TemplateView.as_view(template_name="swagger-ui.html"))),
url("^api/v1/", include("modoboa.urls_api", namespace="api")),
path('api/v1/', include("modoboa.urls_api")),
]
if settings.DEBUG:
+7 -6
View File
@@ -1,12 +1,13 @@
"""External API urls."""
from django.conf.urls import include, url
from django.urls import include, path
from modoboa.core.extensions import exts_pool
app_name = "api"
urlpatterns = [
url("", include("modoboa.admin.urls_api")),
url("", include("modoboa.limits.urls_api")),
url("", include("modoboa.relaydomains.urls_api")),
]
urlpatterns += exts_pool.get_urls(category="api")
path('', include("modoboa.admin.urls_api")),
path('', include("modoboa.limits.urls_api")),
path('', include("modoboa.relaydomains.urls_api")),
] + exts_pool.get_urls(category="api")
+1 -1
View File
@@ -1,4 +1,4 @@
django>=1.11.8,<=1.11.99
django>=2.0,<2.1
django-braces==1.14.0
django-ckeditor==5.8.0
django-reversion==3.0.5