finished work on contacts search
[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', 'homePhone', 'o'
26             'telephoneNumber', 'internalPhone', 'mobile', 'gender', 'ou', \
27             'sn', 'givenName', 'initials', 'dateOfBirth', \
28             'facsimileTelephoneNumber']
29         for field in entry.keys():
30             if field not in used_fields:
31                 del entry[field]
32
33         # choose proper name
34         dn = regexp.findall(dn)
35         entry['o'] = [dn[0]]
36
37         # capitalize some fields
38         for field in ['cn']:
39             entry[field][0] = ' '.join([item.decode('utf-8').capitalize() for \
40                 item in entry[field][0].split(' ')])
41         self.database.add_entry(entry)
42
43     def parse(self):
44         """Start parsing."""
45
46         self.database.clear()
47         LDIFParser.parse(self)
48         self.database.save()
49
50
51 if __name__ == "__main__":
52     if len(sys.argv) != 2:
53         print "USAGE: %s fname" % sys.argv[0]
54         sys.exit(-1)
55
56     try:
57         database = SQLite('/tmp/')
58         parser = MeabookLDIFParser(open(sys.argv[1]), database)
59     except IOError:
60         print 'Wrong file name'
61     else:
62         parser.parse()
63