From 762f6214933aa6402723ccbc22b62a095027b589 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Fri, 4 Nov 2016 22:02:56 +0100 Subject: [PATCH] WIP. --- .../migrations/0006_auto_20161104_1900.py | 71 +++++++++++++++++++ .../migrations/0007_auto_20161104_1915.py | 55 ++++++++++++++ modoboa/admin/models/base.py | 52 +++----------- modoboa/core/models.py | 6 +- modoboa/parameters/forms.py | 1 - modoboa/relaydomains/forms.py | 2 +- .../0003_remove_relaydomain_dates.py | 20 ++++++ modoboa/relaydomains/models.py | 3 +- 8 files changed, 157 insertions(+), 53 deletions(-) create mode 100644 modoboa/admin/migrations/0006_auto_20161104_1900.py create mode 100644 modoboa/admin/migrations/0007_auto_20161104_1915.py create mode 100644 modoboa/relaydomains/migrations/0003_remove_relaydomain_dates.py diff --git a/modoboa/admin/migrations/0006_auto_20161104_1900.py b/modoboa/admin/migrations/0006_auto_20161104_1900.py new file mode 100644 index 000000000..9b70b7c7f --- /dev/null +++ b/modoboa/admin/migrations/0006_auto_20161104_1900.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.5 on 2016-11-04 18:00 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.utils.timezone + + +def move_dates(apps, schema_editor): + """Move dates to models.""" + Domain = apps.get_model("admin", "Domain") + DomainAlias = apps.get_model("admin", "DomainAlias") + Mailbox = apps.get_model("admin", "Mailbox") + Alias = apps.get_model("admin", "Alias") + RelayDomain = apps.get_model("relaydomains", "RelayDomain") + for model in [Domain, DomainAlias, Mailbox, Alias, RelayDomain]: + for instance in model.objects.all(): + instance.creation = instance.dates.creation + instance.last_modification = instance.dates.last_modification + instance.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('admin', '0005_auto_20161026_1003'), + ] + + operations = [ + migrations.AddField( + model_name='alias', + name='creation', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + migrations.AddField( + model_name='alias', + name='last_modification', + field=models.DateTimeField(null=True), + ), + migrations.AddField( + model_name='domain', + name='creation', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + migrations.AddField( + model_name='domain', + name='last_modification', + field=models.DateTimeField(null=True), + ), + migrations.AddField( + model_name='domainalias', + name='creation', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + migrations.AddField( + model_name='domainalias', + name='last_modification', + field=models.DateTimeField(null=True), + ), + migrations.AddField( + model_name='mailbox', + name='creation', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + migrations.AddField( + model_name='mailbox', + name='last_modification', + field=models.DateTimeField(null=True), + ), + migrations.RunPython(move_dates) + ] diff --git a/modoboa/admin/migrations/0007_auto_20161104_1915.py b/modoboa/admin/migrations/0007_auto_20161104_1915.py new file mode 100644 index 000000000..2f9c49b97 --- /dev/null +++ b/modoboa/admin/migrations/0007_auto_20161104_1915.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.5 on 2016-11-04 18:15 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('relaydomains', '0003_remove_relaydomain_dates'), + ('admin', '0006_auto_20161104_1900'), + ] + + operations = [ + migrations.RemoveField( + model_name='alias', + name='dates', + ), + migrations.RemoveField( + model_name='domain', + name='dates', + ), + migrations.RemoveField( + model_name='domainalias', + name='dates', + ), + migrations.RemoveField( + model_name='mailbox', + name='dates', + ), + migrations.AlterField( + model_name='alias', + name='last_modification', + field=models.DateTimeField(auto_now=True), + ), + migrations.AlterField( + model_name='domain', + name='last_modification', + field=models.DateTimeField(auto_now=True), + ), + migrations.AlterField( + model_name='domainalias', + name='last_modification', + field=models.DateTimeField(auto_now=True), + ), + migrations.AlterField( + model_name='mailbox', + name='last_modification', + field=models.DateTimeField(auto_now=True), + ), + migrations.DeleteModel( + name='ObjectDates', + ), + ] diff --git a/modoboa/admin/models/base.py b/modoboa/admin/models/base.py index b1d7ae3ae..9e55e8533 100644 --- a/modoboa/admin/models/base.py +++ b/modoboa/admin/models/base.py @@ -1,4 +1,7 @@ +"""Base admin models.""" + from django.db import models +from django.utils import timezone from modoboa.lib import events from modoboa.lib.permissions import ( @@ -6,55 +9,21 @@ from modoboa.lib.permissions import ( ) -class ObjectDates(models.Model): - - """Dates recording for admin objects - - This table keeps creation and last modification dates for Domains, - domain aliases, mailboxes and aliases objects. - """ - creation = models.DateTimeField(auto_now_add=True) - last_modification = models.DateTimeField(auto_now=True) - - class Meta: - app_label = "admin" - - @staticmethod - def set_for_object(obj): - """Initialize or update dates for a given object. - - :param obj: an admin object (Domain, Mailbox, etc) - """ - try: - dates = getattr(obj, "dates") - except ObjectDates.DoesNotExist: - dates = ObjectDates() - dates.save() - obj.dates = dates - - class AdminObject(models.Model): - - """Abstract model to support dates + """Abstract model to support dates. Inherit from this model to automatically add the "dates" feature to another model. It defines the appropriate field and handles saves. """ - dates = models.ForeignKey(ObjectDates) + + creation = models.DateTimeField(default=timezone.now) + last_modification = models.DateTimeField(auto_now=True) _objectname = None class Meta: abstract = True - @property - def creation(self): - return self.dates.creation - - @property - def last_modification(self): - return self.dates.last_modification - @property def objectname(self): if self._objectname is None: @@ -66,12 +35,7 @@ class AdminObject(models.Model): events.raiseEvent("%sCreated" % self.objectname, creator, self) def save(self, *args, **kwargs): - ObjectDates.set_for_object(self) - if "creator" in kwargs: - creator = kwargs["creator"] - del kwargs["creator"] - else: - creator = None + creator = kwargs.pop("creator", None) super(AdminObject, self).save(*args, **kwargs) if creator is not None: self.post_create(creator) diff --git a/modoboa/core/models.py b/modoboa/core/models.py index 0fbda4dff..5e4c1a7f6 100644 --- a/modoboa/core/models.py +++ b/modoboa/core/models.py @@ -366,11 +366,7 @@ class User(PermissionsMixin): events.raiseEvent("AccountCreated", self) def save(self, *args, **kwargs): - if "creator" in kwargs: - creator = kwargs["creator"] - del kwargs["creator"] - else: - creator = None + creator = kwargs.pop("creator", None) super(User, self).save(*args, **kwargs) if creator is not None: self.post_create(creator) diff --git a/modoboa/parameters/forms.py b/modoboa/parameters/forms.py index 21243fe77..2996e96e5 100644 --- a/modoboa/parameters/forms.py +++ b/modoboa/parameters/forms.py @@ -2,7 +2,6 @@ from django import forms -from modoboa.lib import events from modoboa.lib import db_utils from modoboa.lib import form_utils diff --git a/modoboa/relaydomains/forms.py b/modoboa/relaydomains/forms.py index c9be3021a..afca9e8e0 100644 --- a/modoboa/relaydomains/forms.py +++ b/modoboa/relaydomains/forms.py @@ -30,7 +30,7 @@ class RelayDomainFormGeneral(forms.ModelForm): class Meta: model = RelayDomain - exclude = ["domain", "dates"] + exclude = ["domain"] widgets = { "service": forms.Select(attrs={"class": "form-control"}) } diff --git a/modoboa/relaydomains/migrations/0003_remove_relaydomain_dates.py b/modoboa/relaydomains/migrations/0003_remove_relaydomain_dates.py new file mode 100644 index 000000000..36fde02f3 --- /dev/null +++ b/modoboa/relaydomains/migrations/0003_remove_relaydomain_dates.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.5 on 2016-11-04 18:15 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('relaydomains', '0002_migrate_from_modoboa_admin_relaydomains'), + ('admin', '0006_auto_20161104_1900'), + ] + + operations = [ + migrations.RemoveField( + model_name='relaydomain', + name='dates', + ), + ] diff --git a/modoboa/relaydomains/models.py b/modoboa/relaydomains/models.py index e89d528f2..b10b8eaf0 100644 --- a/modoboa/relaydomains/models.py +++ b/modoboa/relaydomains/models.py @@ -41,7 +41,6 @@ class ServiceManager(Manager): class Service(models.Model): - """Postfix service.""" name = models.CharField( @@ -59,13 +58,13 @@ class Service(models.Model): class RelayDomain(admin_models.AdminObject): - """Relay domain. A relay domain differs from a usual domaine because its final destination is not reached yet. It must be accepted by the MTA but it will then be transfered to another one. """ + domain = models.OneToOneField("admin.Domain", null=True) target_host = models.CharField( ugettext_lazy('target host'), max_length=255,