]> git.phdru.name Git - phdru.name/phdru.name.git/blobdiff - reindex_blog.py
If there is only one entry for the day - redirect from day index to the entry.
[phdru.name/phdru.name.git] / reindex_blog.py
index 1539849088d4eac7e4309337c7b5d70149451f66..b21f4f6d245d269e9d130f616a119f0993ed92d0 100755 (executable)
@@ -9,7 +9,6 @@ __copyright__ = "Copyright (C) 2006 PhiloSoft Design"
 
 
 import sys, os
-from glob import glob
 
 try:
    import cPickle as pickle
@@ -31,7 +30,7 @@ else:
    blog_file.close()
 
 
-# blog is a dictionary mapping (year, month, day) => (title, filename, lead)
+# blog is a dictionary mapping (year, month, day) => (filename, title, lead)
 blog = {}
 years = {}
 
@@ -48,8 +47,12 @@ for dirpath, dirs, files in os.walk(os.curdir):
       lead = getattr(template, "Lead", None)
 
       if title:
-         year, month, day = dirpath.split(os.sep)[1:]
-         blog[year, month, day] = (title, os.path.basename(file), lead)
+         key = year, month, day = tuple(dirpath.split(os.sep)[1:])
+         if key in blog:
+            days = blog[key]
+         else:
+            days = blog[key] = []
+         days.append((file, title, lead))
 
          if year in years:
             months = years[year]
@@ -61,7 +64,7 @@ for dirpath, dirs, files in os.walk(os.curdir):
          else:
             days = months[month] = []
 
-         days.append(day)
+         if day not in days: days.append(day)
 
 
 # Need to save the blog?
@@ -89,8 +92,16 @@ months_names_ru0 = ['', "
 ]
 
 
-def write_template(year, month, day, titles):
-   index_name = os.path.join(year, month, day, "index.tmpl")
+def write_template(level, year, month, day, titles):
+   path = []
+   if level >= 1:
+      path.append(year)
+   if level >= 2:
+      path.append(month)
+   if level == 3:
+      path.append(day)
+   path.append("index.tmpl")
+   index_name = os.path.join(*path)
    try:
       index_tmpl = open(index_name, 'r')
       old_text = index_tmpl.read()
@@ -98,18 +109,13 @@ def write_template(year, month, day, titles):
    except IOError:
       old_text = None
 
-   new_text = []
-   show_year = not year
-   show_month = not month
-   show_day = not day
-
-   new_text.append("""\
+   new_text = ["""\
 ## THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
 #extends phd_pp_ru
 #implements respond
-""")
+"""]
 
-   if show_year:
+   if level == 0:
       new_text.append("""\
 #attr $Title = "Oleg BroytMann's blog"
 #attr $Description = "BroytMann Russian Blog Index Document"
@@ -119,8 +125,7 @@ def write_template(year, month, day, titles):
 <H1>Журнал</H1>
 """ % {"cyear": year or 2005})
 
-   elif show_month:
-
+   elif level == 1:
       new_text.append("""\
 #attr $Title = "Oleg BroytMann's blog: %(year)s"
 #attr $Description = "BroytMann Russian Blog %(year)s Index Document"
@@ -130,9 +135,8 @@ def write_template(year, month, day, titles):
 <H1>Журнал: %(year)s</H1>
 """ % {"year": year, "cyear": year or 2005})
 
-   elif show_day:
-
-      month = int(month)
+   elif level == 2:
+      imonth = int(month)
       new_text.append("""\
 #attr $Title = "Oleg BroytMann's blog: %(month_abbr_en)s %(year)s"
 #attr $Description = "BroytMann Russian Blog %(month_name_en)s %(year)s Index Document"
@@ -142,14 +146,18 @@ def write_template(year, month, day, titles):
 <H1>Журнал: %(month_name_ru0)s %(year)s</H1>
 """ % {
       "year": year, "cyear": year or 2005,
-      "month_abbr_en": months_abbrs_en[month], "month_name_en": months_names_en[month],
-      "month_name_ru0": months_names_ru0[month],
+      "month_abbr_en": months_abbrs_en[imonth], "month_name_en": months_names_en[imonth],
+      "month_name_ru0": months_names_ru0[imonth],
    })
 
