classify-users: determine type of Athena accounts
[user/alex/software/my-snippets.git] / get-emails
1 #!/usr/bin/python
2
3 import sys
4 import os
5 import csv
6 import ldap
7
8 def dictize_line(header, line,):
9     line_dict = {}
10     for key, elem in zip(header, line, ):
11         line_dict[key]=elem
12     return line_dict
13
14 def undictize_line(headers, dct, ):
15     line = []
16     for col in headers:
17         line.append(dct[col])
18     return line
19
20 def get_ldap_data(lastname, fields):
21     con = ldap.open('ldap.mit.edu')
22     con.simple_bind_s("", "")
23     dn = "dc=mit,dc=edu"
24     result = con.search_s('dc=mit,dc=edu', ldap.SCOPE_SUBTREE, '(&(sn=%s)(uid=*))'%lastname, fields)
25     if len(result) > 1: sys.stderr.write("WARNING: More than one result returned for %s\n" % lastname)
26     if len(result) < 1: sys.stderr.write("WARNING: No results returned for %s\n" % lastname)
27     ret = []
28     for person in result:
29         retelem = {}
30         for key in person[1]:
31             retelem[key] = person[1][key][0]
32         ret.append(retelem)
33     return ret
34
35 if __name__ == '__main__':
36     indb = sys.stdin
37     outdb = sys.stdout
38     reader = csv.reader(indb, )
39     writer = csv.writer(outdb, )
40     header = reader.next()
41     for line in reader:
42         line_dict = dictize_line(header, line)
43         try:
44             new_lines = get_ldap_data(line_dict['Last'], ['cn', 'sn', 'givenName', 'uid', ])
45         except ldap.SIZELIMIT_EXCEEDED, e:
46             pass
47         for new_line in new_lines:
48             writer.writerow(line + undictize_line(['uid', 'cn', ], new_line))