Mercurial > cpython-lru_cache-weakref
annotate Lib/mimetools.py @ 5817:48b94de85bf3 legacy-trunk
Extensive changes by AMK.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 17 Jul 1997 16:29:42 +0000 |
| parents | 38ef091964f0 |
| children | 2e3f244f105f |
| rev | line source |
|---|---|
|
914
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 # Various tools used by MIME-reading or MIME-writing programs. |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
4 import os |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
5 import rfc822 |
|
914
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 import string |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
7 import tempfile |
|
914
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 # A derived class of rfc822.Message that knows about MIME headers and |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 # contains some hooks for decoding encoded and multipart messages. |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 class Message(rfc822.Message): |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 |
|
2920
177f575708bb
add seekable option to __init__
Guido van Rossum <guido@python.org>
parents:
1746
diff
changeset
|
15 def __init__(self, fp, seekable = 1): |
|
177f575708bb
add seekable option to __init__
Guido van Rossum <guido@python.org>
parents:
1746
diff
changeset
|
16 rfc822.Message.__init__(self, fp, seekable) |
|
914
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 self.encodingheader = \ |
|
3030
405b473aa4a1
forget previous change (content-encoding)
Guido van Rossum <guido@python.org>
parents:
3029
diff
changeset
|
18 self.getheader('content-transfer-encoding') |
|
914
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 self.typeheader = \ |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 self.getheader('content-type') |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 self.parsetype() |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 self.parseplist() |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 def parsetype(self): |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 str = self.typeheader |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 if str == None: |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 str = 'text/plain' |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 if ';' in str: |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 i = string.index(str, ';') |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 self.plisttext = str[i:] |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 str = str[:i] |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 else: |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 self.plisttext = '' |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 fields = string.splitfields(str, '/') |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 for i in range(len(fields)): |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 fields[i] = string.lower(string.strip(fields[i])) |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 self.type = string.joinfields(fields, '/') |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 self.maintype = fields[0] |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 self.subtype = string.joinfields(fields[1:], '/') |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 def parseplist(self): |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 str = self.plisttext |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 self.plist = [] |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 while str[:1] == ';': |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 str = str[1:] |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 if ';' in str: |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 # XXX Should parse quotes! |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 end = string.index(str, ';') |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 else: |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 end = len(str) |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 f = str[:end] |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 if '=' in f: |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 i = string.index(f, '=') |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 f = string.lower(string.strip(f[:i])) + \ |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 '=' + string.strip(f[i+1:]) |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 self.plist.append(string.strip(f)) |
|
3353
f6a840e83d2a
add missing loop step to parseplist()
Guido van Rossum <guido@python.org>
parents:
3030
diff
changeset
|
57 str = str[end:] |
|
914
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 def getplist(self): |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 return self.plist |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 def getparam(self, name): |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 name = string.lower(name) + '=' |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 n = len(name) |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 for p in self.plist: |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 if p[:n] == name: |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 return rfc822.unquote(p[n:]) |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 return None |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 |
|
4357
2913597443b9
Added getparamnames() to Message class -- return a list of all
Guido van Rossum <guido@python.org>
parents:
4151
diff
changeset
|
70 def getparamnames(self): |
|
2913597443b9
Added getparamnames() to Message class -- return a list of all
Guido van Rossum <guido@python.org>
parents:
4151
diff
changeset
|
71 result = [] |
|
2913597443b9
Added getparamnames() to Message class -- return a list of all
Guido van Rossum <guido@python.org>
parents:
4151
diff
changeset
|
72 for p in self.plist: |
|
2913597443b9
Added getparamnames() to Message class -- return a list of all
Guido van Rossum <guido@python.org>
parents:
4151
diff
changeset
|
73 i = string.find(p, '=') |
|
2913597443b9
Added getparamnames() to Message class -- return a list of all
Guido van Rossum <guido@python.org>
parents:
4151
diff
changeset
|
74 if i >= 0: |
|
2913597443b9
Added getparamnames() to Message class -- return a list of all
Guido van Rossum <guido@python.org>
parents:
4151
diff
changeset
|
75 result.append(string.lower(p[:i])) |
|
2913597443b9
Added getparamnames() to Message class -- return a list of all
Guido van Rossum <guido@python.org>
parents:
4151
diff
changeset
|
76 return result |
|
2913597443b9
Added getparamnames() to Message class -- return a list of all
Guido van Rossum <guido@python.org>
parents:
4151
diff
changeset
|
77 |
|
914
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 def getencoding(self): |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 if self.encodingheader == None: |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 return '7bit' |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
81 return string.lower(self.encodingheader) |
|
914
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
82 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 def gettype(self): |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
84 return self.type |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
86 def getmaintype(self): |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 return self.maintype |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 def getsubtype(self): |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 return self.subtype |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
91 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
94 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
95 # Utility functions |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 # ----------------- |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 # Return a random string usable as a multipart boundary. |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 # The method used is so that it is *very* unlikely that the same |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 # string of characters will every occur again in the Universe, |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 # so the caller needn't check the data it is packing for the |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
103 # occurrence of the boundary. |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 # |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
105 # The boundary contains dots so you have to quote it in the header. |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
106 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 _prefix = None |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
108 |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
109 def choose_boundary(): |
|
3633
a7e3bc2a7cac
removed unused globals
Guido van Rossum <guido@python.org>
parents:
3353
diff
changeset
|
110 global _prefix |
|
914
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
111 import time |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
112 import rand |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
113 if _prefix == None: |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 import socket |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
115 import os |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 hostid = socket.gethostbyname(socket.gethostname()) |
|
4151
69a33fa3dbb8
Don't die when getuid() or getpid() aren't defined.
Guido van Rossum <guido@python.org>
parents:
3633
diff
changeset
|
117 try: |
|
69a33fa3dbb8
Don't die when getuid() or getpid() aren't defined.
Guido van Rossum <guido@python.org>
parents:
3633
diff
changeset
|
118 uid = `os.getuid()` |
|
69a33fa3dbb8
Don't die when getuid() or getpid() aren't defined.
Guido van Rossum <guido@python.org>
parents:
3633
diff
changeset
|
119 except: |
|
69a33fa3dbb8
Don't die when getuid() or getpid() aren't defined.
Guido van Rossum <guido@python.org>
parents:
3633
diff
changeset
|
120 uid = '1' |
|
69a33fa3dbb8
Don't die when getuid() or getpid() aren't defined.
Guido van Rossum <guido@python.org>
parents:
3633
diff
changeset
|
121 try: |
|
69a33fa3dbb8
Don't die when getuid() or getpid() aren't defined.
Guido van Rossum <guido@python.org>
parents:
3633
diff
changeset
|
122 pid = `os.getpid()` |
|
69a33fa3dbb8
Don't die when getuid() or getpid() aren't defined.
Guido van Rossum <guido@python.org>
parents:
3633
diff
changeset
|
123 except: |
|
69a33fa3dbb8
Don't die when getuid() or getpid() aren't defined.
Guido van Rossum <guido@python.org>
parents:
3633
diff
changeset
|
124 pid = '1' |
|
914
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
125 seed = `rand.rand()` |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
126 _prefix = hostid + '.' + uid + '.' + pid |
|
1178
f9bbb01388d5
* More changes due to stricter argument passing rules
Guido van Rossum <guido@python.org>
parents:
914
diff
changeset
|
127 timestamp = `int(time.time())` |
|
914
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
128 seed = `rand.rand()` |
|
74b716e9ac49
New modules mimetools and rfc822.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
129 return _prefix + '.' + timestamp + '.' + seed |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
130 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
131 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
132 # Subroutines for decoding some common content-transfer-types |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
133 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
134 def decode(input, output, encoding): |
|
5770
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
135 if encoding == 'base64': |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
136 import base64 |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
137 return base64.decode(input, output) |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
138 if encoding == 'quoted-printable': |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
139 import quopri |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
140 return quopri.decode(input, output) |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
141 if encoding in ('uuencode', 'x-uuencode'): |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
142 import uu |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
143 return uu.decode(input, output) |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
144 if decodetab.has_key(encoding): |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
145 pipethrough(input, decodetab[encoding], output) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
146 else: |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
147 raise ValueError, \ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
148 'unknown Content-Transfer-Encoding: %s' % encoding |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
149 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
150 def encode(input, output, encoding): |
|
5770
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
151 if encoding == 'base64': |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
152 import base64 |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
153 return base64.encode(input, output) |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
154 if encoding == 'quoted-printable': |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
155 import quopri |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
156 return quopri.encode(input, output, 0) |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
157 if encoding in ('uuencode', 'x-uuencode'): |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
158 import uu |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
159 return uu.encode(input, output) |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
160 if encodetab.has_key(encoding): |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
161 pipethrough(input, encodetab[encoding], output) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
162 else: |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
163 raise ValueError, \ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
164 'unknown Content-Transfer-Encoding: %s' % encoding |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
165 |
|
5770
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
166 # The following is no longer used for standard encodings |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
167 |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
168 # XXX This requires that uudecode and mmencode are in $PATH |
|
38ef091964f0
Use the modules base64, quopri, and uu, instead of external programs
Guido van Rossum <guido@python.org>
parents:
4357
diff
changeset
|
169 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
170 uudecode_pipe = '''( |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
171 TEMP=/tmp/@uu.$$ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
172 sed "s%^begin [0-7][0-7]* .*%begin 600 $TEMP%" | uudecode |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
173 cat $TEMP |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
174 rm $TEMP |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
175 )''' |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
176 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
177 decodetab = { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
178 'uuencode': uudecode_pipe, |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
179 'x-uuencode': uudecode_pipe, |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
180 'quoted-printable': 'mmencode -u -q', |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
181 'base64': 'mmencode -u -b', |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
182 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
183 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
184 encodetab = { |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
185 'x-uuencode': 'uuencode tempfile', |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
186 'uuencode': 'uuencode tempfile', |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
187 'quoted-printable': 'mmencode -q', |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
188 'base64': 'mmencode -b', |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
189 } |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
190 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
191 def pipeto(input, command): |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
192 pipe = os.popen(command, 'w') |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
193 copyliteral(input, pipe) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
194 pipe.close() |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
195 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
196 def pipethrough(input, command, output): |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
197 tempname = tempfile.mktemp() |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
198 try: |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
199 temp = open(tempname, 'w') |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
200 except IOError: |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
201 print '*** Cannot create temp file', `tempname` |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
202 return |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
203 copyliteral(input, temp) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
204 temp.close() |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
205 pipe = os.popen(command + ' <' + tempname, 'r') |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
206 copybinary(pipe, output) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
207 pipe.close() |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
208 os.unlink(tempname) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
209 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
210 def copyliteral(input, output): |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
211 while 1: |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
212 line = input.readline() |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
213 if not line: break |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
214 output.write(line) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
215 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
216 def copybinary(input, output): |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
217 BUFSIZE = 8192 |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
218 while 1: |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
219 line = input.read(BUFSIZE) |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
220 if not line: break |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1435
diff
changeset
|
221 output.write(line) |
