source: asadb/groups/migrations/0006_add_group_perms.py

space-accessstablestage
Last change on this file was be7c915, checked in by Alex Dehnert <adehnert@…>, 14 years ago

Make the migrations work on a new install

Apparently ContentTypes? and permissions aren't created until after Django
finishes. This is fine if you installed early before we had migrations
using those. However, if you installed later, your ContentTypes? wouldn't
be created until too late. (Naive get_or_create doesn't work, because you end
up with ContentTypes? without a reasonable name.)

  • Property mode set to 100644
File size: 9.5 KB
Line 
1# encoding: utf-8
2import datetime
3from south.db import db
4from south.v2 import DataMigration
5from django.db import models
6
7class Migration(DataMigration):
8
9    new_perms = (
10        ('view_group_private_info', 'View private group information'),
11        ('admin_group', 'Administer basic group information'),
12    )
13
14    def forwards(self, orm):
15        "Write your forwards methods here."
16        # Create the various contenttypes and permissions and stuff
17        # Otherwise the we'll end with a group without a name
18        # http://groups.google.com/group/south-users/browse_thread/thread/666994cabad1a185?pli=1
19        db.send_pending_create_signals()
20
21        # See http://stackoverflow.com/questions/1742021/adding-new-custom-permissions-in-django#answer-6149593
22        ct, created = orm['contenttypes.ContentType'].objects.get_or_create(model='group', app_label='groups') # model must be lowercase!
23        for codename, verbose_name in self.new_perms:
24            perm, created = orm['auth.permission'].objects.get_or_create(
25                content_type=ct,
26                codename=codename,
27                defaults={'name':verbose_name},
28            )
29
30
31    def backwards(self, orm):
32        "Write your backwards methods here."
33        ct = orm['contenttypes.ContentType'].objects.get(model='group', app_label='groups') # model must be lowercase!
34        for codename, verbose_name in self.new_perms:
35            perm = orm['auth.permission'].objects.get(content_type=ct, codename=codename, )
36            perm.delete()
37
38
39    models = {
40        'auth.group': {
41            'Meta': {'object_name': 'Group'},
42            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
43            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
44            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
45        },
46        'auth.permission': {
47            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
48            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
49            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
50            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
51            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
52        },
53        'auth.user': {
54            'Meta': {'object_name': 'User'},
55            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
56            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
57            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
58            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
59            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
60            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
61            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
62            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
63            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
64            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
65            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
66            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
67            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
68        },
69        'contenttypes.contenttype': {
70            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
71            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
72            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
73            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
74            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
75        },
76        'groups.activitycategory': {
77            'Meta': {'object_name': 'ActivityCategory'},
78            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
79            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
80        },
81        'groups.athenamoiraaccount': {
82            'Meta': {'object_name': 'AthenaMoiraAccount'},
83            'account_class': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
84            'add_date': ('django.db.models.fields.DateField', [], {}),
85            'del_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
86            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '45'}),
87            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
88            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '45'}),
89            'mit_id': ('django.db.models.fields.CharField', [], {'max_length': '15'}),
90            'mod_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
91            'mutable': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
92            'username': ('django.db.models.fields.CharField', [], {'max_length': '8'})
93        },
94        'groups.group': {
95            'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
96            'abbreviation': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),
97            'activity_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['groups.ActivityCategory']", 'null': 'True', 'blank': 'True'}),
98            'advisor_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
99            'athena_locker': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
100            'constitution_url': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
101            'description': ('django.db.models.fields.TextField', [], {}),
102            'funding_account_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
103            'group_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
104            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
105            'main_account_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
106            'meeting_times': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
107            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
108            'num_community': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
109            'num_grads': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
110            'num_other': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
111            'num_undergrads': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
112            'officer_email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
113            'recognition_date': ('django.db.models.fields.DateField', [], {}),
114            'update_date': ('django.db.models.fields.DateTimeField', [], {}),
115            'updater': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
116            'website_url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
117        },
118        'groups.officeholder': {
119            'Meta': {'object_name': 'OfficeHolder'},
120            'end_time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)'}),
121            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['groups.Group']"}),
122            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
123            'person': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
124            'role': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['groups.OfficerRole']"}),
125            'start_time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'})
126        },
127        'groups.officerrole': {
128            'Meta': {'object_name': 'OfficerRole'},
129            'description': ('django.db.models.fields.TextField', [], {}),
130            'display_name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
131            'grant_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
132            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
133            'max_count': ('django.db.models.fields.IntegerField', [], {'default': '10000'}),
134            'require_student': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
135            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'})
136        }
137    }
138
139    complete_apps = ['groups']
Note: See TracBrowser for help on using the repository browser.