From 01f926ca95c5e2b66cd69de844dad7bda569047e Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Fri, 10 Feb 2017 14:29:21 +0100 Subject: [PATCH] Django 1.0 support. see #1024 --- modoboa/admin/factories.py | 1 - .../management/commands/subcommands/_mx.py | 3 +- modoboa/admin/urls.py | 93 ++++++++++--------- modoboa/core/commands/templates/urls.py.tpl | 7 +- modoboa/core/context_processors.py | 2 +- modoboa/core/models.py | 8 +- modoboa/core/urls.py | 42 ++++----- modoboa/core/views/__init__.py | 17 ++++ modoboa/core/views/auth.py | 2 +- modoboa/core/views/dashboard.py | 2 +- modoboa/lib/web_utils.py | 3 +- modoboa/relaydomains/urls.py | 13 ++- modoboa/templates/layout_simple.html | 3 +- modoboa/templates/nlayout.html | 3 +- modoboa/templates/registration/login.html | 2 +- modoboa/urls.py | 47 ++++------ modoboa/urls_api.py | 10 +- requirements.txt | 8 +- 18 files changed, 134 insertions(+), 132 deletions(-) diff --git a/modoboa/admin/factories.py b/modoboa/admin/factories.py index 29eccfeca..8a3272eb9 100644 --- a/modoboa/admin/factories.py +++ b/modoboa/admin/factories.py @@ -43,7 +43,6 @@ class MailboxFactory(PermissionFactory): domain = factory.SubFactory(DomainFactory) user = factory.SubFactory(UserFactory) quota = 10 - enabled = True class AliasRecipientFactory(factory.django.DjangoModelFactory): diff --git a/modoboa/admin/management/commands/subcommands/_mx.py b/modoboa/admin/management/commands/subcommands/_mx.py index e559daf14..38cac067f 100644 --- a/modoboa/admin/management/commands/subcommands/_mx.py +++ b/modoboa/admin/management/commands/subcommands/_mx.py @@ -14,6 +14,7 @@ from django.core.management.base import BaseCommand from django.template.loader import render_to_string from django.utils.functional import cached_property from django.utils.translation import ugettext as _ +from django.utils import timezone from modoboa.admin import constants from modoboa.admin import models @@ -72,7 +73,7 @@ class CheckMXRecords(BaseCommand): DNS queries are not performed while `ttl` (in seconds) is still valid. """ - now = datetime.now() + now = timezone.now() records = models.MXRecord.objects.filter(domain=domain, updated__gt=now) if records.exists(): diff --git a/modoboa/admin/urls.py b/modoboa/admin/urls.py index 0398485ed..9ef0bde9e 100644 --- a/modoboa/admin/urls.py +++ b/modoboa/admin/urls.py @@ -1,71 +1,76 @@ """Admin urls.""" -from django.conf.urls import patterns, url +from django.conf.urls import url from . import views +from .views import import_ as import_views +from .views import alias as alias_views +from .views import domain as domain_views +from .views import export as export_views +from .views import identity as identity_views -urlpatterns = patterns( - 'modoboa.admin.views.domain', - - url(r'^$', 'index', name="index"), - url(r'^domains/$', 'domains', name="domain_list"), +urlpatterns = [ + url(r'^$', domain_views.index, name="index"), + url(r'^domains/$', domain_views.domains, name="domain_list"), url(r'^domains/(?P\d+)/$', views.DomainDetailView.as_view(), name="domain_detail"), url(r'^domains/(?P\d+)/dnsbl/$', views.DNSBLDomainDetailView.as_view(), name="dnsbl_domain_detail"), url(r'^domains/(?P\d+)/mx/$', views.MXDomainDetailView.as_view(), name="mx_domain_detail"), - url(r'^domains/list/$', '_domains', name="_domain_list"), - url(r'^domains/flatlist/$', 'domains_list', name="domain_flat_list"), - url(r'^domains/new/', 'newdomain', name='domain_add'), - url(r'^domains/(?P\d+)/edit/$', 'editdomain', + url(r'^domains/list/$', domain_views._domains, name="_domain_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\d+)/edit/$', domain_views.editdomain, name="domain_change"), - url(r'^domains/(?P\d+)/delete/$', 'deldomain', + url(r'^domains/(?P\d+)/delete/$', domain_views.deldomain, name="domain_delete"), -) +] -urlpatterns += patterns( - 'modoboa.admin.views.identity', - - url(r'^permissions/remove/$', 'remove_permission', +urlpatterns += [ + url(r'^permissions/remove/$', identity_views.remove_permission, name="permission_remove"), - url(r'^identities/$', 'identities', name="identity_list"), - url(r'^identities/list/$', '_identities', name="_identity_list"), - url(r'^identities/quotas/$', 'list_quotas', name="quota_list"), - url(r'^identities/page/$', 'get_next_page', name="identity_page"), + 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="quota_list"), + url(r'^identities/page/$', identity_views.get_next_page, + name="identity_page"), - url(r'^accounts/list/$', 'accounts_list', name="account_list"), - url(r'^accounts/new/$', 'newaccount', name="account_add"), + 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\d+)/$', views.AccountDetailView.as_view(), name="account_detail"), - url(r'^accounts/(?P\d+)/edit/$', 'editaccount', + url(r'^accounts/(?P\d+)/edit/$', identity_views.editaccount, name="account_change"), - url(r'^accounts/(?P\d+)/delete/$', 'delaccount', + url(r'^accounts/(?P\d+)/delete/$', identity_views.delaccount, name="account_delete"), -) +] -urlpatterns += patterns( - 'modoboa.admin.views.alias', - - url(r'^aliases/new/$', 'newalias', name="alias_add"), +urlpatterns += [ + url(r'^aliases/new/$', alias_views.newalias, name="alias_add"), url(r'^aliases/(?P\d+)/$', views.AliasDetailView.as_view(), name="alias_detail"), - url(r'^aliases/(?P\d+)/edit/$', 'editalias', name="alias_change"), - url(r'^aliases/delete/$', 'delalias', name="alias_delete"), -) + url(r'^aliases/(?P\d+)/edit/$', alias_views.editalias, + name="alias_change"), + url(r'^aliases/delete/$', alias_views.delalias, name="alias_delete"), +] -urlpatterns += patterns( - 'modoboa.admin.views.import_', +urlpatterns += [ + url(r'^domains/import/$', import_views.import_domains, + name="domain_import"), + url(r'^identities/import/$', import_views.import_identities, + name="identity_import"), +] - url(r'^domains/import/$', 'import_domains', name="domain_import"), - url(r'^identities/import/$', 'import_identities', name="identity_import"), -) - -urlpatterns += patterns( - 'modoboa.admin.views.export', - - url(r'^domains/export/$', 'export_domains', name="domain_export"), - url(r'^identities/export/$', 'export_identities', name="identity_export"), -) +urlpatterns += [ + url(r'^domains/export/$', export_views.export_domains, + name="domain_export"), + url(r'^identities/export/$', export_views.export_identities, + name="identity_export"), +] diff --git a/modoboa/core/commands/templates/urls.py.tpl b/modoboa/core/commands/templates/urls.py.tpl index e30de1ed4..1a4d5cea7 100644 --- a/modoboa/core/commands/templates/urls.py.tpl +++ b/modoboa/core/commands/templates/urls.py.tpl @@ -1,6 +1,5 @@ -from django.conf.urls import patterns, include, url +from django.conf.urls import include, url -urlpatterns = patterns( - '', +urlpatterns = [ url(r'', include('modoboa.urls')), -) +] diff --git a/modoboa/core/context_processors.py b/modoboa/core/context_processors.py index d3e3d3690..7c081699c 100644 --- a/modoboa/core/context_processors.py +++ b/modoboa/core/context_processors.py @@ -5,7 +5,7 @@ from . import signals def top_notifications(request): """A context processor to include top notifications.""" - if request.user.is_anonymous(): + if request.user.is_anonymous: return {} interval = request.localconfig.parameters.get_value( "top_notifications_check_interval") diff --git a/modoboa/core/models.py b/modoboa/core/models.py index 5a987623e..648fc93a9 100644 --- a/modoboa/core/models.py +++ b/modoboa/core/models.py @@ -168,13 +168,15 @@ class User(PermissionsMixin): def natural_key(self): return (self.get_username(),) + @property def is_anonymous(self): - """ - Always returns False. This is a way of comparing User objects to - anonymous users. + """Always returns False. + + This is a way of comparing User objects to anonymous users. """ return False + @property def is_authenticated(self): """ Always return True. This is a way to tell if the user has been diff --git a/modoboa/core/urls.py b/modoboa/core/urls.py index 39f5b53b3..1d086effd 100644 --- a/modoboa/core/urls.py +++ b/modoboa/core/urls.py @@ -1,38 +1,28 @@ """Core urls.""" -from django.conf.urls import patterns, url +from django.conf.urls import url from . import views -urlpatterns = patterns( - '', - +urlpatterns = [ url(r'^$', views.RootDispatchView.as_view(), name="root"), url(r'^dashboard/$', views.DashboardView.as_view(), name="dashboard"), - url(r'^accounts/login/$', 'modoboa.core.views.auth.dologin', - name="login"), - url(r'^accounts/logout/$', 'modoboa.core.views.auth.dologout', - name="logout"), + url(r'^accounts/login/$', views.dologin, name="login"), + url(r'^accounts/logout/$', views.dologout, name="logout"), - url(r'^core/$', 'modoboa.core.views.admin.viewsettings', - name="index"), - url(r'^core/parameters/$', 'modoboa.core.views.admin.parameters', - name="parameters"), - url(r'^core/info/$', 'modoboa.core.views.admin.information', - name="information"), - url(r'^core/logs/$', 'modoboa.core.views.admin.logs', name="log_list"), - url(r'^core/logs/page/$', 'modoboa.core.views.admin.logs_page', - name="logs_page"), + 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/$', - 'modoboa.core.views.admin.check_top_notifications', - name='top_notifications_check'), + views.check_top_notifications, + name="top_notifications_check"), - url(r'^user/$', 'modoboa.core.views.user.index', name="user_index"), - url(r'^user/preferences/$', 'modoboa.core.views.user.preferences', + url(r'^user/$', views.index, name="user_index"), + url(r'^user/preferences/$', views.preferences, name="user_preferences"), - url(r'^user/profile/$', 'modoboa.core.views.user.profile', - name="user_profile"), - url(r'^user/api/$', 'modoboa.core.views.user.api_access', - name="user_api_access"), -) + url(r'^user/profile/$', views.profile, name="user_profile"), + url(r'^user/api/$', views.api_access, name="user_api_access"), +] diff --git a/modoboa/core/views/__init__.py b/modoboa/core/views/__init__.py index d674802fe..6df7980e4 100644 --- a/modoboa/core/views/__init__.py +++ b/modoboa/core/views/__init__.py @@ -1,9 +1,26 @@ """Core views.""" +from .admin import ( + check_top_notifications, information, logs, logs_page, parameters, + viewsettings) +from .auth import dologin, dologout from .base import RootDispatchView from .dashboard import DashboardView +from .user import api_access, index, preferences, profile __all__ = [ "DashboardView", "RootDispatchView", + "api_access", + "check_top_notifications", + "dologin", + "dologout", + "index", + "information", + "logs", + "logs_page", + "parameters", + "preferences", + "profile", + "viewsettings", ] diff --git a/modoboa/core/views/auth.py b/modoboa/core/views/auth.py index 5f7507fc3..89a6a271b 100644 --- a/modoboa/core/views/auth.py +++ b/modoboa/core/views/auth.py @@ -74,7 +74,7 @@ dologin = never_cache(dologin) def dologout(request): """Logout current user.""" - if not request.user.is_anonymous(): + if not request.user.is_anonymous: signals.user_logout.send(sender="dologout", request=request) logger = logging.getLogger("modoboa.auth") logger.info(_("User {} logged out").format(request.user.username)) diff --git a/modoboa/core/views/dashboard.py b/modoboa/core/views/dashboard.py index 25cfa8d99..2ed925deb 100644 --- a/modoboa/core/views/dashboard.py +++ b/modoboa/core/views/dashboard.py @@ -17,7 +17,7 @@ class DashboardView(auth_mixins.AccessMixin, generic.TemplateView): def dispatch(self, request, *args, **kwargs): """Check if user can access dashboard.""" - if not request.user.is_authenticated() or not request.user.is_admin: + if not request.user.is_authenticated or not request.user.is_admin: return self.handle_no_permission() return super(DashboardView, self).dispatch(request, *args, **kwargs) diff --git a/modoboa/lib/web_utils.py b/modoboa/lib/web_utils.py index e83136c52..9921a85ec 100644 --- a/modoboa/lib/web_utils.py +++ b/modoboa/lib/web_utils.py @@ -21,8 +21,7 @@ def _render_to_string(request, tpl, user_context): Just a wrapper which automatically adds a RequestContext instance (useful to use settings variables like STATIC_URL inside templates) """ - return render_to_string(tpl, user_context, - context_instance=template.RequestContext(request)) + return render_to_string(tpl, user_context, request) def _render_error(request, errortpl="error", user_context=None): diff --git a/modoboa/relaydomains/urls.py b/modoboa/relaydomains/urls.py index 8e4c5b10f..e8dcd2cbd 100644 --- a/modoboa/relaydomains/urls.py +++ b/modoboa/relaydomains/urls.py @@ -1,8 +1,11 @@ -from django.conf.urls import patterns, url +"""Relay domains urls.""" -urlpatterns = patterns( - 'modoboa.relaydomains.views', +from django.conf.urls import url - url(r'^scan_services/$', 'scan_for_services', +from . import views + + +urlpatterns = [ + url(r'^scan_services/$', views.scan_for_services, name="service_scan"), -) +] diff --git a/modoboa/templates/layout_simple.html b/modoboa/templates/layout_simple.html index 5848b087c..079f4e42c 100644 --- a/modoboa/templates/layout_simple.html +++ b/modoboa/templates/layout_simple.html @@ -8,8 +8,7 @@ - {% url "django.views.i18n.javascript_catalog" as catalog_url %} - +