source: asadb/util/import_db.py

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

Import notes and other account ids from the old DB

  • Property mode set to 100755
File size: 4.2 KB
Line 
1#!/usr/bin/python
2import csv
3import datetime
4import os
5import sys
6
7if __name__ == '__main__':
8    cur_file = os.path.abspath(__file__)
9    django_dir = os.path.abspath(os.path.join(os.path.dirname(cur_file), '..'))
10    sys.path.append(django_dir)
11    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
12
13from django.db import transaction
14import django.contrib.auth.models
15import reversion
16
17import groups.models
18
19def canonicalize_email(email):
20    if '@' in email: return email
21    elif email == '': return ''
22    else: return email + "@mit.edu"
23
24def db_parse_date(string):
25    return datetime.datetime.strptime(string, '%d-%b-%y').date()
26
27def convert_to_int(number):
28    if number == 'n/a': return None
29    if number == '': return None
30    if number == 'none': return None
31    else: return int(number)
32
33def import_group(d):
34    g = groups.models.Group()
35    g.pk                = d['ASA_STUDENT_GROUP_KEY']
36    g.name              = d['STUDENT_GROUP_NAME']
37    g.abbreviation      = d['STUDENT_GROUP_ACRONYM']
38    g.description       = d['STUDENT_GROUP_DESCRIPTION']
39    cat_name = d['GROUP_ACTIVITY_CATEGORY']
40    try:
41        g.activity_category = groups.models.ActivityCategory.objects.get(name=cat_name)
42    except groups.models.ActivityCategory.DoesNotExist:
43        print ">> Unknown category '%s' on group '%s'" % (cat_name, g.name, )
44        pass
45    class_name = d['GROUP_CLASS']
46    status_name = d['GROUP_STATUS']
47    funding_name = d['GROUP_FUNDING_TYPE']
48    if class_name == 'Standard':
49        if status_name == 'Provisional':
50            class_name = 'Unfunded'
51            status_name = 'Active'
52        elif status_name == 'Active':
53            class_name = 'MIT-funded'
54        elif status_name == 'Suspended' or status_name == 'Derecognized':
55            class_name = 'MIT-funded'
56    g.group_class = groups.models.GroupClass.objects.get(name=class_name)
57    g.group_status = groups.models.GroupStatus.objects.get(name=status_name)
58    if funding_name == 'none':
59        g.group_funding = None
60    else:
61        g.group_funding = groups.models.GroupFunding.objects.get(name=funding_name)
62    g.website_url       = d['WEBSITE_URL']
63    g.constitution_url  = d['CONSTITUTION_WEB_URL']
64    g.meeting_times     = d['MEETING_TIMES']
65    g.advisor_name      = d['ADVISOR']
66    g.num_undergrads    = convert_to_int(d['NUM_OF_UNDERGRADUATE'])
67    g.num_grads         = convert_to_int(d['NUM_OF_GRADUATE'])
68    g.num_community     = convert_to_int(d['NUM_OF_COMMUNITY'])
69    g.num_other         = convert_to_int(d['NUM_OF_OTHERS'])
70    g.group_email       = canonicalize_email(d['STUDENT_GROUP_EMAIL'])
71    g.officer_email     = canonicalize_email(d['OFFICER_EMAIL'])
72    try:
73        g.main_account_id   = convert_to_int(d['MAIN_ACCOUNT_ID'])
74    except ValueError:
75        if d['MAIN_ACCOUNT_ID'] == "contact LWard":
76            print "Ignoring account ID contact LWard..."
77            g.main_account_id = None
78        else:
79            raise
80    g.funding_account_id= convert_to_int(d['FUNDING_ACCOUNT_ID'])
81    g.athena_locker     = d['ATHENA_LOCKER']
82    g.recognition_date  = db_parse_date(d['RECOGNITION_DATE'])
83    g.update_date       = db_parse_date(d['UPDATE_DATE'])
84    g.updater           = d['UPDATER']
85    g.save()
86
87    if d['NOTE']:
88        notes, created = groups.models.GroupNote.objects.get_or_create(group=g, author='importer/legacy-notes@SYSTEM', )
89        notes.body = d['NOTE']
90        notes.acl_read_group = False
91        notes.acl_read_office = False
92        notes.save()
93
94    if d['OTHER_ACCOUNT_IDS']:
95        accounts, created = groups.models.GroupNote.objects.get_or_create(group=g, author='importer/other-accounts@SYSTEM', )
96        accounts.body = d['OTHER_ACCOUNT_IDS']
97        accounts.acl_read_group = True
98        accounts.acl_read_office = True
99        accounts.save()
100
101@transaction.commit_on_success
102def import_groups(reader):
103    with reversion.create_revision():
104        for line in reader:
105            #print line
106            import_group(line)
107        importer = django.contrib.auth.models.User.objects.get(username='importer@SYSTEM', )
108        reversion.set_user(importer)
109        reversion.set_comment("Groups importer")
110
111
112if __name__ == '__main__':
113    indb = sys.stdin
114    reader = csv.DictReader(indb)
115    import_groups(reader)
Note: See TracBrowser for help on using the repository browser.