updates for django 1.11 support

- MIDDLEWARE_CLASSES is replaced by MIDDLEWARE

- add MiddlewareMixin to modoboa middlewares

- on_delete will become a required parameter for ForeignKey()
  set it to the current default CASCADE

- on_delete will become a required parameter for OneToOneField()
  set it to the current default CASCADE

- reverse and reverse_lazy have moved to django.urls

- RadioChoiceInput widget has been removed, replace with HorizontalRadioSelect
This commit is contained in:
Andrew Fyfe
2017-12-19 00:50:53 +00:00
parent 3308c56480
commit 892160d5aa
55 changed files with 107 additions and 126 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ from collections import OrderedDict
from functools import reduce
from django import forms
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.http import QueryDict
from django.utils.translation import ugettext as _, ugettext_lazy
+1 -1
View File
@@ -5,7 +5,7 @@ from __future__ import unicode_literals
from functools import reduce
from django import forms
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.http import QueryDict
from django.utils.translation import ugettext as _, ugettext_lazy
from django.utils.encoding import force_text
+1 -1
View File
@@ -2,7 +2,7 @@
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.db.models import signals
from django.dispatch import receiver
from django.utils.translation import ugettext as _
+12 -12
View File
@@ -31,8 +31,8 @@ class Migration(migrations.Migration):
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('address', models.EmailField(max_length=75)),
('alias', models.ForeignKey(to='admin.Alias')),
('r_alias', models.ForeignKey(related_name='alias_recipient_aliases', blank=True, to='admin.Alias', null=True)),
('alias', models.ForeignKey(to='admin.Alias', on_delete=models.CASCADE)),
('r_alias', models.ForeignKey(related_name='alias_recipient_aliases', blank=True, to='admin.Alias', null=True, on_delete=models.CASCADE)),
],
options={
'db_table': 'modoboa_admin_aliasrecipient',
@@ -85,7 +85,7 @@ class Migration(migrations.Migration):
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('type', models.CharField(max_length=20, choices=[(b'rename', b'rename'), (b'delete', b'delete')])),
('argument', models.TextField()),
('mailbox', models.ForeignKey(blank=True, to='admin.Mailbox', null=True)),
('mailbox', models.ForeignKey(blank=True, to='admin.Mailbox', null=True, on_delete=models.CASCADE)),
],
options={
},
@@ -116,43 +116,43 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='mailbox',
name='dates',
field=models.ForeignKey(to='admin.ObjectDates'),
field=models.ForeignKey(to='admin.ObjectDates', on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AddField(
model_name='mailbox',
name='domain',
field=models.ForeignKey(to='admin.Domain'),
field=models.ForeignKey(to='admin.Domain', on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AddField(
model_name='mailbox',
name='user',
field=models.OneToOneField(to=settings.AUTH_USER_MODEL),
field=models.OneToOneField(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AddField(
model_name='domainalias',
name='dates',
field=models.ForeignKey(to='admin.ObjectDates'),
field=models.ForeignKey(to='admin.ObjectDates', on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AddField(
model_name='domainalias',
name='target',
field=models.ForeignKey(verbose_name='target', to='admin.Domain', help_text='The domain this alias points to'),
field=models.ForeignKey(verbose_name='target', to='admin.Domain', help_text='The domain this alias points to', on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AddField(
model_name='domain',
name='dates',
field=models.ForeignKey(to='admin.ObjectDates'),
field=models.ForeignKey(to='admin.ObjectDates', on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AddField(
model_name='aliasrecipient',
name='r_mailbox',
field=models.ForeignKey(blank=True, to='admin.Mailbox', null=True),
field=models.ForeignKey(blank=True, to='admin.Mailbox', null=True, on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AlterUniqueTogether(
@@ -162,13 +162,13 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='alias',
name='dates',
field=models.ForeignKey(to='admin.ObjectDates'),
field=models.ForeignKey(to='admin.ObjectDates', on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AddField(
model_name='alias',
name='domain',
field=models.ForeignKey(to='admin.Domain', null=True),
field=models.ForeignKey(to='admin.Domain', null=True, on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AlterUniqueTogether(
+7 -5
View File
@@ -5,7 +5,7 @@ from __future__ import unicode_literals
import hashlib
import random
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.db import models
from django.utils.encoding import (
python_2_unicode_compatible, smart_text, force_str, force_bytes
@@ -37,7 +37,7 @@ class Alias(AdminObject):
"The alias address."
)
)
domain = models.ForeignKey(Domain, null=True)
domain = models.ForeignKey(Domain, null=True, on_delete=models.CASCADE)
enabled = models.BooleanField(
ugettext_lazy("enabled"),
help_text=ugettext_lazy("Check to activate this alias"),
@@ -210,13 +210,15 @@ class AliasRecipient(models.Model):
"""An alias recipient."""
address = models.EmailField()
alias = models.ForeignKey(Alias)
alias = models.ForeignKey(Alias, on_delete=models.CASCADE)
# if recipient is a local mailbox
r_mailbox = models.ForeignKey(Mailbox, blank=True, null=True)
r_mailbox = models.ForeignKey(Mailbox, blank=True, null=True,
on_delete=models.CASCADE)
# if recipient is a local alias
r_alias = models.ForeignKey(
Alias, related_name="alias_recipient_aliases", blank=True, null=True)
Alias, related_name="alias_recipient_aliases", blank=True, null=True,
on_delete=models.CASCADE)
class Meta:
app_label = "admin"
+2 -1
View File
@@ -40,7 +40,8 @@ class DomainAlias(AdminObject):
help_text=ugettext_lazy("The alias name"))
target = models.ForeignKey(
Domain, verbose_name=ugettext_lazy('target'),
help_text=ugettext_lazy("The domain this alias points to")
help_text=ugettext_lazy("The domain this alias points to"),
on_delete=models.CASCADE
)
enabled = models.BooleanField(
ugettext_lazy('enabled'),
+5 -4
View File
@@ -100,8 +100,8 @@ class Mailbox(AdminObject):
)
quota = models.PositiveIntegerField(default=0)
use_domain_quota = models.BooleanField(default=False)
domain = models.ForeignKey(Domain)
user = models.OneToOneField(User)
domain = models.ForeignKey(Domain, on_delete=models.CASCADE)
user = models.OneToOneField(User, on_delete=models.CASCADE)
objects = MailboxManager()
@@ -354,7 +354,7 @@ class SenderAddress(models.Model):
"""Extra sender address for Mailbox."""
address = models.EmailField()
mailbox = models.ForeignKey(Mailbox)
mailbox = models.ForeignKey(Mailbox, on_delete=models.CASCADE)
class Meta:
app_label = "admin"
@@ -373,7 +373,8 @@ reversion.register(SenderAddress)
class MailboxOperation(models.Model):
"""An operation on a mailbox."""
mailbox = models.ForeignKey(Mailbox, blank=True, null=True)
mailbox = models.ForeignKey(Mailbox, blank=True, null=True,
on_delete=models.CASCADE)
type = models.CharField(
max_length=20, choices=(('rename', 'rename'), ('delete', 'delete'))
)
+3 -3
View File
@@ -58,7 +58,7 @@ class MXRecordManager(models.Manager):
class MXRecord(models.Model):
"""A model used to store MX records for Domain."""
domain = models.ForeignKey("admin.Domain")
domain = models.ForeignKey("admin.Domain", on_delete=models.CASCADE)
name = models.CharField(max_length=254)
address = models.GenericIPAddressField()
managed = models.BooleanField(default=False)
@@ -86,9 +86,9 @@ class DNSBLQuerySet(models.QuerySet):
class DNSBLResult(models.Model):
"""Store a DNSBL query result."""
domain = models.ForeignKey("admin.Domain")
domain = models.ForeignKey("admin.Domain", on_delete=models.CASCADE)
provider = models.CharField(max_length=254, db_index=True)
mx = models.ForeignKey(MXRecord)
mx = models.ForeignKey(MXRecord, on_delete=models.CASCADE)
status = models.CharField(max_length=45, blank=True, db_index=True)
objects = models.Manager.from_queryset(DNSBLQuerySet)()
+1 -1
View File
@@ -5,7 +5,7 @@ from __future__ import unicode_literals
from functools import reduce
from django import template
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.template.loader import render_to_string
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _, ugettext_lazy
+1 -1
View File
@@ -4,7 +4,7 @@ from __future__ import unicode_literals
from unittest import skipIf
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.test import override_settings
from modoboa.core import factories as core_factories
+1 -1
View File
@@ -4,7 +4,7 @@ from __future__ import unicode_literals
"""Admin test cases."""
from django.core.urlresolvers import reverse
from django.urls import reverse
from modoboa.core.models import User
from modoboa.lib.tests import ModoTestCase
+1 -1
View File
@@ -9,7 +9,7 @@ import json
import dns.resolver
from mock import patch
from django.core.urlresolvers import reverse
from django.urls import reverse
from rest_framework.authtoken.models import Token
+1 -1
View File
@@ -7,7 +7,7 @@ from __future__ import unicode_literals
import dns.resolver
from mock import patch
from django.core.urlresolvers import reverse
from django.urls import reverse
from modoboa.core import factories as core_factories
from modoboa.core.models import User
+1 -1
View File
@@ -2,7 +2,7 @@
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.urls import reverse
from modoboa.lib.tests import ModoTestCase
+1 -1
View File
@@ -4,7 +4,7 @@
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.utils.encoding import force_text
from modoboa.lib.tests import ModoTestCase
+1 -1
View File
@@ -6,7 +6,7 @@ from mock import patch
import dns.resolver
from django.core.files.base import ContentFile
from django.core.urlresolvers import reverse
from django.urls import reverse
from modoboa.core import factories as core_factories
from modoboa.core.models import User
@@ -9,7 +9,7 @@ import tempfile
import mock
from django.core.management import call_command
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.test import override_settings
from modoboa.lib.tests import ModoTestCase
+1 -1
View File
@@ -6,7 +6,7 @@ from mock import patch
from django.core import mail
from django.core import management
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.test import override_settings
from modoboa.core import factories as core_factories
+1 -1
View File
@@ -1,6 +1,6 @@
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.urls import reverse
from modoboa.core.models import User
from modoboa.lib.tests import ModoTestCase
+1 -1
View File
@@ -2,7 +2,7 @@
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.urls import reverse
from modoboa.core.models import User
from modoboa.lib.tests import ModoTestCase
+1 -1
View File
@@ -2,7 +2,7 @@
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.db import IntegrityError
from django.shortcuts import render
from django.utils.translation import ugettext as _, ungettext
+1 -1
View File
@@ -4,7 +4,7 @@ from __future__ import unicode_literals
from functools import reduce
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.db.models import Sum
from django.http import HttpResponseRedirect
from django.shortcuts import render
+1 -1
View File
@@ -9,7 +9,7 @@ from rfc6266 import build_header
from django.contrib.auth.decorators import (
login_required, permission_required, user_passes_test
)
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.http import HttpResponse
from django.shortcuts import render
from django.utils.translation import ugettext as _
+1 -1
View File
@@ -9,7 +9,7 @@ from io import StringIO
from django.contrib.auth.decorators import (
login_required, permission_required, user_passes_test
)
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.db import transaction
from django.shortcuts import render
from django.utils.translation import ugettext as _
+2 -2
View File
@@ -11,7 +11,7 @@ from django.contrib.auth import password_validation
from modoboa.lib import fields as lib_fields
from modoboa.lib.cryptutils import random_key
from modoboa.lib.form_utils import (
YesNoField, SeparatorField, InlineRadioSelect
YesNoField, SeparatorField, HorizontalRadioSelect
)
from modoboa.parameters import forms as param_forms
from modoboa.parameters import tools as param_tools
@@ -44,7 +44,7 @@ class GeneralParametersForm(param_forms.AdminParametersForm):
('ldap', "LDAP")],
initial="local",
help_text=ugettext_lazy("The backend used for authentication"),
widget=InlineRadioSelect
widget=HorizontalRadioSelect()
)
password_scheme = forms.ChoiceField(
+1 -1
View File
@@ -4,7 +4,7 @@ from __future__ import unicode_literals
import logging
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.db.models import signals
from django.dispatch import receiver
from django.utils.encoding import smart_text
+3 -1
View File
@@ -2,10 +2,12 @@
from __future__ import unicode_literals
from django.utils.deprecation import MiddlewareMixin
from . import models
class LocalConfigMiddleware(object):
class LocalConfigMiddleware(MiddlewareMixin):
"""A middleware to inject LocalConfig into request."""
def process_request(self, request):
+2 -2
View File
@@ -67,8 +67,8 @@ class Migration(migrations.Migration):
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('object_id', models.PositiveIntegerField()),
('is_owner', models.BooleanField(default=False)),
('content_type', models.ForeignKey(to='contenttypes.ContentType')),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
('content_type', models.ForeignKey(to='contenttypes.ContentType', on_delete=models.CASCADE)),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
],
options={
},
+4 -4
View File
@@ -5,7 +5,7 @@ from __future__ import unicode_literals
from email.header import Header
import re
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.db import models
from django.utils.encoding import (
python_2_unicode_compatible, smart_bytes, smart_text, force_str
@@ -407,8 +407,8 @@ def populate_callback(user, group="SimpleUsers"):
@python_2_unicode_compatible
class ObjectAccess(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
user = models.ForeignKey(User, on_delete=models.CASCADE)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
is_owner = models.BooleanField(default=False)
@@ -435,7 +435,7 @@ class LocalConfig(models.Model):
"""Store instance configuration here."""
api_pk = models.PositiveIntegerField(null=True)
site = models.ForeignKey("sites.Site")
site = models.ForeignKey("sites.Site", on_delete=models.CASCADE)
# API results cache
api_versions = jsonfield.JSONField()
+1 -1
View File
@@ -10,7 +10,7 @@ import re
from django import template
from django.conf import settings
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.template.loader import render_to_string
from django.utils import timezone
from django.utils.encoding import smart_text
+1 -1
View File
@@ -10,7 +10,7 @@ from unittest import skipIf
from mock import patch
from django.core import mail
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.test import override_settings
from modoboa.lib.tests import ModoTestCase
+1 -1
View File
@@ -8,7 +8,7 @@ from dateutil.relativedelta import relativedelta
from six import StringIO
from django.core import management
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.test import TestCase
from django.utils import timezone
+1 -1
View File
@@ -4,7 +4,7 @@ from __future__ import unicode_literals
from unittest import skipIf
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.test import override_settings
from django.utils.functional import cached_property
+1 -1
View File
@@ -5,7 +5,7 @@ from __future__ import unicode_literals
from testfixtures import compare
from django import forms
from django.core.urlresolvers import reverse
from django.urls import reverse
from modoboa.lib.tests import ModoTestCase
from modoboa.parameters import forms as param_forms
+1 -1
View File
@@ -5,7 +5,7 @@ from __future__ import unicode_literals
import logging
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.http import HttpResponse, HttpResponseRedirect
from django.template.loader import render_to_string
from django.utils import translation
+1 -1
View File
@@ -2,7 +2,7 @@
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.utils.http import is_safe_url
from django.views import generic
+5 -41
View File
@@ -11,12 +11,8 @@ import re
from django.forms import TypedChoiceField
from django.forms.fields import Field
from django.forms.widgets import RadioSelect
from django.forms.widgets import RadioChoiceInput
from django.shortcuts import render
from django.utils.encoding import (
python_2_unicode_compatible, force_text, force_str)
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
from django.utils.encoding import force_str
from django.utils.translation import ugettext as _, ugettext_lazy
from modoboa.lib.exceptions import BadRequest
@@ -371,41 +367,9 @@ class TabForms(object):
#
@python_2_unicode_compatible
class CustomRadioInput(RadioChoiceInput):
"""Custom radio input."""
def __str__(self):
if "id" in self.attrs:
label_for = ' for="%s"' % self.attrs["id"]
else:
label_for = ""
choice_label = conditional_escape(force_text(self.choice_label))
return mark_safe(
"<label class='radio-inline' %s>%s %s</label>"
% (label_for, self.tag(), choice_label)
)
class InlineRadioRenderer(RadioSelect.renderer):
"""Custom inline radio renderer."""
def __iter__(self):
for i, choice in enumerate(self.choices):
yield CustomRadioInput(
self.name, self.value, self.attrs.copy(), choice, i
)
def render(self):
return mark_safe(
u"\n".join([u"%s\n" % force_text(w) for w in self])
)
class InlineRadioSelect(RadioSelect):
"""Custom inline radio widget."""
renderer = InlineRadioRenderer
class HorizontalRadioSelect(RadioSelect):
template_name = "common/horizontal_select.html"
option_template_name = "common/horizontal_select_option.html"
class SeparatorField(Field):
@@ -426,7 +390,7 @@ class YesNoField(TypedChoiceField):
(True, ugettext_lazy("Yes")),
(False, ugettext_lazy("No"))
),
"widget": InlineRadioSelect,
"widget": HorizontalRadioSelect(),
"coerce": lambda x: x == "True"
})
super(YesNoField, self).__init__(*args, **kwargs)
+4 -3
View File
@@ -6,6 +6,7 @@ from __future__ import unicode_literals
from django.http import HttpResponseRedirect
from django.utils.encoding import smart_text
from django.utils.deprecation import MiddlewareMixin
from modoboa.lib.exceptions import ModoboaException
from modoboa.lib import signals as lib_signals
@@ -14,7 +15,7 @@ from modoboa.lib.web_utils import (
)
class AjaxLoginRedirect(object):
class AjaxLoginRedirect(MiddlewareMixin):
def process_response(self, request, response):
if request.is_ajax():
@@ -23,7 +24,7 @@ class AjaxLoginRedirect(object):
return response
class CommonExceptionCatcher(object):
class CommonExceptionCatcher(MiddlewareMixin):
"""Modoboa exceptions catcher."""
def process_exception(self, request, exception):
@@ -44,7 +45,7 @@ class CommonExceptionCatcher(object):
)
class RequestCatcherMiddleware(object):
class RequestCatcherMiddleware(MiddlewareMixin):
"""Simple middleware to store the current request."""
def process_request(self, request):
+1 -1
View File
@@ -29,7 +29,7 @@ class Migration(migrations.Migration):
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=255)),
('value', models.CharField(max_length=255)),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
],
options={
},
+2 -2
View File
@@ -29,7 +29,7 @@ class Migration(migrations.Migration):
name='LimitsPool',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)),
('user', models.OneToOneField(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
],
options={
'db_table': 'limits_limitspool',
@@ -39,7 +39,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='limit',
name='pool',
field=models.ForeignKey(to='limits.LimitsPool'),
field=models.ForeignKey(to='limits.LimitsPool', on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AlterUniqueTogether(
@@ -58,8 +58,8 @@ class Migration(migrations.Migration):
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=254)),
('max_value', models.IntegerField(default=-2)),
('content_type', models.ForeignKey(to='contenttypes.ContentType')),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
('content_type', models.ForeignKey(to='contenttypes.ContentType', on_delete=models.CASCADE)),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
],
),
migrations.AlterUniqueTogether(
@@ -33,7 +33,7 @@ class Migration(migrations.Migration):
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=254)),
('max_value', models.IntegerField(default=0)),
('domain', models.ForeignKey(to='admin.Domain')),
('domain', models.ForeignKey(to='admin.Domain', on_delete=models.CASCADE)),
],
bases=(modoboa.limits.models.ObjectLimitMixin, models.Model),
),
+4 -3
View File
@@ -69,9 +69,10 @@ class ObjectLimitMixin(object):
class UserObjectLimit(ObjectLimitMixin, models.Model):
"""Object level limit."""
user = models.ForeignKey(settings.AUTH_USER_MODEL)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
name = models.CharField(max_length=254)
content_type = models.ForeignKey("contenttypes.ContentType")
content_type = models.ForeignKey("contenttypes.ContentType",
on_delete=models.CASCADE)
max_value = models.IntegerField(default=0)
class Meta(object):
@@ -132,7 +133,7 @@ class UserObjectLimit(ObjectLimitMixin, models.Model):
class DomainObjectLimit(ObjectLimitMixin, models.Model):
"""Per-domain limits on object creation."""
domain = models.ForeignKey("admin.Domain")
domain = models.ForeignKey("admin.Domain", on_delete=models.CASCADE)
name = models.CharField(max_length=254)
max_value = models.IntegerField(default=0)
+1 -1
View File
@@ -5,7 +5,7 @@ from __future__ import unicode_literals
from testfixtures import compare
from django.core.urlresolvers import reverse
from django.urls import reverse
from rest_framework.authtoken.models import Token
+1 -1
View File
@@ -3,7 +3,7 @@
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.urls import reverse
from modoboa.admin import factories as admin_factories
from modoboa.admin.models import Domain
+1 -1
View File
@@ -3,7 +3,7 @@
from __future__ import unicode_literals
from django.core.files.base import ContentFile
from django.core.urlresolvers import reverse
from django.urls import reverse
from modoboa.admin import factories as admin_factories
from modoboa.admin import models as admin_models
+1 -1
View File
@@ -3,7 +3,7 @@
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.urls import reverse
from modoboa.admin.factories import populate_database
from modoboa.admin.models import Alias, Domain
@@ -17,8 +17,8 @@ class Migration(migrations.Migration):
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('target_host', models.CharField(help_text='Remote destination of this domain', max_length=255, verbose_name='target host')),
('verify_recipients', models.BooleanField(default=False, help_text='Check for valid recipients', verbose_name='verify recipients')),
('dates', models.ForeignKey(to='admin.ObjectDates')),
('domain', models.OneToOneField(null=True, to='admin.Domain')),
('dates', models.ForeignKey(to='admin.ObjectDates', on_delete=models.CASCADE)),
('domain', models.OneToOneField(null=True, to='admin.Domain', on_delete=models.CASCADE)),
],
options={
'ordering': ['domain__name'],
@@ -40,7 +40,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='relaydomain',
name='service',
field=models.ForeignKey(to='relaydomains.Service'),
field=models.ForeignKey(to='relaydomains.Service', on_delete=models.CASCADE),
preserve_default=True,
),
]
+1 -1
View File
@@ -3,7 +3,7 @@
from __future__ import unicode_literals
from django.core.files.base import ContentFile
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.test import TestCase
from modoboa.admin import factories as admin_factories
@@ -0,0 +1,7 @@
{% with id=widget.attrs.id %}<div{% if id %} id="{{ id }}"{% endif %}{% if widget.attrs.class %} class="{{ widget.attrs.class }}"{% endif %}>
{% for group, options, index in widget.optgroups %}
{% for option in options %}
{% include option.template_name with widget=option %}
{% endfor %}
{% endfor %}
</div>{% endwith %}
@@ -0,0 +1,2 @@
{% if wrap_label %}<label{% if widget.attrs.id %} for="{{ widget.attrs.id }}"{% endif %}{% if widget.attrs.id %} for="{{ widget.attrs.id }}"{% endif %} class="radio-inline">{% endif %}{% include "django/forms/widgets/input.html" %}{% if wrap_label %} {{ widget.label }}</label>{% endif %}
+1 -1
View File
@@ -2,7 +2,7 @@
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.dispatch import receiver
from django.utils.translation import ugettext as _
+1 -1
View File
@@ -2,7 +2,7 @@
import json
from django.core.urlresolvers import reverse
from django.urls import reverse
from modoboa.lib.tests import ModoAPITestCase, ModoTestCase
+1 -1
View File
@@ -1,7 +1,7 @@
"""Transport views."""
from django import http
from django.core.urlresolvers import reverse, reverse_lazy
from django.urls import reverse, reverse_lazy
from django.utils.translation import ugettext as _, ugettext_lazy
from django.views import generic
+1 -1
View File
@@ -69,7 +69,7 @@ INSTALLED_APPS += MODOBOA_APPS
AUTH_USER_MODEL = 'core.User'
MIDDLEWARE_CLASSES = (
MIDDLEWARE = (
'x_forwarded_for.middleware.XForwardedForMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',