Author: pquerna
Date: Sun Aug 23 23:31:32 2009
New Revision: 807032

URL: http://svn.apache.org/viewvc?rev=807032&view=rev
Log:
Add basic mbox file parser, based on he native Python MIME parsing classes, 
with a few additions to parse mbox files, or byte ranges of an mbox file.

Added:
    labs/mboxed/trunk/mboxed/mboxed/lib/mbox.py   (with props)

Added: labs/mboxed/trunk/mboxed/mboxed/lib/mbox.py
URL: 
http://svn.apache.org/viewvc/labs/mboxed/trunk/mboxed/mboxed/lib/mbox.py?rev=807032&view=auto
==============================================================================
--- labs/mboxed/trunk/mboxed/mboxed/lib/mbox.py (added)
+++ labs/mboxed/trunk/mboxed/mboxed/lib/mbox.py Sun Aug 23 23:31:32 2009
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+#
+#
+#
+#
+
+import email
+from email.parser import Parser as _Parser
+from email.parser import FeedParser as _FeedParser
+
+class Message(email.message.Message):
+    offset = 0
+    length = 0
+    pass
+    
+
+class Parser:
+    def __init__(self, path):
+        self.path = path
+        self.fp = None
+        self.parser = None 
+
+    def _openfp(self):
+        if self.fp is None:
+            self.fp = open(self.path, 'rb')
+        
+    def message_at_offset(self, offset, length):
+        self._openfp()
+        self.fp.seek(offset)
+        data = self.fp.read(length)
+        p = _Parser(Message)
+        m = p.parsestr(data)
+        m.length = length
+        m.offset = offset
+        return m
+
+    def reset(self):
+        self._openfp()
+        self.fp.seek(0)
+        
+    def next(self):
+        self._openfp()
+        p = _FeedParser(Message)
+        offset = self.fp.tell()
+        last_blank = False
+        while True:
+            line = self.fp.readline()
+            if line is None or line == "":
+                break
+            if last_blank and line[0:5] == "From ":
+                break
+            last_blank = False
+            if line == "\n" or line == "\r\n":
+                last_blank = True
+            p.feed(line)
+        m = p.close()
+        m.offset = offset
+        m.length = self.fp.tell() - m.offset
+        if m.length == 0:
+            return None
+        return m

Propchange: labs/mboxed/trunk/mboxed/mboxed/lib/mbox.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: labs/mboxed/trunk/mboxed/mboxed/lib/mbox.py
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: labs/mboxed/trunk/mboxed/mboxed/lib/mbox.py
------------------------------------------------------------------------------
    svn:mime-type = text/plain



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to