blog = {}
years = {}
-# excerpts nd bodies are dictionaries mapping file => excerpt/body
+# bodies is a dictionary mapping file => body
-excerpts = {}
bodies = {}
# Walk the directory recursively
template = Template(file=fullpath)
title_parts = template.Title.split()
title = ' '.join(title_parts[6:])
- lead = getattr(template, "Lead", None)
+ lead = template.Lead
tags = template.Tag
if isinstance(tags, basestring):
file = file[:-len("tmpl")] + "html"
key = (year, month, day, file)
- excerpts[key] = template.get_first_p()
- bodies[key] = template.Body
+ bodies[key] = template.body()
# Need to save the blog?
if blog <> old_blog:
else:
new_text.append('\n<h2>%s %s</h2>' % (day, months_names_ru[int(month)]))
save_date = year, month, day
- if lead:
- lead = lead + ' '
- else:
- lead = ''
new_text.append('''
<p class="head">
%s<a href="%s">%s</a>.
</p>
-''' % (lead, href, title))
+''' % (lead+' ' if lead else '', href, title))
if level == 0:
new_text.append("""
count = 0
for year, month, day, filename, title, lead in reversed(links):
- if lead:
- lead = lead + ' '
- else:
- lead = ''
link = "../%s/%s/%s/%s" % (year, month, day, filename)
- item_text = """<li><a href="%s">%s/%s/%s: %s%s</a></li>""" % (link, year, month, day, lead, title)
+ item_text = """<li><a href="%s">%s/%s/%s: %s%s</a></li>""" % (link, year, month, day, lead+' ' if lead else '', title)
count += 1
if count <= 5:
write_if_changed(os.path.join(blog_root, "tags", "index.tmpl"), ''.join(new_text))
+from HTMLParser import HTMLParseError
+import cgi
+from urlparse import urljoin
+from m_lib.net.www.html import HTMLParser as _HTMLParser
+
+class HTMLDone(Exception): pass
+
+
+class FirstPHTMLParser(_HTMLParser):
+ def __init__(self):
+ _HTMLParser.__init__(self)
+ self.first_p = None
+
+ def start_p(self, attrs):
+ self.accumulator = '<p>'
+
+ def end_p(self):
+ self.first_p = self.accumulator + '</p>'
+ raise HTMLDone()
+
+def get_first_p(body):
+ parser = FirstPHTMLParser()
+
+ try:
+ parser.feed(body)
+ except (HTMLParseError, HTMLDone):
+ pass
+
+ try:
+ parser.close()
+ except (HTMLParseError, HTMLDone):
+ pass
+
+ return parser.first_p
+
+
+class AbsURLHTMLParser(_HTMLParser):
+ def __init__(self, base):
+ _HTMLParser.__init__(self)
+ self.base = base
+
+ def start_a(self, attrs):
+ self.accumulator += '<a'
+ for attrname, value in attrs:
+ value = cgi.escape(value, True)
+ if attrname == 'href':
+ self.accumulator += ' href="%s"' % urljoin(self.base, value)
+ else:
+ self.accumulator += ' %s="%s"' % (attrname, value)
+ self.accumulator += '>'
+
+ def end_a(self):
+ self.accumulator += '</a>'
+
+def absolute_urls(body, base):
+ parser = AbsURLHTMLParser(base)
+
+ try:
+ parser.feed(body)
+ except HTMLParseError:
+ pass
+
+ try:
+ parser.close()
+ except HTMLParseError:
+ pass
+
+ return parser.accumulator
+
+
from atom_10 import atom_10
from rss_20 import rss_20
from news import NewsItem
items = []
for item in tuple(reversed(all_titles_tags))[:10]:
year, month, day, file, title, lead, tags = item
- if lead:
- lead = lead + ' '
- else:
- lead = ''
+ url_path = "%s/%s/%s/%s" % (year, month, day, file)
item = NewsItem(
"%s-%s-%s" % (year, month, day),
- "%s%s" % (lead, title),
- "%s/%s/%s/%s" % (year, month, day, file)
- )
+ "%s%s" % (lead+' ' if lead else '', title),
+ url_path)
items.append(item)
item.baseURL = baseURL
item.categoryList = tags
- item.excerpt = excerpts[(year, month, day, file)]
- item.body = bodies[(year, month, day, file)]
+ body = bodies[(year, month, day, file)]
+ body = absolute_urls(body, baseURL + url_path)
+ item.body = body
+ item.excerpt = get_first_p(body)
namespace = {
"title": "Oleg Broytman's blog",