shithub: mkarchive

ref: 73dcb5fa40e20c280552255b35edcabf9bd2bff8
dir: /mkarchive.py/

View raw version
#!/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()