added fields filter for ldif parser
[meabook] / parsers / ldif_parser.py
1 import re
2 import sys
3 sys.path.insert(0, '../..')
4 sys.path.insert(0, '../')
5 from meabook.parsers.ldif import LDIFParser
6 from meabook.database.SQLite import SQLite
7
8 regexp = re.compile(r'o=([^,]+)')
9
10 class MeabookLDIFParser(LDIFParser):
11     def __init__(self, fobj, database):
12         LDIFParser.__init__(self, fobj)
13         self.database = database
14
15     def handle(self, dn, entry):
16         """Process each entry from ldif file."""
17
18         # filter entries
19         if (not 'uid' in entry) or (not 'ou' in entry):
20             return
21         if ('deleted' in dn) or (not 'people' in dn):
22             return
23
24         # remove unused fields
25         used_fields = ['cn', 'uid', 'title', 'mail', 'uidNumber', \
26             'employeeNumber', 'homePhone', 'telephoneNumber', 'internalPhone', \
27             'mobile', 'gender', 'o', 'ou', 'personalTitle', 'gecos', 'sn', \
28             'givenName', 'initials', 'roomNumber', 'description', 'st', \
29             'facsimileTelephoneNumber', 'departmentNumber', 'displayName', \
30             'dateOfBirth']
31         for field in entry.keys():
32             if field not in used_fields:
33                 del entry[field]
34
35         # choose proper name
36         dn = regexp.findall(dn)
37         entry['o'] = [dn[0]]
38
39         # capitalize some fields
40         for field in ['cn']:
41             entry[field][0] = ' '.join([item.decode('utf-8').capitalize() for \
42                 item in entry[field][0].split(' ')])
43         self.database.add_entry(entry)
44
45     def parse(self):
46         """Start parsing."""
47
48         self.database.clear()
49         LDIFParser.parse(self)
50         self.database.save()
51
52
53 if __name__ == "__main__":
54     if len(sys.argv) != 2:
55         print "USAGE: %s fname" % sys.argv[0]
56         sys.exit(-1)
57
58     try:
59         database = SQLite('/tmp/')
60         parser = MeabookLDIFParser(open(sys.argv[1]), database)
61     except IOError:
62         print 'Wrong file name'
63     else:
64         parser.parse()
65