annotate bin/rq.py @ 5:bca2a490a6f4

updated
author Henry S. Thompson <ht@inf.ed.ac.uk>
date Wed, 16 Sep 2026 19:50:53 +0100
parents 2aa53823fb21
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
1 #!/usr/bin/python2
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
2 import sys
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
3 import re
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
4 import locale
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
5 from os import stat, unlink, system
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
6 from mailbox import mbox
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
7 from email.parser import Parser
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
8 import datetime
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
9 from tempfile import NamedTemporaryFile
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
10
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
11 locale.setlocale(locale.LC_ALL, '')
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
12
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
13 def cmp1(x,y):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
14 c1=cmp(x[0],y[0])
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
15 if c1:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
16 return c1
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
17 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
18 return cmp(x[1],y[1])
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
19
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
20 def cmp2(x,y):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
21 c1=cmp(x[0],y[0])
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
22 if c1:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
23 return c1
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
24 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
25 return locale.strcoll(x[1],y[1])
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
26
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
27 def dumpHdrsAndText(msg,outfile):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
28 #print "MSG: %s"%repr(msg)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
29 #print >>sys.stderr,'Content-Type: %s'%msg.get('Content-Type',None)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
30 #print >>sys.stderr,'Content-Transfer-Encoding: %s'%msg.get('Content-Transfer-Encoding',None)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
31 outfile.writelines("%s: %s\n"%(k,v) for (k,v) in msg.items())
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
32 outfile.write("\n")
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
33 if msg.is_multipart():
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
34 outfile.write('\nmultipart: %s\n\n'%len(msg.get_payload()))
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
35 for m in msg.get_payload():
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
36 #print "PART: %s"%repr(m)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
37 #print "part %s"%m.get('Content-Type','xx')
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
38 dumpHdrsAndText(m,outfile)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
39 elif msg.get('Content-Type',None).find('text/')==0:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
40 outfile.write(msg.get_payload(decode=True))
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
41 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
42 #print 'OCT: %s'%msg.get('Content-Type','xx')
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
43 pass
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
44
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
45 pl=re.compile("([^\t]*)\t\\[file://([^\\]]*)\\]\t\[(.*)\]\t")
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
46 pif=re.compile("/(pers|group)-([12][0-9][0-9][0-9].[01][0-9])/([0-9]*)")
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
47 pof=re.compile("/.evolution/mail/local/([12][0-9][0-9][0-9].[01][0-9])$")
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
48 ovf=re.compile("\.overview$")
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
49 incoming={}
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
50 outgoing={}
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
51 other=[]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
52 mboxes={}
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
53 tfl=[]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
54 ov=0
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
55 mparser=None
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
56
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
57 dosort=sys.argv[1]=="1"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
58 doless=sys.argv[2]=="1"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
59
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
60 locs=[]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
61
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
62 for l in sys.stdin:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
63 res=pl.match(l.rstrip())
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
64 if res:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
65 (type,filename,subj)=res.groups()
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
66 #print type, filename, subj
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
67 res=pif.search(filename)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
68 if res:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
69 if ovf.search(filename):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
70 ov=ov+1
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
71 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
72 incoming[(res.group(2),res.group(3))]=filename
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
73 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
74 res=pof.search(filename)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
75 if res:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
76 k=(res.group(1),subj)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
77 n=outgoing.get(k,0)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
78 outgoing[k]=n+1
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
79 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
80 try:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
81 k=stat(filename).st_mtime
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
82 #k=1216786059.1472759
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
83 other+=[(k,filename,subj)]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
84 except:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
85 pass
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
86 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
87 print >> sys.stderr, "oops:",l
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
88 print "%s pers, %s out, %s other, %s .overview"%(len(incoming),len(outgoing),len(other),ov)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
89 ik=incoming.keys()
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
90 ok=outgoing.keys()
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
91 xk=other
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
92 if dosort:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
93 ik.sort(cmp=cmp1,reverse=True)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
94 ok.sort(cmp=cmp2,reverse=True)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
95 xk.sort(cmp=cmp2,reverse=True)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
96 ikl=len(ik)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
97 okl=len(ok)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
98 xkl=len(xk)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
99 i=o=x=0
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
100 iTop=None
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
101 oTop=None
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
102 xTop=None
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
103 # if not sorted will be pretty messed up. . .
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
104 while (i<ikl or o<okl or x<xkl):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
105 if (iTop is None):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
106 if (i<ikl):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
107 iTop = ik[i][0]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
108 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
109 iTop = "0000-00"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
110 if (oTop is None):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
111 if (o<okl):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
112 oTop = ok[o][0]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
113 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
114 oTop = "0000-00"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
115 if (xTop is None):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
116 if (x<xkl):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
117 xTop = datetime.date.fromtimestamp(xk[x][0]).strftime("%Y-%m")
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
118 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
119 xTop = "0000-00"
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
120 if iTop>=oTop:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
121 if iTop>=xTop:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
122 # it's i we want
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
123 #print >>sys.stderr,"i",i,iTop,ik[i],incoming[ik[i]]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
124 iloc=incoming[ik[i]]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
125 if doless:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
126 # check for encoded text
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
127 ccmd="grep -Pzq 'Content-Transfer-Encoding: base64' \"%s\""%iloc
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
128 #print >>sys.stderr,ccmd
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
129 #sys.stderr.flush()
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
130 if not system(ccmd):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
131 if mparser is None:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
132 mparser=Parser()
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
133 tf=NamedTemporaryFile(delete=False)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
134 print >>tf,iloc
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
135 dumpHdrsAndText(mparser.parse(open(iloc)),tf)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
136 tfl.append(tf.name)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
137 tf.close()
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
138 iloc=tf.name
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
139 locs.append(iloc)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
140 i=i+1
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
141 iTop=None
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
142 continue
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
143 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
144 # it's x we want
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
145 pass
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
146 elif oTop>=xTop:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
147 # it's o we want
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
148 #print "o",o,oTop,ok[o],outgoing[ok[o]]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
149 k=ok[o]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
150 res=int(outgoing[k])
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
151 # Need to write a temporary file drawn from k[0] for successive
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
152 # subjects == k[1]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
153 if doless:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
154 try:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
155 mb=mboxes[oTop]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
156 except KeyError:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
157 mboxes[oTop]=mb=mbox("/disk/scratch/mail/cpy/general/"+oTop).values()
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
158 for m in mb:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
159 if m['subject']==k[1]:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
160 tf=NamedTemporaryFile(delete=False)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
161 locs.append(tf.name)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
162 tfl.append(tf.name)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
163 tf.write(m.as_string())
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
164 tf.close()
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
165 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
166 locs.append("%s/%s"%(oTop,k[1]))
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
167 o=o+1
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
168 oTop=None
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
169 continue
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
170 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
171 # it's x we want
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
172 pass
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
173 #print >>sys.stderr,"x",x,xTop,xk[x]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
174 #sys.stderr.flush()
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
175 xloc=xk[x][1]
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
176 if doless:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
177 # check for encoded text
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
178 ccmd="grep -Pzq 'Content-Transfer-Encoding: base64' \"%s\""%xloc
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
179 #print >>sys.stderr,ccmd
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
180 #sys.stderr.flush()
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
181 if not system(ccmd):
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
182 if mparser is None:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
183 mparser=Parser()
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
184 tf=NamedTemporaryFile(delete=False)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
185 print >>tf,xloc
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
186 dumpHdrsAndText(mparser.parse(open(xloc)),tf)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
187 tfl.append(tf.name)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
188 tf.close()
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
189 xloc=tf.name
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
190 locs.append(xloc)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
191 x=x+1
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
192 xTop=None
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
193 if doless:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
194 system('less '+' '.join(locs))
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
195 else:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
196 print '\n'.join(locs)
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
197 for f in tfl:
2aa53823fb21 new repo
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
198 unlink(f)