diff --git a/blo/blog.py b/blo/blog.py index 9472a37..ac32905 100644 --- a/blo/blog.py +++ b/blo/blog.py @@ -117,8 +117,10 @@ def main(): slug = opts.action[1] blog_action.post(slug, opts.type) + return 0 + if __name__ == "__main__": log.addHandler(logging.StreamHandler(sys.stdout)) log.setLevel(logging.DEBUG) - sys.exit(main()) \ No newline at end of file + sys.exit(main()) diff --git a/blo/page_generator.py b/blo/page_generator.py index a71e7dd..d82e56f 100644 --- a/blo/page_generator.py +++ b/blo/page_generator.py @@ -21,14 +21,20 @@ def split_into_pages(items, per_page): return [items[i:i + per_page] for i in range(0, len(items), per_page)] +class BloError(Exception): + def __init__(self, message): + self.message = message + + def __str__(self): + return self.message + + class PageGenerator: def __init__(self, config): self.config = config self.jinja_env = jinja2.Environment( loader=jinja2.FileSystemLoader(self.config['template_dir'])) - self.md = markdown.Markdown( - extensions=['markdown.extensions.meta', - 'markdown.extensions.codehilite']) + self.md = markdown.Markdown(extensions=['meta', 'codehilite', 'fenced_code', 'tables']) self.content_aggregator = ContentAggregator(config) def _generate_html(self, template_name, page_vars): @@ -111,6 +117,8 @@ def _generate_html_page_and_path(self, content): page_vars['page_content'] = page_html page_vars['page_author'] = self.config['site']['author'] page_vars['page_date'] = page_vars.get('page_date_time', '').split(' ')[0] + if 'page_tags' not in page_vars: + raise BloError("Missing tags") page_vars['page_tags'] = [tag for tag in page_vars['page_tags'].split(', ') if tag] if 'page_date_time' in page_vars: page_vars['page_date_time'] = \ @@ -159,10 +167,16 @@ def generate_all(self): """ # render page for draft in os.listdir(self.config['pages_dir']): - with open(os.path.join(self.config['pages_dir'], draft)) as f: + path = os.path.join(self.config['pages_dir'], draft) + with open(path) as f: content = f.read() - - html_page, html_page_path = self._generate_html_page_and_path(content) + try: + html_page, html_page_path = self._generate_html_page_and_path(content) + except BloError as blo_error: + blo_error.message += " in %s" % path + raise + except Exception as exc: + raise BloError("Caught exception while generating %s" % path) from exc self._create_html_file(html_page, html_page_path) # render index page @@ -189,4 +203,4 @@ def generate_all(self): # render rss xml_page = self._generate_xml_rss() - self._create_rss_file(xml_page, 'rss.xml') \ No newline at end of file + self._create_rss_file(xml_page, 'rss.xml') diff --git a/blo/tests/test_blog.py b/blo/tests/test_blog.py index 1c2954a..e194d9d 100644 --- a/blo/tests/test_blog.py +++ b/blo/tests/test_blog.py @@ -1,16 +1,13 @@ import unittest import os import shutil -import sys -import subprocess -from datetime import datetime -import blog +from blo import blog class SandboxTestCase(unittest.TestCase): def make_sandbox(self): - self.sandbox = '{0}/test-artifacts/'.format( + self.sandbox = '{0}/{1}/{2}/test-artifacts/'.format( os.getcwd(), self.__class__.__name__, self._testMethodName @@ -41,12 +38,18 @@ def tearDown(self): def test_create_simple_blog(self): """ Check initially created blog """ blog.create_blog(self.sandbox) - real_list = [i[1:] for i in os.walk(self.sandbox)] + real_list = list() + for i in os.walk(self.sandbox): + entry = i[1:] + entry[0].sort() + entry[1].sort() + real_list.append(entry) + expected_list = [ (['_blog'], []), - (['pages', 'templates'], ['draft_templates.json', 'default.json']), + (['pages', 'templates'], ['default.json', 'draft_templates.json']), ([], []), - ([], ['base.html', 'list.html', 'post.html', 'stat.html']) + ([], ['base.html', 'list.html', 'page.html', 'post.html', 'stat.html']) ] self.assertListEqual(real_list, expected_list) @@ -88,4 +91,4 @@ def setUp(self): self.make_sandbox() def tearDown(self): - self.remove_sandbox() \ No newline at end of file + self.remove_sandbox() diff --git a/setup.py b/setup.py index 1fc37cf..ef7bf9f 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ setup( name='blo', - version='0.6', + version='0.8.1', license='BSD-3-clause', author='Yann Savuir', author_email='savuir@gmail.com', @@ -13,7 +13,7 @@ 'blo = blo.blog:main', ], }, - install_requires=['jinja2', 'markdown', 'PyRSS2Gen'], + install_requires=['jinja2', 'markdown', 'PyRSS2Gen', 'Pygments'], package_data={'': ['blo/default.json', 'blo/draft_templates.json',]}, include_package_data=True, url='https://github.com/savuir/blo', # use the URL to the github repo