Added department, professor models, updated courses as appropriate. OCW importer...
[oweals/karmaworld.git] / karmaworld / apps / schools / management / commands / import_usde_csv.py
1 import csv
2 from itertools import izip
3
4 from django.core.management.base import BaseCommand
5 from karmaworld.apps.schools.models import School
6
7
8 class Command(BaseCommand):
9     args = '<filename>'
10     help = ("""Import USDE csv file. add schools to the UsdeSchool model.
11         Assumes the following header:
12         Institution_ID,Institution_Name,Institution_Address,Institution_City,Institution_State,Institution_Zip,Institution_Phone,Institution_OPEID,Institution_IPEDS_UnitID,Institution_Web_Address,Campus_ID,Campus_Name,Campus_Address,Campus_City,Campus_State,Campus_Zip,Campus_IPEDS_UnitID,Accreditation_Type,Agency_Name,Agency_Status,Program_Name,Accreditation_Status,Accreditation_Date_Type,Periods,Last Action"""
13     )
14
15     def parse_school_csv(self, filename):
16         """parse a csv file, and return a list of dictionaries
17         """
18         headers = False
19         schools = []
20
21         with open(filename) as f:
22
23             reader = csv.reader(f)
24             headers = reader.next()
25             for row in reader:
26                 schools.append(row)
27
28         headers = [s.lower() for s in headers]
29
30         return [ dict(izip(headers,school)) for school in schools ]
31
32     def handle(self, *args, **kwargs):
33
34         if len(args) < 1:
35             self.stdout.write('Provide a filename\n')
36             return
37
38         filename = args[0]
39
40         school_dicts = self.parse_school_csv(filename)
41
42         self.stdout.write('Importing from list of %d schools\n' % len(school_dicts))
43
44         count = 0
45
46         for d in school_dicts:
47
48             if 'institution_id' not in d or not d['institution_id']:
49                 print d
50                 raise Exception('Error: School does not have an institution_id!')
51
52             try:
53                 school = School.objects.get(usde_id=d['institution_id'])
54
55             except School.DoesNotExist:
56                 school = School()
57                 #print d['institution_id']
58                 #print d['institution_name']
59                 count += 1
60
61
62             school.name = d['institution_name']
63             school.location = d['institution_city'] + ', ' + d['institution_state']
64             school.url = d['institution_web_address']
65             school.usde_id = d['institution_id']
66             school.save()
67
68         self.stdout.write('Imported %d NEW unique schools\n' % count)
69
70
71
72
73
74
75
76