Started port to Django 2.1, Python 3, Docker

This commit is a rough port to Django 2.1, Python 3 and a Docker based local
development setup. Tests fail/error but migrations and the web frontend are
already runnable. Task queue functionality is untested and translations seem to
have trouble.
This commit is contained in:
Jan Dittberner 2018-11-19 23:28:40 +01:00
parent adc57657dd
commit 6cebd80c89
48 changed files with 1081 additions and 576 deletions

View file

@ -7,7 +7,7 @@ from __future__ import absolute_import, unicode_literals
import re
from django import forms
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.utils.translation import ugettext as _
from crispy_forms.helper import FormHelper

View file

@ -8,7 +8,6 @@ import model_utils.fields
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('domains', '0001_initial'),
@ -18,12 +17,31 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='HostingDomain',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
('domain', models.CharField(unique=True, max_length=128, verbose_name='domain name')),
('customer', models.ForeignKey(verbose_name='customer', blank=True, to=settings.AUTH_USER_MODEL, null=True)),
('maildomain', models.OneToOneField(null=True, to='domains.MailDomain', blank=True, help_text='assigned mail domain for this domain', verbose_name='mail domain')),
('id',
models.AutoField(verbose_name='ID', serialize=False,
auto_created=True, primary_key=True)),
('created',
model_utils.fields.AutoCreatedField(
default=django.utils.timezone.now, verbose_name='created',
editable=False)),
('modified',
model_utils.fields.AutoLastModifiedField(
default=django.utils.timezone.now, verbose_name='modified',
editable=False)),
('domain',
models.CharField(
unique=True, max_length=128, verbose_name='domain name')),
('customer',
models.ForeignKey(
verbose_name='customer', blank=True,
to=settings.AUTH_USER_MODEL, null=True,
on_delete=models.CASCADE)),
('maildomain',
models.OneToOneField(
null=True, to='domains.MailDomain', blank=True,
help_text='assigned mail domain for this domain',
verbose_name='mail domain',
on_delete=models.CASCADE)),
],
options={
'verbose_name': 'Hosting domain',
@ -34,13 +52,17 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='maildomain',
name='customer',
field=models.ForeignKey(verbose_name='customer', blank=True, to=settings.AUTH_USER_MODEL, null=True),
field=models.ForeignKey(
verbose_name='customer', blank=True,
to=settings.AUTH_USER_MODEL, null=True,
on_delete=models.CASCADE),
preserve_default=True,
),
migrations.AlterField(
model_name='maildomain',
name='domain',
field=models.CharField(unique=True, max_length=128, verbose_name='domain name'),
field=models.CharField(
unique=True, max_length=128, verbose_name='domain name'),
preserve_default=True,
),
]

View file