-   else:
+   elif level == 3:
+      iday = int(day)
+      imonth = int(month)
 
-      day = int(day)
-      month = int(month)
+      if len(titles) == 1:
+         new_text.append("""\
+#attr $refresh = "0; URL=%s"
+""" % titles[0][3])
 
       new_text.append("""\
 #attr $Title = "Oleg BroytMann's blog: %(day)d %(month_abbr_en)s %(year)s"
@@ -160,29 +168,28 @@ def write_template(year, month, day, titles):
 <H1>Журнал: %(day)d %(month_name_ru0)s %(year)s</H1>
 """ % {
       "year": year, "cyear": year or 2005,
-      "month_abbr_en": months_abbrs_en[month], "month_name_en": months_names_en[month],
-      "month_name_ru0": months_names_ru0[month],
-      "day": day
+      "month_abbr_en": months_abbrs_en[imonth], "month_name_en": months_names_en[imonth],
+      "month_name_ru0": months_names_ru0[imonth],
+      "day": iday
    })
 
    save_titles = titles[:]
    titles.reverse()
 
    save_day = None
-   for key, tmpl, title, lead in titles:
-      year, month, day = key
+   for year, month, day, filename, title, lead in titles:
       href = []
-      if show_year:
+      if level == 0:
          href.append(year)
-      if show_month:
+      if level <= 1:
          href.append(month)
-      if show_day:
+      if level <= 2:
          href.append(day)
-      href.append(tmpl)
+      href.append(filename)
       href = '/'.join(href)
       if day[0] == '0': day = day[1:]
       if save_day <> day:
-         if show_year:
+         if level == 0:
             new_text.append('\n<h2>%s %s %s</h2>' % (day, months_names_ru[int(month)], year))
          else:
             new_text.append('\n<h2>%s %s</h2>' % (day, months_names_ru[int(month)]))
@@ -197,10 +204,9 @@ def write_template(year, month, day, titles):
 </p>
 ''' % (lead, href, title))
 
-   if show_year:
+   if level == 0:
       years = {}
-      for key, tmpl, title, lead in save_titles:
-         year, month, day = key
+      for year, month, day, filename, title, lead in save_titles:
          years[year] = True
       first_year = True
       new_text.append('''
@@ -237,17 +243,19 @@ for year in sorted(years.keys()):
    months = years[year]
    for month in sorted(months.keys()):
       month_titles = []
-      for day in months[month]:
+      for day in sorted(months[month]):
          day_titles = []
          key = year, month, day
          if key in blog:
-            title, tmpl, lead = blog[key]
-            if tmpl.endswith(".tmpl"): tmpl = tmpl[:-len("tmpl")] + "html"
-            all_titles.append((key, tmpl, title, lead))
-            year_titles.append((key, tmpl, title, lead))
-            month_titles.append((key, tmpl, title, lead))
-            day_titles.append((key, tmpl, title, lead))
-         write_template(year, month, day, day_titles)
-      write_template(year, month, '', month_titles)
-   write_template(year, '', '', year_titles)
-write_template('', '', '', all_titles[-20:])
+            for filename, title, lead in blog[key]:
+               if filename.endswith(".tmpl"):
+                  filename = filename[:-len("tmpl")] + "html"
+               value = (year, month, day, filename, title, lead)
+               all_titles.append(value)
+               year_titles.append(value)
+               month_titles.append(value)
+               day_titles.append(value)
+         write_template(3, year, month, day, day_titles)
+      write_template(2, year, month, day, month_titles)
+   write_template(1, year, month, day, year_titles)
+write_template(0, year, month, day, all_titles[-20:])