From 0896b3d3e0f737ed5668fb73492e84ddd4fb671d Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Wed, 2 Sep 2020 00:01:33 +0000 Subject: Fixes for python3 --- bin/metabuild.py | 8 +++--- site_builder/__init__.py | 39 +++++++++++++------------- site_builder/blog.py | 50 +++++++++++++++------------------ site_builder/blogbuilder.py | 43 +++++++++++++++-------------- site_builder/feeds.py | 67 ++++++++++++++++++++++----------------------- templates/page.html | 11 ++++---- 6 files changed, 106 insertions(+), 112 deletions(-) diff --git a/bin/metabuild.py b/bin/metabuild.py index 6f95703..e837a51 100755 --- a/bin/metabuild.py +++ b/bin/metabuild.py @@ -22,16 +22,16 @@ del dirname, realpath from site_builder import build_all from site_builder.blogbuilder import build_blog -if __name__ == '__main__': +if __name__ == "__main__": args = sys.argv[1:] if len(args) != 3: - print "{0} (blog|site) input_dir output_dir".format(sys.argv[0]) + print("{0} (blog|site) input_dir output_dir".format(sys.argv[0])) sys.exit(1) else: action, input_dir, output_dir = args - if action == 'site': + if action == "site": build_all(input_dir, output_dir) - elif action == 'blog': + elif action == "blog": build_blog(input_dir, output_dir) diff --git a/site_builder/__init__.py b/site_builder/__init__.py index 1ebef36..9478dce 100644 --- a/site_builder/__init__.py +++ b/site_builder/__init__.py @@ -7,15 +7,13 @@ Site Builder """ import os -from os import path import jinja2 -import pagebuilder from datetime import datetime from docutils.core import publish_parts -from docutils.io import FileInput -TEMPLATES = path.join(path.dirname(path.dirname(__file__)), "templates") +TEMPLATES = os.path.join( + os.path.dirname(os.path.dirname(__file__)), "templates") def get_template(name): @@ -25,27 +23,27 @@ def get_template(name): def build_standard_page(filename, output_name): - parts = publish_parts(open(filename, 'r').read(), writer_name='html') - template = get_template('page.html') + parts = publish_parts(open(filename, "r").read(), writer_name="html") + template = get_template("page.html") try: - os.makedirs(path.dirname(output_name)) + os.makedirs(os.path.dirname(output_name)) except OSError: pass # directory exists - open(output_name, 'w').write(template.render( - contents=parts['html_body'], - build_date=datetime.now().strftime('%B %d, %Y'), + open(output_name, "w").write(template.render( + contents=parts["html_body"], + build_date=datetime.now().strftime("%B %d, %Y"), source_link=filename)) def get_output_name(base_dir, output_dir, filename): - base_depth = len(base_dir.split(path.sep)) - out_name = filename.split(path.sep)[base_depth:] - new_path = path.join(output_dir, *out_name) + base_depth = len(base_dir.split(os.path.sep)) - 1 + out_name = filename.split(os.path.sep)[base_depth:] + new_path = os.path.join(output_dir, *out_name) - if new_path.endswith('.rst'): - new_path = new_path[:-len('.rst')] + '.html' + if new_path.endswith(".rst"): + new_path = new_path[:-len(".rst")] + ".html" return new_path @@ -53,13 +51,16 @@ def get_output_name(base_dir, output_dir, filename): def build_all(base_dir, output_dir): for root, dirs, files in os.walk(base_dir): for filename in files: - if ('blog.cfg' in files or - not filename.endswith('.rst')): + if ("blog.cfg" in files or + not filename.endswith(".rst")): continue - old_path = path.join(root, filename) + old_path = os.path.join(root, filename) new_path = get_output_name(base_dir, output_dir, old_path) - print "BUILDING: ", old_path + if not os.path.exists(os.path.dirname(new_path)): + os.makedirs(os.path.dirname(new_path)) + + print("BUILDING: ", old_path, " to ", new_path) build_standard_page(old_path, new_path) diff --git a/site_builder/blog.py b/site_builder/blog.py index a8ef446..9a1b48d 100644 --- a/site_builder/blog.py +++ b/site_builder/blog.py @@ -7,17 +7,15 @@ Blog Post Builder """ import os -from functools import wraps from datetime import datetime -# Docutils imports, crazy yo from docutils import nodes -from docutils.core import Publisher, publish_string +from docutils.parsers import rst +from docutils.core import Publisher +from docutils.readers import standalone from docutils.transforms import Transform from docutils.io import NullOutput, FileInput -from docutils.parsers.rst import Parser as RSTParser -from docutils.writers.html4css1 import Writer as HTMLWriter -from docutils.readers.standalone import Reader as StandaloneReader +from docutils.writers import html4css1 as html class BlogMetaTransform(Transform): @@ -34,9 +32,7 @@ class BlogMetaTransform(Transform): def __init__(self, *args, **kwargs): Transform.__init__(self, *args, **kwargs) - self.meta = self.document.blog_meta = { - 'tags': [], - } + self.meta = self.document.blog_meta = {"tags": []} def apply(self): docinfo = None @@ -50,7 +46,7 @@ class BlogMetaTransform(Transform): self.document.remove(node) if isinstance(node, nodes.title): - self.meta['title'] = unicode(node[0]) + self.meta["title"] = unicode(node[0]) self.document.remove(node) # And one to process the docinfo @@ -65,23 +61,23 @@ class BlogMetaTransform(Transform): self._handle_field(node) def _handle_author(self, node): - self.meta['author'] = Author(node[0]['name'], node[0]['refuri']) + self.meta["author"] = Author(node[0]["name"], node[0]["refuri"]) def _handle_date(self, node): raw_date = unicode(node[0]) - self.meta['post_date'] = datetime.strptime(raw_date, - '%a %b %d %H:%M:%S %Y') + self.meta["post_date"] = datetime.strptime(raw_date, + "%a %b %d %H:%M:%S %Y") def _handle_field(self, node): name = node[0][0] value = unicode(node[1][0][0]) - if name == 'Tag': - self.meta['tags'].append(value) + if name == "Tag": + self.meta["tags"].append(value) -class BlogPostReader(StandaloneReader): +class BlogPostReader(standalone.Reader): """ Post reader for blog posts. @@ -90,9 +86,7 @@ class BlogPostReader(StandaloneReader): """ def get_transforms(self): - return StandaloneReader.get_transforms(self) + [ - BlogMetaTransform, - ] + return standalone.Reader.get_transforms(self) + [BlogMetaTransform] class Author(object): @@ -104,11 +98,11 @@ class Author(object): self.name = name self.email = email - if email.startswith('mailto:'): - self.email = email[len('mailto:'):] + if email.startswith("mailto:"): + self.email = email[len("mailto:"):] def __str__(self): - return '{0} <{1}>'.format(self.name, self.email) + return "{0} <{1}>".format(self.name, self.email) class BlogPost(object): @@ -150,29 +144,29 @@ class BlogPost(object): """ pub = Publisher(destination_class=NullOutput, source=FileInput(source_path=filename), - reader=BlogPostReader(), writer=HTMLWriter(), - parser=RSTParser()) + reader=BlogPostReader(), writer=html.Writer(), + parser=rst.Parser()) pub.get_settings() # This is not sane. pub.settings.traceback = True # Damnit pub.publish() meta = pub.document.blog_meta - post = cls(meta['title'], meta['post_date'], meta['author'], - meta['tags'], pub.writer.parts['html_body']) + post = cls(meta["title"], meta["post_date"], meta["author"], + meta["tags"], pub.writer.parts["html_body"]) post.filename = filename return post -def load_post_index(directory='.'): +def load_post_index(directory="."): """ Scan the current directory for rst files and build an index. """ posts = [] for filename in os.listdir(directory): - if not filename.endswith('.rst'): + if not filename.endswith(".rst"): continue filename = os.path.join(directory, filename) diff --git a/site_builder/blogbuilder.py b/site_builder/blogbuilder.py index f45fb65..060049c 100644 --- a/site_builder/blogbuilder.py +++ b/site_builder/blogbuilder.py @@ -11,61 +11,62 @@ import json import operator from datetime import datetime from collections import defaultdict -from site_builder import get_template, get_output_name -from blog import load_post_index -from feeds import Atom1Feed + +from . import get_template +from .blog import load_post_index +from .feeds import Atom1Feed def build_feed(output_dir, post_index, title, url, feed_url): - page_name = os.path.join(output_dir, 'feed.atom') + page_name = os.path.join(output_dir, "feed.atom") feed = Atom1Feed(post_index, title, feed_url, post_index[0].post_date, url) - open(page_name, 'w').write(feed.get_feed()) + open(page_name, "w").write(feed.get_feed()) def build_tags(output_dir, post_index): tag_index = defaultdict(list) - template = get_template('blog_tags.html') - page_name = os.path.join(output_dir, 'tags.html') + template = get_template("blog_tags.html") + page_name = os.path.join(output_dir, "tags.html") for post in post_index: for tag in post.tags: tag_index[tag].append(post) tag_index = sorted(tag_index.items()) - open(page_name, 'w').write(template.render(posts=tag_index, + open(page_name, "w").write(template.render(posts=tag_index, build_date=datetime.now().strftime("%B %d, %Y"))) def build_archive(output_dir, post_index): date_index = defaultdict(list) - template = get_template('blog_archive.html') - page_name = os.path.join(output_dir, 'archive.html') + template = get_template("blog_archive.html") + page_name = os.path.join(output_dir, "archive.html") for post in post_index: date_index[post.post_date.year].append(post) date_index = sorted(date_index.items(), reverse=True) - open(page_name, 'w').write(template.render(posts=date_index, + open(page_name, "w").write(template.render(posts=date_index, build_date=datetime.now().strftime("%B %d, %Y"))) def build_index(output_dir, post_index): - template = get_template('blog_index.html') - page_name = os.path.join(output_dir, 'index.html') + template = get_template("blog_index.html") + page_name = os.path.join(output_dir, "index.html") - open(page_name, 'w').write(template.render(posts=post_index[:3], + open(page_name, "w").write(template.render(posts=post_index[:3], build_date=datetime.now().strftime("%B %d, %Y"))) def build_blog(base_dir, output_dir): - config = json.load(open(os.path.join(base_dir, 'blog.cfg'))) + config = json.load(open(os.path.join(base_dir, "blog.cfg"))) post_index = load_post_index(base_dir) - post_index.sort(key=operator.attrgetter('post_date'), reverse=True) + post_index.sort(key=operator.attrgetter("post_date"), reverse=True) try: os.makedirs(output_dir) @@ -73,17 +74,17 @@ def build_blog(base_dir, output_dir): pass # directory already exists for post in post_index: - template = get_template('blog_post.html') + template = get_template("blog_post.html") out_filename = os.path.join(output_dir, post.filename) - out_filename = out_filename[:-len('rst')] + 'html' + out_filename = out_filename[:-len("rst")] + "html" - print "BUILDING BLOG: ", out_filename + print("BUILDING BLOG: ", out_filename) - open(out_filename, 'w').write(template.render(post=post)) + open(out_filename, "w").write(template.render(post=post)) build_index(output_dir, post_index) build_archive(output_dir, post_index) build_tags(output_dir, post_index) build_feed(output_dir, post_index, - config['title'], config['blog_url'], config['feed_url']) + config["title"], config["blog_url"], config["feed_url"]) diff --git a/site_builder/feeds.py b/site_builder/feeds.py index 3279afb..dd343b5 100644 --- a/site_builder/feeds.py +++ b/site_builder/feeds.py @@ -6,14 +6,13 @@ Atom Feed Writer @date: June 04, 2010 """ -#from io import StringIO -from StringIO import StringIO +from io import StringIO from xml.sax.saxutils import XMLGenerator class SimpleXMLGenerator(XMLGenerator): - def __init__(self, encoding='utf-8'): + def __init__(self, encoding="utf-8"): self.output = StringIO() XMLGenerator.__init__(self, out=self.output, encoding=encoding) @@ -53,8 +52,8 @@ class Atom1Feed(object): def get_feed(self): self.handler.startDocument() - self.handler.startElement('feed', { - 'xmlns': 'http://www.w3.org/2005/Atom' }) + self.handler.startElement("feed", { + "xmlns": "http://www.w3.org/2005/Atom" }) self.add_root_elements() @@ -64,47 +63,47 @@ class Atom1Feed(object): self.add_post(post) - self.handler.endElement('feed') + self.handler.endElement("feed") return self.handler.get_contents() def add_root_elements(self): - self.handler.addElement('title', self.title) - self.handler.addElement('updated', self._format_time(self.updated)) - self.handler.addElement('id', self.feed_url) - self.handler.addElement('link', attrs={ - 'rel': 'alternate', - 'type': 'text/html', - 'href': self.blog_url }) - self.handler.addElement('link', attrs={ - 'rel': 'self', - 'type': 'application/atom+xml', - 'href': self.feed_url }) + self.handler.addElement("title", self.title) + self.handler.addElement("updated", self._format_time(self.updated)) + self.handler.addElement("id", self.feed_url) + self.handler.addElement("link", attrs={ + "rel": "alternate", + "type": "text/html", + "href": self.blog_url }) + self.handler.addElement("link", attrs={ + "rel": "self", + "type": "application/atom+xml", + "href": self.feed_url }) def add_post(self, post): handler = self.handler - handler.startElement('entry') + handler.startElement("entry") - handler.startElement('author') - handler.addElement('name', post.author.name) - handler.addElement('email', post.author.email) - handler.endElement('author') + handler.startElement("author") + handler.addElement("name", post.author.name) + handler.addElement("email", post.author.email) + handler.endElement("author") - post_href = '{0}/{1}'.format(self.blog_url, post.filename) + post_href = "{0}/{1}".format(self.blog_url, post.filename) - handler.addElement('title', post.title) - handler.addElement('link', attrs={ - 'rel': 'alternate', - 'type': 'text/html', - 'href': post_href }) - handler.addElement('id', post_href) - handler.addElement('updated', self._format_time(post.post_date)) - handler.addElement('published', self._format_time(post.post_date)) + handler.addElement("title", post.title) + handler.addElement("link", attrs={ + "rel": "alternate", + "type": "text/html", + "href": post_href }) + handler.addElement("id", post_href) + handler.addElement("updated", self._format_time(post.post_date)) + handler.addElement("published", self._format_time(post.post_date)) for tag in post.tags: - handler.addElement('category', attrs={ 'term': tag }) + handler.addElement("category", attrs={ "term": tag }) - handler.addElement('content', post.contents, attrs={ 'type': 'html' }) + handler.addElement("content", post.contents, attrs={ "type": "html" }) - handler.endElement('entry') + handler.endElement("entry") diff --git a/templates/page.html b/templates/page.html index 83fa0dc..7f6c767 100644 --- a/templates/page.html +++ b/templates/page.html @@ -7,12 +7,12 @@ The Random Thoughts of a Programmer - +
@@ -40,15 +40,14 @@
  • Site Links:
  • Home
  • Blog
  • -
  • Personal Blog
  • -
  • Code
  • -
  • Twitter
  • +
  • Code
  • +
  • Twitter
  • {% block update_date %}

    Page last updated: {{ build_date }}

    {% endblock %} - +

    This site powered by VIM, ReStructuredText and Python.

    -- cgit v1.2.3