]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Added mboxconvert.py
authorGuido van Rossum <guido@python.org>
Mon, 5 Sep 1994 11:51:33 +0000 (11:51 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 5 Sep 1994 11:51:33 +0000 (11:51 +0000)
Demo/scripts/README
Demo/scripts/mboxconvert.py [new file with mode: 0755]

index 634160b93bd9f8a6c2ec230ba2112fd470dc62e8..5b5e88daaffeff529fdd7f85a8f9d2087eb10fcf 100644 (file)
@@ -29,6 +29,7 @@ linktree.py           Make a copy of a tree with links to original files
 lll.py                 Find and list symbolic links in current directory
 lpwatch.py             Watch BSD line printer queues
 markov.py              Markov chain simulation of words or characters
+mboxconvvert.py                Convert MH or MMDF mailboxes to unix mailbox format
 methfix.py             Fix old method syntax def f(self, (a1, ..., aN)):
 mkreal.py              Turn a symbolic link into a real file or directory
 mpzpi.py               test mpz -- print digits of pi (compare pi.py)
diff --git a/Demo/scripts/mboxconvert.py b/Demo/scripts/mboxconvert.py
new file mode 100755 (executable)
index 0000000..5567173
--- /dev/null
@@ -0,0 +1,113 @@
+#! /usr/local/bin/python
+
+# Convert  MH directories (1 message per file) or MMDF mailboxes (4x^A
+# delimited) to unix mailbox (From ... delimited) on stdout.
+# If -f is given, files contain one message per file (e.g. MH messages)
+
+import rfc822
+import sys
+import time
+import os
+import stat
+import getopt
+import regex
+
+def main():
+       dofile = mmdf
+       try:
+               opts, args = getopt.getopt(sys.argv[1:], 'f')
+       except getopt.error, msg:
+               sys.stderr.write('%s\n' % msg)
+               sys.exit(2)
+       for o, a in opts:
+               if o == '-f':
+                       dofile = message
+       if not args:
+               args = ['-']
+       sts = 0
+       for arg in args:
+               if arg == '-' or arg == '':
+                       sts = dofile(sys.stdin) or sts
+               elif os.path.isdir(arg):
+                       sts = mh(arg) or sts
+               elif os.path.isfile(arg):
+                       try:
+                               f = open(arg)
+                       except IOError, msg:
+                               sys.stderr.write('%s: %s\n' % (arg, msg))
+                               sts = 1
+                               continue
+                       sts = dofile(f) or sts
+                       f.close()
+               else:
+                       sys.stderr('%s: not found\n' % arg)
+                       sts = 1
+       if sts:
+               sys.exit(sts)
+
+numeric = regex.compile('[1-9][0-9]*')
+
+def mh(dir):
+       sts = 0
+       msgs = os.listdir(dir)
+       for msg in msgs:
+               if numeric.match(msg) != len(msg):
+                       continue
+               fn = os.path.join(dir, msg)
+               try:
+                       f = open(fn)
+               except IOError, msg:
+                       sys.stderr.write('%s: %s\n' % (fn, msg))
+                       sts = 1
+                       continue
+               sts = message(f) or sts
+       return sts
+
+def mmdf(f):
+       sts = 0
+       while 1:
+               line = f.readline()
+               if not line:
+                       break
+               if line == '\1\1\1\1\n':
+                       sts = message(f, line) or sts
+               else:
+                       sys.stderr.write(
+                               'Bad line in MMFD mailbox: %s\n' % `line`)
+       return sts
+
+def message(f, delimiter = ''):
+       sts = 0
+       # Parse RFC822 header
+       m = rfc822.Message(f)
+       # Write unix header line
+       fullname, email = m.getaddr('From')
+       tt = m.getdate('Date')
+       if tt:
+               t = time.mktime(tt)
+       else:
+               sys.stderr.write(
+                       'Unparseable date: %s\n' % `m.getheader('Date')`)
+               t = os.fstat(f.fileno())[stat.ST_MTIME]
+       print 'From', email, time.ctime(t)
+       # Copy RFC822 header
+       for line in m.headers:
+               print line,
+       print
+       # Copy body
+       while 1:
+               line = f.readline()
+               if line == delimiter:
+                       break
+               if not line:
+                       sys.stderr.write('Unexpected EOF in message\n')
+                       sts = 1
+                       break
+               if line[:5] == 'From ':
+                       line = '>' + line
+               print line,
+       # Print trailing newline
+       print
+       return sts
+
+main()