mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-17 05:41:25 +02:00
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:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 _
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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'))
|
||||
)
|
||||
|
||||
@@ -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)()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 _
|
||||
|
||||
@@ -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 _
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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={
|
||||
},
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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={
|
||||
},
|
||||
|
||||
@@ -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),
|
||||
),
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
]
|
||||
|
||||
@@ -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 %}
|
||||
@@ -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 _
|
||||
|
||||
|
||||
@@ -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,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
|
||||
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user