]> git.phdru.name Git - phdru.name/phdru.name.git/commitdiff
Recursively walk all directories including days.
authorOleg Broytman <phd@phdru.name>
Wed, 1 Mar 2006 16:32:19 +0000 (16:32 +0000)
committerOleg Broytman <phd@phdru.name>
Wed, 1 Mar 2006 16:32:19 +0000 (16:32 +0000)
Pickle blog only if it's changed.
Generate indices for days.

git-svn-id: file:///home/phd/archive/SVN/phdru.name/scripts@9 7bb0bf08-9e0d-0410-b083-99cee3bf18b8

reindex_blog.py

index 67461c0a89d5ee65ad3f5d47856d6b9900939e6f..1539849088d4eac7e4309337c7b5d70149451f66 100755 (executable)
@@ -7,6 +7,7 @@ __date__ = "$Date$"[7:-2]
 __author__ = "Oleg BroytMann <phd@phd.pp.ru>"
 __copyright__ = "Copyright (C) 2006 PhiloSoft Design"
 
+
 import sys, os
 from glob import glob
 
@@ -17,56 +18,61 @@ except ImportError:
 
 from Cheetah.Template import Template
 
+
+# Load old blog
+
 blog_filename = sys.argv[1]
 try:
    blog_file = open(blog_filename, "rb")
 except IOError:
-   blog = {}
+   old_blog = {}
 else:
-   blog = pickle.load(blog_file)
+   old_blog = pickle.load(blog_file)
    blog_file.close()
 
+
+# blog is a dictionary mapping (year, month, day) => (title, filename, lead)
+blog = {}
 years = {}
-months = sys.argv[2:]
-isdir = os.path.isdir
-
-if not months:
-   for year in os.listdir(os.curdir):
-      if isdir(year):
-         years[year] = {}
-         for month in os.listdir(year):
-            m = os.path.join(year, month)
-            if isdir(m):
-               months.append(m)
-
-days = []
-for month in months:
-   year, m = month.split(os.sep)
-   if year not in years:
-      years[year] = {}
-   years[year][m] = days_of_month = []
-   for day in os.listdir(month):
-         d = os.path.join(month, day)
-         if isdir(d):
-            days.append(d)
-            days_of_month.append(d)
-
-for day in days:
-   for tmpl in glob(os.path.join(day, "*.tmpl")):
-      template = Template(file=tmpl)
+
+# Walk the directory recursively
+for dirpath, dirs, files in os.walk(os.curdir):
+   for file in files:
+      # Ignore index.tmpl and *.html files; supose all other files are *.tmpl
+      if file == "index.tmpl" or file.endswith(".html"):
+         continue
+      fullpath = os.path.join(dirpath, file)
+      template = Template(file=fullpath)
       title_parts = template.Title.split()
       title = ' '.join(title_parts[6:])
       lead = getattr(template, "Lead", None)
 
       if title:
-         day_parts = day.split(os.sep)
-         blog[tuple(day_parts)] = (title, os.path.basename(tmpl), lead)
+         year, month, day = dirpath.split(os.sep)[1:]
+         blog[year, month, day] = (title, os.path.basename(file), lead)
+
+         if year in years:
+            months = years[year]
+         else:
+            months = years[year] = {}
+
+         if month in months:
+            days = months[month]
+         else:
+            days = months[month] = []
 
-blog_file = open(blog_filename, "wb")
-pickle.dump(blog, blog_file, pickle.HIGHEST_PROTOCOL)
-blog_file.close()
+         days.append(day)
 
 
+# Need to save the blog?
+if blog <> old_blog:
+   blog_file = open(blog_filename, "wb")
+   pickle.dump(blog, blog_file, pickle.HIGHEST_PROTOCOL)
+   blog_file.close()
+
+
+# Localized month names
+
 import locale
 locale.setlocale(locale.LC_ALL, '')
 from calendar import _localized_day, _localized_month
@@ -83,8 +89,8 @@ months_names_ru0 = ['', "
 ]
 
 
-def write_template(year, month, titles):
-   index_name = os.path.join(year, month, "index.tmpl")
+def write_template(year, month, day, titles):
+   index_name = os.path.join(year, month, day, "index.tmpl")
    try:
       index_tmpl = open(index_name, 'r')
       old_text = index_tmpl.read()
@@ -95,6 +101,7 @@ def write_template(year, month, titles):
    new_text = []
    show_year = not year
    show_month = not month
+   show_day = not day
 
    new_text.append("""\
 ## THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
@@ -123,7 +130,7 @@ def write_template(year, month, titles):
 <H1>Журнал: %(year)s</H1>
 """ % {"year": year, "cyear": year or 2005})
 
-   else:
+   elif show_day:
 
       month = int(month)
       new_text.append("""\
@@ -139,6 +146,25 @@ def write_template(year, month, titles):
       "month_name_ru0": months_names_ru0[month],
    })
 
+   else:
+
+      day = int(day)
+      month = int(month)
+
+      new_text.append("""\
+#attr $Title = "Oleg BroytMann's blog: %(day)d %(month_abbr_en)s %(year)s"
+#attr $Description = "BroytMann Russian Blog %(day)d %(month_name_en)s %(year)s Index Document"
+#attr $Copyright = %(cyear)s
+##
+#def body_html
+<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
+   })
+
    save_titles = titles[:]
    titles.reverse()
 
@@ -150,7 +176,8 @@ def write_template(year, month, titles):
          href.append(year)
       if show_month:
          href.append(month)
-      href.append(day)
+      if show_day:
+         href.append(day)
       href.append(tmpl)
       href = '/'.join(href)
       if day[0] == '0': day = day[1:]
@@ -204,44 +231,23 @@ $phd_pp_ru.respond(self)
       index_tmpl.close()
 
 
-def translate(tmpl):
-   if tmpl == "index.tmpl": tmpl = ''
-   if tmpl.endswith(".tmpl"): tmpl = tmpl[:-len("tmpl")] + "html"
-   return tmpl
-
-
-all_years = {}
 all_titles = []
-for key in sorted(blog.keys()):
-   year, month, day = key
-   if year in all_years:
-      year_d = all_years[year]
-   else:
-      all_years[year] = year_d = {}
-   if month in year_d:
-      days_of_month = year_d[month]
-   else:
-      year_d[month] = days_of_month = []
-   d = os.path.join(year, month, day)
-   days_of_month.append(d)
-   title, tmpl, lead = blog[key]
-   all_titles.append((key, translate(tmpl), title, lead))
-all_titles = all_titles[-20:]
-
-
 for year in sorted(years.keys()):
    year_titles = []
-   months = all_years[year]
+   months = years[year]
    for month in sorted(months.keys()):
       month_titles = []
-      for day in sorted(months[month]):
-         day_parts = day.split(os.sep)
-         key = tuple(day_parts)
+      for day in months[month]:
+         day_titles = []
+         key = year, month, day
          if key in blog:
             title, tmpl, lead = blog[key]
-            tmpl = translate(tmpl)
+            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))
-      write_template(year, month, month_titles)
-   write_template(year, '', year_titles)
-write_template('', '', all_titles)
+            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:])