1*9c5db199SXin Li# use some undocumented Django tricks to execute custom logic after syncdb 2*9c5db199SXin Li 3*9c5db199SXin Lifrom django.db.models import signals 4*9c5db199SXin Lifrom django.contrib import auth 5*9c5db199SXin Lifrom django.conf import settings 6*9c5db199SXin Li# In this file, it is critical that we import models *just like this*. In 7*9c5db199SXin Li# particular, we *cannot* do import common; from autotest_lib... import models. 8*9c5db199SXin Li# This is because when we pass the models module to signal.connect(), it 9*9c5db199SXin Li# calls id() on the module, and the id() of a module can differ depending on how 10*9c5db199SXin Li# it was imported. For that reason, we must import models as Django does -- not 11*9c5db199SXin Li# through the autotest_lib magic set up through common.py. If you do that, the 12*9c5db199SXin Li# connection won't work and the dispatcher will simply never call the method. 13*9c5db199SXin Lifrom frontend.afe import models 14*9c5db199SXin Li 15*9c5db199SXin LiBASIC_ADMIN = 'Basic admin' 16*9c5db199SXin Li 17*9c5db199SXin Lidef create_admin_group(app, created_models, verbosity, **kwargs): 18*9c5db199SXin Li """\ 19*9c5db199SXin Li Create a basic admin group with permissions for managing basic autotest 20*9c5db199SXin Li objects. 21*9c5db199SXin Li """ 22*9c5db199SXin Li admin_group, created = auth.models.Group.objects.get_or_create( 23*9c5db199SXin Li name=BASIC_ADMIN) 24*9c5db199SXin Li admin_group.save() # must save before adding permissions 25*9c5db199SXin Li PermissionModel = auth.models.Permission 26*9c5db199SXin Li have_permissions = list(admin_group.permissions.all()) 27*9c5db199SXin Li for model_name in ('host', 'label', 'test', 'aclgroup', 'profiler', 28*9c5db199SXin Li 'atomicgroup', 'hostattribute'): 29*9c5db199SXin Li for permission_type in ('add', 'change', 'delete'): 30*9c5db199SXin Li codename = permission_type + '_' + model_name 31*9c5db199SXin Li permissions = list(PermissionModel.objects.filter( 32*9c5db199SXin Li codename=codename)) 33*9c5db199SXin Li if len(permissions) == 0: 34*9c5db199SXin Li if verbosity: 35*9c5db199SXin Li print(' No permission ' + codename) 36*9c5db199SXin Li continue 37*9c5db199SXin Li for permission in permissions: 38*9c5db199SXin Li if permission not in have_permissions: 39*9c5db199SXin Li if verbosity: 40*9c5db199SXin Li print(' Adding permission ' + codename) 41*9c5db199SXin Li admin_group.permissions.add(permission) 42*9c5db199SXin Li if verbosity: 43*9c5db199SXin Li if created: 44*9c5db199SXin Li print('Created group "%s"' % BASIC_ADMIN) 45*9c5db199SXin Li else: 46*9c5db199SXin Li print('Group "%s" already exists' % BASIC_ADMIN) 47*9c5db199SXin Li 48*9c5db199SXin Li 49*9c5db199SXin Liif settings.AUTOTEST_CREATE_ADMIN_GROUPS: 50*9c5db199SXin Li signals.post_syncdb.connect(create_admin_group, sender=models) 51