[mhonarc] show links to archives more briefly



commit 3f00e11b0bc699df930a43ca9257e30c9c7fe018
Author: Olav Vitters <olav vitters nl>
Date:   Tue Feb 12 23:55:46 2013 +0100

    show links to archives more briefly

 archive.py |   92 ++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 59 insertions(+), 33 deletions(-)
---
diff --git a/archive.py b/archive.py
index 4bf23e1..cbd753e 100755
--- a/archive.py
+++ b/archive.py
@@ -213,6 +213,7 @@ class Archiver:
             os.symlink(os.path.join(cls.PRIVATE_ARCHIVE_DIR, listname), os.path.join(cls.PUBLIC_ARCHIVE_DIR, listname))
 
         dirs = {}
+        years = {}
         re_path = re.compile(r'^(\d+)-(\w+)$')
         for a_dir in os.listdir(path):
             mo = re_path.match(a_dir)
@@ -223,42 +224,58 @@ class Archiver:
             month = mo.group(2).lower()
 
             if month in cls.MONTHS:
-                dirs[a_dir] = (long(year) * 100) + cls.MONTHS[month]
+                monthnr = cls.MONTHS[month]
+                dirs[a_dir] = (long(year) * 100) + monthnr
+                if not year in years:
+                    years[year] = {}
+                years[year][monthnr] = (a_dir, month)
             else:
                 dirs[a_dir] = a_dir
 
             with open(os.path.join(path, 'index.html'), 'w') as fp:
-                fp.write('''
-        <table border=3>
-          <tr><td>Archive</td>
-          <td>View by:</td>
-          <td>Downloadable version</td></tr>''')
-
-
-                for a_dir in sorted(dirs, key=dirs.get):
-                    # XXX - write header 
-                    for fmt in ("%s.txt", "%s.txt.gz"):
-                        mboxfile = fmt % a_dir
-                        if os.path.exists(os.path.join(path, mboxfile)):
-                            stat = os.stat(os.path.join(path, mboxfile))
-                            mboxsize = stat.st_size
-                            break
-                    else:
-                        mboxsize = 0
-
-                    fp.write('''
-    <tr>
-    <td>%s</td>
-    <td>
-      <A href="%s/thread.html">Thread</a>
-      <A href="%s/date.html">Date</a>
-      <A href="%s/author.html">Author</a>
-    </td>
-    <td><A href="%s">%s</a></td>
-    </tr>''' % (a_dir, a_dir, a_dir, a_dir, mboxfile, human_size(mboxsize)))
+                # Overview per thread, date, author
+                for link in ("thread", "date", "author"):
+                    fp.write('<h2>By %s</h2>' % link.title())
+                    fp.write('<table border=0>')
+                    for year in sorted(years, reverse=True):
+                        fp.write('''<tr><th>%s</th>''' % year)
+
+                        for monthnr in xrange(1, 13):
+                            if monthnr in years[year]:
+                                fp.write('<td><a href="%s/%s.html">%s</a></td>' % (years[year][monthnr][0], link, years[year][monthnr][1][:3].title()))
+                            else:
+                                fp.write('<td>&nbsp;</td>')
+                        fp.write('</tr>')
+                    fp.write('</table>')
+
+                # Overview of downloadable versions
+                fp.write('<h2>Download</h2>')
+                fp.write('<table border=0>')
+                fp.write('<tr><th>Year</th>')
+                for month in sorted(cls.MONTHS, key=cls.MONTHS.get):
+                     fp.write('''<th>%s</th>''' % month[:3].title())
+
+                for year in sorted(years, reverse=True):
+                    fp.write('''<tr><th>%s</th>''' % year)
+                    for monthnr in xrange(1, 13):
+                        if monthnr in years[year]:
+                            mboxsize = 0
+                            a_dir = years[year][monthnr][0]
+                            for fmt in ("%s.txt", "%s.txt.gz"):
+                                mboxfile = fmt % a_dir
+                                if os.path.exists(os.path.join(path, mboxfile)):
+                                    stat = os.stat(os.path.join(path, mboxfile))
+                                    mboxsize = stat.st_size
+                                    break
+
+                            fp.write('<td><a href="%s">%s</a></td>' % (mboxfile, human_size(mboxsize)))
+                        else:
+                            fp.write('<td>&nbsp;</td>')
+                    fp.write('</tr>')
+                fp.write('</table>')
+
 
                 fp.write('''
-  </table>
   </div> <!-- end of div.body -->
 
   <div id="footer_community"></div>
@@ -427,7 +444,16 @@ def main():
     archiver.process_fd(options.infile)
 
 if __name__ == "__main__":
-    main()
-    print >>sys.stderr, "INCOMPLETE"
-    sys.exit(1)
+    try:
+        main()
+    except KeyboardInterrupt:
+        print('Interrupted')
+        sys.exit(1)
+    except EOFError:
+        print('EOF')
+        sys.exit(1)
+    except IOError, e:
+        if e.errno != errno.EPIPE:
+            raise
+        sys.exit(0)
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]