management.py revision 56e9377c6d618ba478bc2ca92679830ece8dff52
1# use some undocumented Django tricks to execute custom logic after syncdb
2
3from django.dispatch import dispatcher
4from django.db.models import signals
5from django.contrib import auth
6import common
7from autotest_lib.frontend.afe import models
8
9BASIC_ADMIN = 'Basic admin'
10
11def create_admin_group(app, created_models, verbosity, **kwargs):
12    """\
13    Create a basic admin group with permissions for managing basic autotest
14    objects.
15    """
16    admin_group, created = auth.models.Group.objects.get_or_create(
17        name=BASIC_ADMIN)
18    admin_group.save() # must save before adding permissions
19    PermissionModel = auth.models.Permission
20    have_permissions = list(admin_group.permissions.all())
21    for model_name in ('host', 'label', 'test', 'acl_group', 'profiler'):
22        for permission_type in ('add', 'change', 'delete'):
23            codename = permission_type + '_' + model_name
24            permissions = list(PermissionModel.objects.filter(
25                codename=codename))
26            if len(permissions) == 0:
27                print '  No permission ' + codename
28                continue
29            for permission in permissions:
30                if permission not in have_permissions:
31                    print '  Adding permission ' + codename
32                    admin_group.permissions.add(permission)
33    if created:
34        print 'Created group "%s"' % BASIC_ADMIN
35    else:
36        print 'Group "%s" already exists' % BASIC_ADMIN
37
38
39dispatcher.connect(create_admin_group, sender=models,
40                   signal=signals.post_syncdb)
41