Revision 89df3638 snf-astakos-app/astakos/im/migrations/0016_populate_group_data.py

b/snf-astakos-app/astakos/im/migrations/0016_populate_group_data.py
3 3
from south.db import db
4 4
from south.v2 import DataMigration
5 5
from django.db import models
6
from django.db.models import Count
6 7

  
7 8
class Migration(DataMigration):
8 9
    def forwards(self, orm):
......
18 19
        
19 20
        default = orm.GroupKind.objects.get(name='default')
20 21
        
22
        groups = {}
21 23
        def _create_astakogroup(name):
22 24
            try:
23
                orm.AstakosGroup.objects.get(name=name)
25
                groups[name] = orm.AstakosGroup.objects.get(name=name)
24 26
            except orm.AstakosGroup.DoesNotExist:
25 27
                try:
26
                    g = orm['auth.Group'].objects.get(name=name)                    
27
                    extended = orm.AstakosGroup(group_ptr_id=g.pk)
28
                    g = orm['auth.Group'].objects.get(name=name)
29
                    groups[name] = extended = orm.AstakosGroup(group_ptr_id=g.pk)
28 30
                    extended.__dict__.update(g.__dict__)
29 31
                    extended.kind = default
30 32
                    extended.approval_date = datetime.datetime.now()
31 33
                    extended.issue_date = datetime.datetime.now()
32 34
                    extended.moderation_enabled = False
33 35
                    extended.save()
34
                    map(lambda u:orm.Membership(    group=extended, 
35
                                                    person=orm.AstakosUser.objects.get(id=u.id), 
36
                                                    date_joined=datetime.datetime.now()).save(), 
36
                    map(lambda u:orm.Membership(    group=extended,
37
                                                    person=orm.AstakosUser.objects.get(id=u.id),
38
                                                    date_joined=datetime.datetime.now()
39
                                                ).save(),
37 40
                        g.user_set.all())
38 41
                except orm['auth.Group'].DoesNotExist:
39
                    orm.AstakosGroup(   name=name, 
40
                                        kind=default, 
41
                                        approval_date=datetime.datetime.now(),
42
                                        issue_date=datetime.datetime.now(),
43
                                        moderation_enabled=False).save()
42
                    groups[name] = orm.AstakosGroup(    name=name,
43
                                                        kind=default,
44
                                                        approval_date=datetime.datetime.now(),
45
                                                        issue_date=datetime.datetime.now(),
46
                                                        moderation_enabled=False
47
                                                    )
48
                    groups[name].save()
44 49
        
45 50
        # catch integrate 
46 51
        t = ('default', 'shibboleth', 'helpdesk', 'faculty', 'ugrad', 'grad', 'researcher', 'associate')
47 52
        map(_create_astakogroup, t)
48 53
        
54
        orphans = orm.AstakosUser.objects.annotate(num_groups=Count('astakos_groups')).filter(num_groups = 0)
55
        map ( lambda u: orm.Membership(group=groups['default'], person=u).save(), orphans )
56
        
49 57
    def backwards(self, orm):
50 58
        def _delete_groupkind(name):
51 59
            try:

Also available in: Unified diff