From 2c83982704f55872020332c254ae91dabe113c2f Mon Sep 17 00:00:00 2001 From: Oleg Broytman Date: Wed, 1 Mar 2006 16:32:19 +0000 Subject: [PATCH] Recursively walk all directories including days. 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 | 146 +++++++++++++++++++++++++----------------------- 1 file changed, 76 insertions(+), 70 deletions(-) diff --git a/reindex_blog.py b/reindex_blog.py index 67461c0..1539849 100755 --- a/reindex_blog.py +++ b/reindex_blog.py @@ -7,6 +7,7 @@ __date__ = "$Date$"[7:-2] __author__ = "Oleg BroytMann " __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):

öÕÒÎÁÌ: %(year)s

""" % {"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 +

öÕÒÎÁÌ: %(day)d %(month_name_ru0)s %(year)s

+""" % { + "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:]) -- 2.39.5