source: asadb/forms/migrations/0010_move_people_to_cycles.py

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

Cycle-based system for people's confirmation

  • Property mode set to 100644
File size: 13.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
7import forms.models
8import groups.models
9
10class Migration(DataMigration):
11
12    def forwards(self, orm):
13        "Write your forwards methods here."
14        cycle = orm.GroupConfirmationCycle()
15        cycle.name = "Fall 2011"
16        cycle.slug = "2011-fall"
17        cycle.save()
18
19        confirmations = orm.PersonMembershipUpdate.objects.filter(deleted__isnull=True)
20        found_people = {}
21        replacements = {}
22        for confirmation in confirmations:
23            username = confirmation.username
24            if username in replacements:
25                for group in confirmation.groups.all():
26                    replacements[username].groups.add(group)
27                confirmation.deleted = datetime.datetime.now()
28                confirmation.save()
29            elif username in found_people:
30                replacement = orm.PersonMembershipUpdate()
31                replacements[username] = replacement
32                replacement.update_time = datetime.datetime.now()
33                replacement.username = username
34                replacement.cycle = cycle
35                replacement.deleted = None
36                replacement.save()
37                for group in found_people[username].groups.all():
38                    replacement.groups.add(group)
39                for group in confirmation.groups.all():
40                    replacement.groups.add(group)
41                found_people[username].deleted = datetime.datetime.now()
42                found_people[username].save()
43                del found_people[username]
44                confirmation.deleted = datetime.datetime.now()
45                confirmation.save()
46            else:
47                found_people[username] = confirmation
48        for username, confirmation in replacements.items():
49            confirmation.save()
50       
51        confirmations = orm.PersonMembershipUpdate.objects.filter(deleted__isnull=True, valid=forms.models.VALID_UNSET)
52        accounts = groups.models.AthenaMoiraAccount
53        for confirmation in confirmations:
54            try:
55                person = accounts.active_accounts.get(username=confirmation.username)
56                if person.is_student():
57                    confirmation.valid = forms.models.VALID_AUTOVALIDATED
58                else:
59                    confirmation.valid = forms.models.VALID_AUTOREJECTED
60
61            except accounts.DoesNotExist:
62                print "Could not find %s; rejecting" % (confirmation.username, )
63                confirmation.valid = forms.models.VALID_AUTOREJECTED
64            confirmation.save()
65
66
67    def backwards(self, orm):
68        "Write your backwards methods here."
69
70
71    models = {
72        'forms.fysm': {
73            'Meta': {'object_name': 'FYSM'},
74            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['forms.FYSMCategory']", 'symmetrical': 'False', 'blank': 'True'}),
75            'contact_email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
76            'description': ('django.db.models.fields.TextField', [], {}),
77            'display_name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
78            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['groups.Group']"}),
79            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
80            'join_preview': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forms.PagePreview']", 'null': 'True'}),
81            'join_url': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
82            'logo': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}),
83            'slide': ('django.db.models.fields.files.ImageField', [], {'default': "''", 'max_length': '100'}),
84            'tags': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
85            'website': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
86            'year': ('django.db.models.fields.IntegerField', [], {})
87        },
88        'forms.fysmcategory': {
89            'Meta': {'ordering': "['name']", 'object_name': 'FYSMCategory'},
90            'blurb': ('django.db.models.fields.TextField', [], {}),
91            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
92            'name': ('django.db.models.fields.CharField', [], {'max_length': '25'}),
93            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'})
94        },
95        'forms.fysmview': {
96            'Meta': {'object_name': 'FYSMView'},
97            'fysm': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forms.FYSM']", 'null': 'True', 'blank': 'True'}),
98            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
99            'page': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
100            'referer': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True'}),
101            'source_ip': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
102            'source_user': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
103            'user_agent': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
104            'when': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
105            'year': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'})
106        },
107        'forms.groupconfirmationcycle': {
108            'Meta': {'object_name': 'GroupConfirmationCycle'},
109            'create_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
110            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
111            'name': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
112            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'})
113        },
114        'forms.groupmembershipupdate': {
115            'Meta': {'object_name': 'GroupMembershipUpdate'},
116            'email_preface': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
117            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['groups.Group']"}),
118            'group_email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
119            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
120            'membership_definition': ('django.db.models.fields.TextField', [], {}),
121            'membership_list': ('django.db.models.fields.TextField', [], {}),
122            'no_discrimination': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
123            'no_hazing': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
124            'num_alum': ('django.db.models.fields.IntegerField', [], {}),
125            'num_grads': ('django.db.models.fields.IntegerField', [], {}),
126            'num_other': ('django.db.models.fields.IntegerField', [], {}),
127            'num_other_affiliate': ('django.db.models.fields.IntegerField', [], {}),
128            'num_undergrads': ('django.db.models.fields.IntegerField', [], {}),
129            'officer_email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
130            'update_time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1970, 1, 1, 0, 0)'}),
131            'updater_name': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
132            'updater_title': ('django.db.models.fields.CharField', [], {'max_length': '30'})
133        },
134        'forms.pagepreview': {
135            'Meta': {'object_name': 'PagePreview'},
136            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
137            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}),
138            'update_time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1970, 1, 1, 0, 0)'}),
139            'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
140        },
141        'forms.personmembershipupdate': {
142            'Meta': {'object_name': 'PersonMembershipUpdate'},
143            'cycle': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['forms.GroupConfirmationCycle']"}),
144            'deleted': ('django.db.models.fields.DateTimeField', [], {'default': 'None', 'null': 'True'}),
145            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['groups.Group']", 'symmetrical': 'False'}),
146            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
147            'update_time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1970, 1, 1, 0, 0)'}),
148            'username': ('django.db.models.fields.CharField', [], {'max_length': '30'}),
149            'valid': ('django.db.models.fields.IntegerField', [], {'default': '0'})
150        },
151        'groups.activitycategory': {
152            'Meta': {'object_name': 'ActivityCategory'},
153            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
154            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
155        },
156        'groups.group': {
157            'Meta': {'ordering': "('name',)", 'object_name': 'Group'},
158            'abbreviation': ('django.db.models.fields.CharField', [], {'max_length': '10', 'blank': 'True'}),
159            'activity_category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['groups.ActivityCategory']", 'null': 'True', 'blank': 'True'}),
160            'advisor_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
161            'athena_locker': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
162            'constitution_url': ('django.db.models.fields.CharField', [], {'max_length': '200', 'blank': 'True'}),
163            'description': ('django.db.models.fields.TextField', [], {}),
164            'funding_account_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
165            'group_class': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['groups.GroupClass']"}),
166            'group_email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
167            'group_funding': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['groups.GroupFunding']", 'null': 'True', 'blank': 'True'}),
168            'group_status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['groups.GroupStatus']"}),
169            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
170            'main_account_id': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
171            'meeting_times': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
172            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
173            'num_community': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
174            'num_grads': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
175            'num_other': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
176            'num_undergrads': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
177            'officer_email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
178            'recognition_date': ('django.db.models.fields.DateField', [], {}),
179            'update_date': ('django.db.models.fields.DateTimeField', [], {}),
180            'updater': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True'}),
181            'website_url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
182        },
183        'groups.groupclass': {
184            'Meta': {'object_name': 'GroupClass'},
185            'description': ('django.db.models.fields.TextField', [], {}),
186            'gets_publicity': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
187            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
188            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
189            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'})
190        },
191        'groups.groupfunding': {
192            'Meta': {'object_name': 'GroupFunding'},
193            'contact_email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
194            'funding_list': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
195            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
196            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
197            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'})
198        },
199        'groups.groupstatus': {
200            'Meta': {'object_name': 'GroupStatus'},
201            'description': ('django.db.models.fields.TextField', [], {}),
202            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
203            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
204            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
205            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'})
206        }
207    }
208
209    complete_apps = ['forms']
Note: See TracBrowser for help on using the repository browser.