ref: 73dcb5fa40e20c280552255b35edcabf9bd2bff8
dir: /mkarchive.py/
#!/usr/bin/env python import argparse import os import errno import subprocess import time import distutils.dir_util p = argparse.ArgumentParser(description = 'Generate a mail archive') p.add_argument('-o', '--outdir', metavar='outdir', help='generate archive under this directory') p.add_argument('-m', '--mlmmjdir', metavar='listdir', help='generate archives for this list') p.add_argument('-M', '--mhonarc', metavar='mhonarc', default='/usr/bin/mhonarc', help='path to mhonarc binary') p.add_argument('-c', '--configdir', metavar='mhonarc', help='path to mhonarc config dir') p.add_argument('listname', help='', nargs='?') opts = p.parse_args() def mailmonth(mail): return time.strftime("%Y-%b", time.gmtime(os.path.getmtime(mail))) def runmailadd(lst, mail): outdir = os.path.join(opts.outdir, lst, mailmonth(mail)) mhonarc_cmd = [ opts.mhonarc, '-title', lst, '-rcfile', os.path.join(opts.configdir, 'mhonarc.rc'), '-outdir', outdir, '-add' ] distutils.dir_util.mkpath(outdir) print 'runing mhonarc with command %s' % mhonarc_cmd mhonarc = subprocess.Popen(mhonarc_cmd, stdin=subprocess.PIPE) with open(mail) as f: mhonarc.communicate(f.read()) mhonarc.wait() def addmail(lst): listdir = os.path.join(opts.outdir, lst) lastadded = os.path.join(opts.outdir, lst, '.lastindex') lastindex = 0 if os.access(lastadded, os.R_OK): with open(lastadded, 'r') as f: lastindex = int(f.read()) maxindex = lastindex maildir = os.path.join(opts.mlmmjdir, lst, "archive") print maildir for p in os.listdir(maildir): if int(p) <= lastindex: print "already added ", p continue mailfile = os.path.join(maildir, p) runmailadd(lst, mailfile) maxindex = max(lastindex, int(p)) with open(lastadded, 'w') as f: f.write(str(maxindex)) def datesorted(dates): return sorted(dates, reverse=True) def genindex(lst): listdir = os.path.join(opts.outdir, lst) with open(os.path.join(listdir, 'index.html'), 'w') as f: f.write(""" <html> <head> <title>List Archive: %s</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" href="/style.css" /> </head> <body> <header><h1>Eigenstate: %s list archives</h1></header> <nav> <a href="/">Home</a><br> <ul> <li> <a href="/lists" > Mailing Lists/ </a> </li> </ul> </nav> <article><ul>""" % (lst, lst)) for d in datesorted(os.listdir(listdir)): if os.path.isdir(os.path.join(listdir, d)): f.write('<li><a href=%s>%s</a></li>' % (d, d)) f.write(""" </ul> </article> <footer>Hey, look at me! I'm a footer!</footer> </body></html>""") def main(): addmail('myrddin-dev') genindex('myrddin-dev') if __name__ == '__main__': main()