Make sure extensions load initial data in ALL cases.

This commit is contained in:
Antoine Nguyen
2015-01-29 12:42:19 +01:00
parent 2d5f9eb462
commit d40bbeb5ff
4 changed files with 38 additions and 34 deletions
@@ -1,39 +1,40 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import IntegrityError, models, migrations
from django.db import models, migrations
from modoboa.core.extensions import exts_pool
from modoboa.lib.migration_tools import add_permissions_to_group
from modoboa.extensions.limits import controls
from modoboa.extensions.limits.midels import LimitTemplates
def load_initial_data(apps, schema_editor):
"""Load initial data."""
ContentType = apps.get_model("contenttypes", "ContentType")
Group = apps.get_model("auth", "Group")
User = apps.get_model("core", "User")
Domain = apps.get_model("admin", "Domain")
LimitsPool = apps.get_model("limits", "LimitsPool")
Limit = apps.get_model("limits", "Limit")
ct = ContentType.objects.get(app_label="admin", model="domain")
dagrp = Group.objects.get(name="DomainAdmins")
grp = Group(name="Resellers")
grp.save()
grp.permissions.add(*dagrp.permissions.all())
ct = ContentType.objects.get_for_model(Domain)
add_permissions_to_group(
apps, "Resellers", [("admin", "domain", "view_domains"),
("admin", "domain", "add_domain"),
("admin", "domain", "change_domain"),
("admin", "domain", "delete_domain")]
apps, grp, [("admin", "domain", "view_domains"),
("admin", "domain", "add_domain"),
("admin", "domain", "change_domain"),
("admin", "domain", "delete_domain")]
)
if exts_pool.is_extension_installed(
"modoboa.extensions.postfix_relay_domains"):
from modoboa.extensions.postfix_relay_domains.modo_extension \
import RESELLERS_PERMISSIONS
add_permissions_to_group(apps, grp, RESELLERS_PERMISSIONS)
for user in User.objects.filter(groups__name='DomainAdmins'):
try:
controls.create_pool(user)
except IntegrityError:
pass
for user in User.objects.filter(groups__name="DomainAdmins"):
pool, created = LimitsPool.objects.get_or_create(user=user)
for tpl in LimitTemplates().templates():
Limit.objects.create(name=tpl[0], pool=pool, maxvalue=0)
class Migration(migrations.Migration):
@@ -4,6 +4,9 @@ from __future__ import unicode_literals
from django.db import models, migrations
from modoboa.core.extensions import exts_pool
from modoboa.lib.migration_tools import add_permissions_to_group
from ..modo_extension import RESELLERS_PERMISSIONS
def load_initial_data(apps, schema_editor):
@@ -16,11 +19,6 @@ def load_initial_data(apps, schema_editor):
return
Group = apps.get_model("auth", "Group")
Permission = apps.get_model("auth", "Permission")
ContentType = apps.get_model("contenttypes", "ContentType")
RelayDomain = apps.get_model("postfix_relay_domains", "RelayDomain")
RelayDomainAlias = apps.get_model(
"postfix_relay_domains", "RelayDomainAlias")
LimitsPool = apps.get_model("limits", "LimitsPool")
Limit = apps.get_model("limits", "Limit")
@@ -33,17 +31,7 @@ def load_initial_data(apps, schema_editor):
# Add new permissions to the Resellers group.
grp = Group.objects.get(name='Resellers')
for model in [RelayDomain, RelayDomainAlias, Service]:
ct = ContentType.objects.get_for_model(model)
name = model.__name__.lower()
for action in ['add', 'change', 'delete']:
grp.permissions.add(
Permission.objects.get(
content_type=ct, codename='%s_%s' % (action, name)
)
)
grp.save()
add_permissions_to_group(apps, grp, RESELLERS_PERMISSIONS)
class Migration(migrations.Migration):
@@ -18,6 +18,19 @@ EXTENSION_EVENTS = [
"FillRelayDomainInstances"
]
RESELLERS_PERMISSIONS = [
("postfix_relay_domains", "relaydomain", "add_relaydomain"),
("postfix_relay_domains", "relaydomain", "change_relaydomain"),
("postfix_relay_domains", "relaydomain", "delete_relaydomain"),
("postfix_relay_domains", "relaydomainalias", "add_relaydomainalias"),
("postfix_relay_domains", "relaydomainalias", "change_relaydomainalias"),
("postfix_relay_domains", "relaydomainalias", "delete_relaydomainalias"),
("postfix_relay_domains", "service", "add_service"),
("postfix_relay_domains", "service", "change_service"),
("postfix_relay_domains", "service", "delete_service")
]
class PostfixRelayDomains(ModoExtension):
"""Extension declaration."""
+3 -1
View File
@@ -1,7 +1,9 @@
# coding: utf-8
from django.contrib.contenttypes.models import ContentType
from django.utils.translation import ugettext as _
from django.db import IntegrityError
from django.utils.translation import ugettext as _
from modoboa.core.models import ObjectAccess, User
from modoboa.lib import events