@ -8,7 +8,6 @@ import model_utils.fields
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('domains', '0002_auto_20150124_1909'),
@ -18,22 +17,29 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='DNSComment',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('id', models.AutoField(
verbose_name='ID', serialize=False,
auto_created=True, primary_key=True)),
('name', models.CharField(max_length=255)),
('commenttype', models.CharField(max_length=10, db_column='type')),
('commenttype',
models.CharField(max_length=10, db_column='type')),
('modified_at', models.IntegerField()),
('comment', models.CharField(max_length=65535)),
('customer', models.ForeignKey(verbose_name='customer', to=settings.AUTH_USER_MODEL)),
('customer', models.ForeignKey(
verbose_name='customer',
to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
],
),
migrations.RunSQL(
'''ALTER TABLE domains_dnscomment ADD CONSTRAINT c_lowercase_name
CHECK (((name)::TEXT = LOWER((name)::TEXT)))'''
CHECK (((name)::TEXT = LOWER((name)::TEXT)))'''
),
migrations.CreateModel(
name='DNSCryptoKey',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('id', models.AutoField(
verbose_name='ID', serialize=False,
auto_created=True, primary_key=True)),
('flags', models.IntegerField()),
('active', models.BooleanField(default=True)),
('content', models.TextField()),
@ -42,15 +48,30 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='DNSDomain',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, verbose_name='created', editable=False)),
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, verbose_name='modified', editable=False)),
('domain', models.CharField(unique=True, max_length=255, verbose_name='domain name')),
('master', models.CharField(max_length=128, null=True, blank=True)),
('id', models.AutoField(
verbose_name='ID', serialize=False,
auto_created=True, primary_key=True)),
('created', model_utils.fields.AutoCreatedField(
default=django.utils.timezone.now, verbose_name='created',
editable=False)),
('modified', model_utils.fields.AutoLastModifiedField(
default=django.utils.timezone.now, verbose_name='modified',
editable=False)),
('domain', models.CharField(
unique=True, max_length=255, verbose_name='domain name')),
('master',
models.CharField(max_length=128, null=True, blank=True)),
('last_check', models.IntegerField(null=True)),
('domaintype', models.CharField(max_length=6, db_column='type', choices=[('MASTER', 'Master'), ('SLAVE', 'Slave'), ('NATIVE', 'Native')])),
('domaintype', models.CharField(
max_length=6, db_column='type',
choices=[('MASTER', 'Master'),
('SLAVE', 'Slave'),
('NATIVE', 'Native')])),
('notified_serial', models.IntegerField(null=True)),
('customer', models.ForeignKey(verbose_name='customer', blank=True, to=settings.AUTH_USER_MODEL, null=True)),
('customer', models.ForeignKey(
verbose_name='customer', blank=True,
to=settings.AUTH_USER_MODEL, null=True,
on_delete=models.CASCADE)),
],
options={
'verbose_name': 'DNS domain',
@ -64,26 +85,35 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='DNSDomainMetadata',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('id', models.AutoField(
verbose_name='ID', serialize=False,
auto_created=True, primary_key=True)),
('kind', models.CharField(max_length=32)),
('content', models.TextField()),
('domain', models.ForeignKey(to='domains.DNSDomain')),
('domain', models.ForeignKey(
to='domains.DNSDomain', on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='DNSRecord',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(db_index=True, max_length=255, null=True, blank=True)),
('recordtype', models.CharField(max_length=10, null=True, db_column='type', blank=True)),
('content', models.CharField(max_length=65535, null=True, blank=True)),
('id', models.AutoField(
verbose_name='ID', serialize=False,
auto_created=True, primary_key=True)),
('name', models.CharField(
db_index=True, max_length=255, null=True, blank=True)),
('recordtype', models.CharField(
max_length=10, null=True, db_column='type', blank=True)),
('content', models.CharField(
max_length=65535, null=True, blank=True)),
('ttl', models.IntegerField(null=True)),
('prio', models.IntegerField(null=True)),
('change_date', models.IntegerField(null=True)),
('disabled', models.BooleanField(default=False)),
('ordername', models.CharField(max_length=255)),
('auth', models.BooleanField(default=True)),
('domain', models.ForeignKey(to='domains.DNSDomain')),
('domain', models.ForeignKey(
to='domains.DNSDomain', on_delete=models.CASCADE)),
],
options={
'verbose_name': 'DNS record',
@ -101,16 +131,22 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='DNSSupermaster',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('id', models.AutoField(
verbose_name='ID', serialize=False,
auto_created=True, primary_key=True)),
('ip', models.GenericIPAddressField()),
('nameserver', models.CharField(max_length=255)),
('customer', models.ForeignKey(verbose_name='customer', to=settings.AUTH_USER_MODEL)),
('customer', models.ForeignKey(
verbose_name='customer', to=settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)),
],
),
migrations.CreateModel(
name='DNSTSIGKey',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('id', models.AutoField(
verbose_name='ID', serialize=False,
auto_created=True, primary_key=True)),
('name', models.CharField(max_length=255)),
('algorithm', models.CharField(max_length=50)),
('secret', models.CharField(max_length=255)),
@ -123,22 +159,26 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name='hostingdomain',
name='domain',
field=models.CharField(unique=True, max_length=255, verbose_name='domain name'),
field=models.CharField(
unique=True, max_length=255, verbose_name='domain name'),
),
migrations.AlterField(
model_name='maildomain',
name='domain',
field=models.CharField(unique=True, max_length=255, verbose_name='domain name'),
field=models.CharField(
unique=True, max_length=255, verbose_name='domain name'),
),
migrations.AddField(
model_name='dnscryptokey',
name='domain',
field=models.ForeignKey(to='domains.DNSDomain'),
field=models.ForeignKey(
to='domains.DNSDomain', on_delete=models.CASCADE),
),
migrations.AddField(
model_name='dnscomment',
name='domain',
field=models.ForeignKey(to='domains.DNSDomain'),
field=models.ForeignKey(
to='domains.DNSDomain', on_delete=models.CASCADE),
),
migrations.AlterUniqueTogether(
name='dnssupermaster',
@ -154,6 +194,6 @@ class Migration(migrations.Migration):
),
migrations.AlterIndexTogether(
name='dnscomment',
index_together=set([('name', 'commenttype'), ('domain', 'modified_at')]),
index_together={('name', 'commenttype'), ('domain', 'modified_at')},
),
]

View file

@ -58,7 +58,7 @@ class DomainBase(TimeStampedModel):
domain = models.CharField(_('domain name'), max_length=255, unique=True)
customer = models.ForeignKey(
settings.AUTH_USER_MODEL, verbose_name=_('customer'), blank=True,
null=True)
null=True, on_delete=models.CASCADE)
class Meta:
abstract = True
@ -119,7 +119,8 @@ class HostingDomain(DomainBase):
"""
maildomain = models.OneToOneField(
MailDomain, verbose_name=_('mail domain'), blank=True, null=True,
help_text=_('assigned mail domain for this domain')
help_text=_('assigned mail domain for this domain'),
on_delete=models.CASCADE,
)
objects = HostingDomainManager()
@ -208,7 +209,7 @@ class DNSRecord(models.Model):
domain_id, ordername text_pattern_ops);
"""
domain = models.ForeignKey('DNSDomain')
domain = models.ForeignKey('DNSDomain', on_delete=models.CASCADE)
name = models.CharField(
max_length=255, blank=True, null=True, db_index=True)
recordtype = models.CharField(
@ -255,7 +256,8 @@ class DNSSupermaster(models.Model):
nameserver = models.CharField(max_length=255)
# account is replaced by customer
customer = models.ForeignKey(
settings.AUTH_USER_MODEL, verbose_name=_('customer'))
settings.AUTH_USER_MODEL, verbose_name=_('customer'),
on_delete=models.CASCADE)
class Meta:
verbose_name = _('DNS supermaster')
@ -299,13 +301,14 @@ class DNSComment(models.Model):
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
"""
domain = models.ForeignKey('DNSDomain')
domain = models.ForeignKey('DNSDomain', on_delete=models.CASCADE)
name = models.CharField(max_length=255)
commenttype = models.CharField(max_length=10, db_column='type')
modified_at = models.IntegerField()
# account is replaced by customer
customer = models.ForeignKey(
settings.AUTH_USER_MODEL, verbose_name=_('customer'))
settings.AUTH_USER_MODEL, verbose_name=_('customer'),
on_delete=models.CASCADE)
comment = models.CharField(max_length=65535)
# check constraint is added via RunSQL in migration
@ -343,7 +346,7 @@ class DNSDomainMetadata(models.Model):
CREATE INDEX domainidmetaindex ON domainmetadata(domain_id);
"""
domain = models.ForeignKey('DNSDomain')
domain = models.ForeignKey('DNSDomain', on_delete=models.CASCADE)
kind = models.CharField(max_length=32, choices=DNS_DOMAIN_METADATA_KINDS)
content = models.TextField()
@ -376,7 +379,7 @@ class DNSCryptoKey(models.Model):
CREATE INDEX domainidindex ON cryptokeys(domain_id);
"""
domain = models.ForeignKey('DNSDomain')
domain = models.ForeignKey('DNSDomain', on_delete=models.CASCADE)
flags = models.IntegerField()
active = models.BooleanField(default=True)
content = models.TextField()

View file

@ -4,16 +4,13 @@ This module defines views related to domains.
"""
from __future__ import absolute_import, unicode_literals
from braces.views import StaffuserRequiredMixin
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import redirect, get_object_or_404
from django.views.generic.edit import CreateView
from django.utils.translation import ugettext as _
from django.contrib import messages
from braces.views import (
LoginRequiredMixin,
StaffuserRequiredMixin,
)
from hostingpackages.models import CustomerHostingPackage
from .forms import CreateHostingDomainForm