]> git.phdru.name Git - phdru.name/phdru.name.git/blobdiff - reindex_blog.py
Feat(blog): Encode tags
[phdru.name/phdru.name.git] / reindex_blog.py
index ab257d55848b0cfadd9b782752365c0dda5f902a..0b7c2a6dd9fbf39af81f038f172c0b998470b84b 100755 (executable)
@@ -2,9 +2,14 @@
 # -*- coding: koi8-r -*-
 
 __author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 2006-2017 PhiloSoft Design"
+__copyright__ = "Copyright (C) 2006-2024 PhiloSoft Design"
 
 import sys, os
+try:
+    from urllib.parse import quote
+except ImportError:
+    from urllib import quote
+
 from Cheetah.Template import Template
 from Cheetah.compat import string_type
 from blog_db import blog_root, load_blog, save_blog
@@ -95,6 +100,8 @@ months_names_ru0 = ['', "
 
 from news import write_if_changed
 
+def encode_tag(tag):
+    return quote(tag.replace(' ', '_'))
 
 def write_template(level, year, month, day, titles, tags=None):
    path = [blog_root]
@@ -234,7 +241,8 @@ def write_template(level, year, month, day, titles, tags=None):
             first_tag = False
          else:
             new_text.append(' - ')
-         new_text.append("""<a href="tags/%s.html">%s (%d)</a>""" % (tag, tag, count))
+         new_text.append("""<a href="tags/%s.html">%s (%d)</a>""" % (
+             encode_tag(tag), tag, count))
       new_text.append('''
 </p>
 ''')
@@ -362,7 +370,7 @@ linux 
 for i, (count, tag, links) in enumerate(all_tags):
    new_text.append("""\
    <dt><a href="%s.html">%s (%d)</a></dt>
-""" % (tag, tag, count))
+""" % (encode_tag(tag), tag, count))
 
    first = all_tags[0][1]
    if i == 0:
@@ -427,7 +435,9 @@ for i, (count, tag, links) in enumerate(all_tags):
 #end def
 $phd_site.respond(self)
 """)
-   write_if_changed(os.path.join(blog_root, "tags", tag+".tmpl"), ''.join(tag_text))
+   write_if_changed(os.path.join(blog_root, "tags",
+                                 tag.replace(' ', '_') + ".tmpl"),
+                    ''.join(tag_text))
 
 new_text.append("""\
 </dl>
@@ -482,6 +492,8 @@ class AbsURLHTMLParser(_HTMLParser):
       self.accumulator += '<a'
       for attrname, value in attrs:
          value = cgi.escape(value, True)
+         if isinstance(value, unicode):
+            value = value.encode('koi8-r')
          if attrname == 'href':
             self.accumulator += ' href="%s"' % urljoin(self.base, value)
          else:
@@ -527,9 +539,9 @@ from news import NewsItem
 if blog_root:
    blog_root_url = blog_root[
         blog_root.find('/htdocs/phdru.name/') + len('/htdocs/phdru.name/'):]
-   baseURL = "http://phdru.name/%s/" % blog_root_url
+   baseURL = "https://phdru.name/%s/" % blog_root_url
 else:
-   baseURL = "http://phdru.name/"
+   baseURL = "https://phdru.name/"
 
 items = []
 for item in tuple(reversed(all_titles_tags))[:10]:
@@ -543,11 +555,20 @@ for item in tuple(reversed(all_titles_tags))[:10]:
       url_path)
    items.append(item)
    item.baseURL = baseURL
-   item.categoryList = tags
+   item.categoryList = [t.decode('koi8-r').encode('utf-8') for t in tags]
    body = bodies[(year, month, day, file)]
    body = absolute_urls(body, baseURL + url_path)
+   try:
+       body.decode('utf-8')
+   except UnicodeDecodeError:
+       body = body.decode('koi8-r').encode('utf-8')
    item.body = body
-   item.excerpt = get_first_p(body)
+   excerpt = get_first_p(body)
+   try:
+       excerpt.decode('utf-8')
+   except UnicodeDecodeError:
+       excerpt = excerpt.decode('koi8-r').encode('utf-8')
+   item.excerpt = excerpt
 
 namespace = {
    "title": "Oleg Broytman's blog",