annotate Lib/mailcap.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents ab43715ef4ee
children 9bf650f23da5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3133
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # Mailcap file handling. See RFC 1524.
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 import os
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 import string
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 import tempfile
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 # Part 1: top-level interface.
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 def getcaps():
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 caps = {}
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 for mailcap in listmailcapfiles():
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 try:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 fp = open(mailcap, 'r')
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 except:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 continue
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 morecaps = readmailcapfile(fp)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 fp.close()
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 for key in morecaps.keys():
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 if not caps.has_key(key):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 caps[key] = morecaps[key]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 else:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 caps[key] = caps[key] + morecaps[key]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 return caps
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 def listmailcapfiles():
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 # XXX Actually, this is Unix-specific
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 if os.environ.has_key('MAILCAPS'):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 str = os.environ['MAILCAPS']
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 mailcaps = string.splitfields(str, ':')
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 else:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 if os.environ.has_key('HOME'):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 home = os.environ['HOME']
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 else:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 # Don't bother with getpwuid()
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 home = '.' # Last resort
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 mailcaps = [home + '/.mailcap', '/etc/mailcap',
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 '/usr/etc/mailcap', '/usr/local/etc/mailcap']
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 return mailcaps
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 # Part 2: the parser.
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 def readmailcapfile(fp):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 caps = {}
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 while 1:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 line = fp.readline()
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 if not line: break
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 # Ignore comments and blank lines
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 if line[0] == '#' or string.strip(line) == '':
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 continue
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 nextline = line
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 # Join continuation lines
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 while nextline[-2:] == '\\\n':
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 nextline = fp.readline()
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 if not nextline: nextline = '\n'
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 line = line[:-2] + nextline
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 # Parse the line
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 key, fields = parseline(line)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 if not (key and fields):
4148
ab43715ef4ee typo (cotinue -> continue)
Guido van Rossum <guido@python.org>
parents: 3133
diff changeset
61 continue
3133
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 # Normalize the key
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 types = string.splitfields(key, '/')
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 for j in range(len(types)):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 types[j] = string.strip(types[j])
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 key = string.lower(string.joinfields(types, '/'))
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 # Update the database
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 if caps.has_key(key):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 caps[key].append(fields)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 else:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 caps[key] = [fields]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 return caps
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
73
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 def parseline(line):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 fields = []
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 i, n = 0, len(line)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 while i < n:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 field, i = parsefield(line, i, n)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 fields.append(field)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 i = i+1 # Skip semicolon
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 if len(fields) < 2:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
82 return None, None
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 key, view, rest = fields[0], fields[1], fields[2:]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 fields = {'view': view}
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 for field in rest:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 i = string.find(field, '=')
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 if i < 0:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 fkey = field
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 fvalue = ""
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 else:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 fkey = string.strip(field[:i])
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 fvalue = string.strip(field[i+1:])
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 if fields.has_key(fkey):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 # Ignore it
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 pass
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 else:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 fields[fkey] = fvalue
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 return key, fields
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
99
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 def parsefield(line, i, n):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 start = i
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 while i < n:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 c = line[i]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 if c == ';':
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 break
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 elif c == '\\':
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 i = i+2
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 else:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
109 i = i+1
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 return string.strip(line[start:i]), i
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
111
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
112
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 # Part 3: using the database.
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
114
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 def findmatch(caps, type, key='view', filename="/dev/null", plist=[]):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 entries = lookup(caps, type, key)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
117 for e in entries:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 if e.has_key('test'):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 test = subst(e['test'], filename, plist)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 if test and os.system(test) != 0:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 continue
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 command = subst(e[key], type, filename, plist)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
123 return command, e
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 return None, None
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
125
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 def lookup(caps, type, key=None):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 entries = []
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 if caps.has_key(type):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 entries = entries + caps[type]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 types = string.splitfields(type, '/')
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 type = types[0] + '/*'
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 if caps.has_key(type):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 entries = entries + caps[type]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 if key is not None:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
135 entries = filter(lambda e, key=key: e.has_key(key), entries)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
136 return entries
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
137
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 def subst(field, type, filename, plist=[]):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
139 # XXX Actually, this is Unix-specific
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 res = ''
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 i, n = 0, len(field)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 while i < n:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 c = field[i]; i = i+1
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
144 if c <> '%':
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 if c == '\\':
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
146 c = field[i:i+1]; i = i+1
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 res = res + c
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
148 else:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
149 c = field[i]; i = i+1
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 if c == '%':
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 res = res + c
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
152 elif c == 's':
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 res = res + filename
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 elif c == 't':
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 res = res + type
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 elif c == '{':
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 start = i
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 while i < n and field[i] <> '}':
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 i = i+1
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 name = field[start:i]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 i = i+1
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 res = res + findparam(name, plist)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 # XXX To do:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 # %n == number of parts if type is multipart/*
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 # %F == list of alternating type and filename for parts
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 else:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 res = res + '%' + c
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 return res
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
169
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
170 def findparam(name, plist):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 name = string.lower(name) + '='
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 n = len(name)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
173 for p in plist:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 if string.lower(p[:n]) == name:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 return p[n:]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 return ''
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
177
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
178
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
179 # Part 4: test program.
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
180
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 def test():
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 import sys
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 caps = getcaps()
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
184 if not sys.argv[1:]:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 show(caps)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 return
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
187 for i in range(1, len(sys.argv), 2):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 args = sys.argv[i:i+2]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 if len(args) < 2:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 print "usage: mailcap [type file] ..."
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 return
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 type = args[0]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 file = args[1]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 command, e = findmatch(caps, type, 'view', file)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 if not command:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 print "No viewer found for", type
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 else:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 print "Executing:", command
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 sts = os.system(command)
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
200 if sts:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 print "Exit status:", sts
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
202
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 def show(caps):
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 print "Mailcap files:"
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 for fn in listmailcapfiles(): print "\t" + fn
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 print
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 if not caps: caps = getcaps()
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 print "Mailcap entries:"
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 print
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 ckeys = caps.keys()
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 ckeys.sort()
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 for type in ckeys:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
213 print type
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
214 entries = caps[type]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 for e in entries:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 keys = e.keys()
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 keys.sort()
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 for k in keys:
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 print " %-15s" % k, e[k]
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 print
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
221
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 if __name__ == '__main__':
591287a22ee5 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 test()