]> git.phdru.name Git - phdru.name/phdru.name.git/blobdiff - phd.py
Fix(phd.py): Change URL for Lurk
[phdru.name/phdru.name.git] / phd.py
diff --git a/phd.py b/phd.py
index 4e13617540eeb09967a2aff01209cc2be9b9ae82..4aa206c47fc1637a83cc65b1b6955a9efbc1fbdd 100644 (file)
--- a/phd.py
+++ b/phd.py
@@ -5,10 +5,12 @@ except ImportError:
     from urllib.parse import quote as url_quote
 from Cheetah.Template import Template
 from Cheetah.compat import PY2
+from blog_db import load_blog
 
 
 url_re = r"(((https?|ftp|gopher|telnet)://|(mailto|file|news|about|ed2k|irc|sip|magnet):)[^' \t<>\"]+|(www|web|w3)[A-Za-z0-9_-]*\.[A-Za-z0-9._-]+\.[^' \t<>\"]+)[A-Za-z0-9/]"
 
+
 def _url2href(match):
     url = match.group(0)
     return '<a href="%s">%s</a>' % (url, url)
@@ -16,12 +18,15 @@ def _url2href(match):
 
 full_dirs = len(os.getcwd().split('/')) + 1
 
+
 class phd(Template):
     def __init__(self, *args, **kw):
         if not hasattr(self, "_fileBaseName"):
-            self._fileDirName, self._fileBaseName = os.path.split(os.path.abspath(self._CHEETAH_src))
+            self._fileDirName, self._fileBaseName = \
+                os.path.split(os.path.abspath(self._CHEETAH_src))
         Template.__init__(self, *args, **kw)
-        directories = self._fileDirName.split('/')[full_dirs:] # remove directories up to "./files"
+        # remove directories up to "./files"
+        directories = self._fileDirName.split('/')[full_dirs:]
         dirs_to_root = len(directories)
         if dirs_to_root:
             root = "../"*dirs_to_root
@@ -41,7 +46,6 @@ class phd(Template):
             return "%s, %s" % (start_year, this_year)
         return "%s-%s" % (start_year, this_year)
 
-
     def body(self):
         if hasattr(self, "body_html"):
             return self.body_html()
@@ -89,47 +93,82 @@ class phd(Template):
         body = parts["body"]
         parts = []
         for part in (title, subtitle, body):
-             if not part:
-                  continue
-             if PY2 and not isinstance(part, bytes):
-                  part = part.encode('utf-8')
-             parts.append(part)
+            if not part:
+                continue
+            if PY2 and not isinstance(part, bytes):
+                part = part.encode('utf-8')
+            parts.append(part)
         return "\n\n".join(parts)
 
     def mkd2html(self):
         from markdown import markdown
         return markdown(self.body_mkd(), output_format="html")
 
+    def find_near_blog_posts(self):
+        if not self.path.startswith("/Russian/blog/"):
+            return None, None, None, None
+        dirs = self.path.split('/')
+        # blog post is ['', 'Russian', 'blog', year, month, day, filename]
+        if len(dirs) != 7:  # Not a blog post
+            return None, None, None, None
+        ymd = tuple(dirs[3:6])
+        filename = self._fileBaseName
+
+        prev_key = prev_blog_post = current_key = current_blog_post = \
+            next_key = next_blog_post = None
+        blog = load_blog()
+        for key in sorted(blog):
+            for blog_post in sorted(blog[key]):
+                if current_blog_post:
+                    prev_key = current_key
+                    prev_blog_post = current_blog_post
+                if next_blog_post:
+                    current_key = next_key
+                    current_blog_post = next_blog_post
+                next_key = key
+                next_blog_post = blog_post
+                if current_blog_post and (current_key == ymd) and \
+                        (current_blog_post[0] == filename):  # Found!
+                    return prev_key, prev_blog_post, next_key, next_blog_post
+        return current_key, current_blog_post, None, None
+
     def img_thumbnail_800_1024(self, img_name):
         return """\
 <img src="%(img_name)s-thumbnail.jpg" alt="%(img_name)s-thumbnail.jpg" /><br />
 <a href="%(img_name)s-800x600.jpg">800x600</a>, <a href="%(img_name)s-1024x800.jpg">1024x800</a>""" % {"img_name": img_name}
 
     def wikipedia(self, query):
-        return "https://en.wikipedia.org/wiki/%s" % quote_string(query.replace(' ', '_'), ext_safe=',')
+        return "https://en.wikipedia.org/wiki/%s" % quote_string(
+            query.replace(' ', '_'), ext_safe=',')
 
     def wikipedia_ru(self, query):
-        return "https://ru.wikipedia.org/wiki/%s" % quote_string(query.replace(' ', '_'), ext_safe=',')
+        return "https://ru.wikipedia.org/wiki/%s" % quote_string(
+            query.replace(' ', '_'), ext_safe=',')
 
     def startpage(self, query):
-         return "https://startpage.com/do/search?q=%s" % quote_string(query)
+        return "https://startpage.com/do/search?q=%s" % quote_string(query)
 
     search = startpage
 
     def nigma(self, query):
-         return "http://www.nigma.ru/index.php?s=%s" % quote_string(query)
+        return "http://www.nigma.ru/index.php?s=%s" % quote_string(query)
 
     def yandex(self, query):
-        return "http://www.yandex.ru/yandsearch?text=%s&rpt=rad" % quote_string(query, "cp1251")
+        return "http://www.yandex.ru/yandsearch?text=%s&rpt=rad" \
+            % quote_string(query, "cp1251")
 
     def google(self, query):
-        return "http://www.google.com/search?hl=en&ie=utf-8&oe=utf-8&q=%s" % quote_string(query)
+        return "http://www.google.com/search?hl=en&ie=utf-8&oe=utf-8&q=%s" \
+            % quote_string(query)
 
     def google_ru(self, query):
-        return "http://www.google.ru/search?hl=ru&ie=utf-8&oe=utf-8&q=%s" % quote_string(query)
+        return "http://www.google.ru/search?hl=ru&ie=utf-8&oe=utf-8&q=%s" \
+            % quote_string(query)
 
     def lurkmoar(self, query):
-         return "https://lurkmore.to/%s" % quote_string(query.replace(' ', '_'), ext_safe=',')
+        return "http://lurklurk.com/%s" % quote_string(
+            query.replace(' ', '_'), ext_safe=',')
+
 
 def quote_string(s, to_encoding="utf-8", ext_safe=''):
     if isinstance(s, bytes):