Revision 5ce3ce4f 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.v2 import DataMigration |
4 | 4 |
from django.db.models import Count |
5 | 5 |
|
6 |
|
|
6 | 7 |
class Migration(DataMigration): |
7 | 8 |
def forwards(self, orm): |
8 |
|
|
9 |
|
|
9 | 10 |
def _create_groupkind(name): |
10 | 11 |
try: |
11 | 12 |
orm.GroupKind(name=name).save() |
12 | 13 |
except: |
13 | 14 |
pass |
14 |
|
|
15 |
|
|
15 | 16 |
t = ('default', 'course', 'project', 'laboratory', 'organization') |
16 | 17 |
map(_create_groupkind, t) |
17 |
|
|
18 |
|
|
18 | 19 |
default = orm.GroupKind.objects.get(name='default') |
19 |
|
|
20 |
|
|
20 | 21 |
groups = {} |
22 |
|
|
21 | 23 |
def _create_astakogroup(name): |
22 | 24 |
try: |
23 | 25 |
groups[name] = orm.AstakosGroup.objects.get(name=name) |
24 | 26 |
except orm.AstakosGroup.DoesNotExist: |
25 | 27 |
try: |
26 | 28 |
g = orm['auth.Group'].objects.get(name=name) |
27 |
groups[name] = extended = orm.AstakosGroup(group_ptr_id=g.pk) |
|
29 |
groups[ |
|
30 |
name] = extended = orm.AstakosGroup(group_ptr_id=g.pk) |
|
28 | 31 |
extended.__dict__.update(g.__dict__) |
29 | 32 |
extended.kind = default |
30 | 33 |
extended.approval_date = datetime.datetime.now() |
31 | 34 |
extended.issue_date = datetime.datetime.now() |
32 | 35 |
extended.moderation_enabled = False |
33 | 36 |
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()
|
|
37 |
).save(), |
|
37 |
map(lambda u: orm.Membership(group=extended,
|
|
38 |
person=orm.AstakosUser.objects.get(id=u.id), |
|
39 |
date_joined=datetime.datetime.now() |
|
40 |
).save(),
|
|
38 | 41 |
g.user_set.all()) |
39 | 42 |
except orm['auth.Group'].DoesNotExist: |
40 |
groups[name] = orm.AstakosGroup( name=name,
|
|
41 |
kind=default,
|
|
42 |
approval_date=datetime.datetime.now(),
|
|
43 |
issue_date=datetime.datetime.now(),
|
|
44 |
moderation_enabled=False
|
|
43 |
groups[name] = orm.AstakosGroup(name=name, |
|
44 |
kind=default, |
|
45 |
approval_date=datetime.datetime.now(), |
|
46 |
issue_date=datetime.datetime.now(), |
|
47 |
moderation_enabled=False |
|
45 | 48 |
) |
46 | 49 |
groups[name].save() |
47 |
|
|
48 |
# catch integrate |
|
49 |
t = ('default', 'shibboleth', 'helpdesk', 'faculty', 'ugrad', 'grad', 'researcher', 'associate') |
|
50 |
|
|
51 |
# catch integrate |
|
52 |
t = ('default', 'shibboleth', 'helpdesk', 'faculty', |
|
53 |
'ugrad', 'grad', 'researcher', 'associate') |
|
50 | 54 |
map(_create_astakogroup, t) |
51 |
|
|
52 |
orphans = orm.AstakosUser.objects.annotate(num_groups=Count('astakos_groups')).filter(num_groups = 0) |
|
53 |
map ( lambda u: orm.Membership(group=groups['default'], person=u, date_joined=datetime.datetime.now()).save(), orphans ) |
|
54 |
|
|
55 |
|
|
56 |
orphans = orm.AstakosUser.objects.annotate( |
|
57 |
num_groups=Count('astakos_groups')).filter(num_groups=0) |
|
58 |
map(lambda u: orm.Membership(group=groups['default'], |
|
59 |
person=u, date_joined=datetime.datetime.now()).save(), orphans) |
|
60 |
|
|
55 | 61 |
def backwards(self, orm): |
56 | 62 |
def _delete_groupkind(name): |
57 | 63 |
try: |
58 | 64 |
orm.GroupKind.objects.get(name=name).delete() |
59 | 65 |
except orm.GroupKind.DoesNotExist: |
60 | 66 |
pass |
61 |
|
|
67 |
|
|
62 | 68 |
def _delete_astakosgroup(name): |
63 | 69 |
try: |
64 | 70 |
orm.AstakosGroup.objects.get(name=name).delete() |
65 | 71 |
except orm.AstakosGroup.DoesNotExist: |
66 | 72 |
pass |
67 |
|
|
68 |
t = ('default', 'shibboleth', 'helpdesk', 'faculty', 'ugrad', 'grad', 'researcher', 'associate') |
|
73 |
|
|
74 |
t = ('default', 'shibboleth', 'helpdesk', 'faculty', |
|
75 |
'ugrad', 'grad', 'researcher', 'associate') |
|
69 | 76 |
map(_delete_astakosgroup, t) |
70 |
|
|
77 |
|
|
71 | 78 |
t = ('default', 'course', 'project', 'laboratory', 'organization') |
72 | 79 |
map(_delete_groupkind, t) |
73 | 80 |
|
Also available in: Unified diff