updated parser
authorMax Usachev <maxusachev@gmail.com>
Mon, 14 Jun 2010 13:16:41 +0000 (16:16 +0300)
committerMax Usachev <maxusachev@gmail.com>
Mon, 14 Jun 2010 13:16:41 +0000 (16:16 +0300)
parsers/ldif_parser.py [new file with mode: 0644]

diff --git a/parsers/ldif_parser.py b/parsers/ldif_parser.py
new file mode 100644 (file)
index 0000000..22754db
--- /dev/null
@@ -0,0 +1,53 @@
+import re
+import sys
+sys.path.insert(0, '../..')
+#sys.path.insert(0, '../')
+from meabook.parsers.ldif import LDIFParser
+from meabook.database.SQLite import SQLite
+
+regexp = re.compile(r'o=([^,]+)')
+
+class MyLDIFParser(LDIFParser):
+    def __init__(self, fobj, database):
+        LDIFParser.__init__(self, fobj)
+        self.database = database
+
+    def handle(self, dn, entry):
+        """Process each entry from ldif file."""
+
+        # filter entries
+        if not 'uid' in entry or not 'ou' in entry:
+            return
+        if 'deleted' in dn or not 'people' in dn:
+            return
+
+        # choose proper name
+        dn = regexp.findall(dn)
+        entry['o'] = [dn[0]]
+
+        # capitalize some fields
+        for field in ['cn']:
+            entry[field][0] = ' '.join([item.decode('utf-8').capitalize() for \
+                item in entry[field][0].split(' ')])
+        self.database.add_entry(entry)
+
+    def parse(self):
+        """Start parsing."""
+
+        self.database.clear()
+        LDIFParser.parse(self)
+        self.database.save()
+
+
+if __name__ == "__main__":
+    if len(sys.argv) != 2:
+        print "USAGE: %s fname" % sys.argv[0]
+        sys.exit(-1)
+
+    try:
+        database = SQLite('/tmp/')
+        parser = MyLDIFParser(open(sys.argv[1]), database)
+    except IOError:
+        print 'Wrong file name'
+    else:
+        parser.parse()