]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Demo/scripts/mboxconvert.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Demo / scripts / mboxconvert.py
CommitLineData
4710c53d 1#! /usr/bin/env python\r
2\r
3# Convert MH directories (1 message per file) or MMDF mailboxes (4x^A\r
4# delimited) to unix mailbox (From ... delimited) on stdout.\r
5# If -f is given, files contain one message per file (e.g. MH messages)\r
6\r
7import rfc822\r
8import sys\r
9import time\r
10import os\r
11import stat\r
12import getopt\r
13import re\r
14\r
15def main():\r
16 dofile = mmdf\r
17 try:\r
18 opts, args = getopt.getopt(sys.argv[1:], 'f')\r
19 except getopt.error, msg:\r
20 sys.stderr.write('%s\n' % msg)\r
21 sys.exit(2)\r
22 for o, a in opts:\r
23 if o == '-f':\r
24 dofile = message\r
25 if not args:\r
26 args = ['-']\r
27 sts = 0\r
28 for arg in args:\r
29 if arg == '-' or arg == '':\r
30 sts = dofile(sys.stdin) or sts\r
31 elif os.path.isdir(arg):\r
32 sts = mh(arg) or sts\r
33 elif os.path.isfile(arg):\r
34 try:\r
35 f = open(arg)\r
36 except IOError, msg:\r
37 sys.stderr.write('%s: %s\n' % (arg, msg))\r
38 sts = 1\r
39 continue\r
40 sts = dofile(f) or sts\r
41 f.close()\r
42 else:\r
43 sys.stderr.write('%s: not found\n' % arg)\r
44 sts = 1\r
45 if sts:\r
46 sys.exit(sts)\r
47\r
48numeric = re.compile('[1-9][0-9]*')\r
49\r
50def mh(dir):\r
51 sts = 0\r
52 msgs = os.listdir(dir)\r
53 for msg in msgs:\r
54 if numeric.match(msg) != len(msg):\r
55 continue\r
56 fn = os.path.join(dir, msg)\r
57 try:\r
58 f = open(fn)\r
59 except IOError, msg:\r
60 sys.stderr.write('%s: %s\n' % (fn, msg))\r
61 sts = 1\r
62 continue\r
63 sts = message(f) or sts\r
64 return sts\r
65\r
66def mmdf(f):\r
67 sts = 0\r
68 while 1:\r
69 line = f.readline()\r
70 if not line:\r
71 break\r
72 if line == '\1\1\1\1\n':\r
73 sts = message(f, line) or sts\r
74 else:\r
75 sys.stderr.write(\r
76 'Bad line in MMFD mailbox: %r\n' % (line,))\r
77 return sts\r
78\r
79counter = 0 # for generating unique Message-ID headers\r
80\r
81def message(f, delimiter = ''):\r
82 sts = 0\r
83 # Parse RFC822 header\r
84 m = rfc822.Message(f)\r
85 # Write unix header line\r
86 fullname, email = m.getaddr('From')\r
87 tt = m.getdate('Date')\r
88 if tt:\r
89 t = time.mktime(tt)\r
90 else:\r
91 sys.stderr.write(\r
92 'Unparseable date: %r\n' % (m.getheader('Date'),))\r
93 t = os.fstat(f.fileno())[stat.ST_MTIME]\r
94 print 'From', email, time.ctime(t)\r
95 # Copy RFC822 header\r
96 for line in m.headers:\r
97 print line,\r
98 # Invent Message-ID header if none is present\r
99 if not m.has_key('message-id'):\r
100 global counter\r
101 counter = counter + 1\r
102 msgid = "<%s.%d>" % (hex(t), counter)\r
103 sys.stderr.write("Adding Message-ID %s (From %s)\n" %\r
104 (msgid, email))\r
105 print "Message-ID:", msgid\r
106 print\r
107 # Copy body\r
108 while 1:\r
109 line = f.readline()\r
110 if line == delimiter:\r
111 break\r
112 if not line:\r
113 sys.stderr.write('Unexpected EOF in message\n')\r
114 sts = 1\r
115 break\r
116 if line[:5] == 'From ':\r
117 line = '>' + line\r
118 print line,\r
119 # Print trailing newline\r
120 print\r
121 return sts\r
122\r
123if __name__ == "__main__":\r
124 main()\r