Просмотр исходного кода

Simplify how header is read

 * markdown2 can read a metadata block, so removed _read_header
 * Drop dependency on YAML
Oz N Tiram 9 лет назад
Родитель
Сommit
1844fe3933
2 измененных файлов с 10 добавлено и 30 удалено
  1. 9 28
      blogit/blogit.py
  2. 1 2
      requirements.txt

+ 9 - 28
blogit/blogit.py

@@ -12,7 +12,7 @@
 # along with Blogit.py; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 # ============================================================================
-# Copyright (C) 2013 Oz Nahum Tiram <nahumoz@gmail.com>
+# Copyright (C) 2013-2016 Oz Nahum Tiram <nahumoz@gmail.com>
 # ============================================================================
 
 # Note about Summary
@@ -47,7 +47,6 @@ import SimpleHTTPServer
 import BaseHTTPServer
 import socket
 import SocketServer
-import yaml
 from jinja2 import Environment, FileSystemLoader
 import markdown2
 import tinydb
@@ -261,12 +260,6 @@ class Entry(object):
                 GLOBAL_TEMPLATE_CONTEXT["site_url"]
             )
 
-    @property
-    def body_html(self):
-        return markdown2.markdown(self.body, extras=['fenced-code-blocks',
-                                                     'hilite',
-                                                     'tables'])
-
     @property
     def permalink(self):
         if self.kind == 'page':
@@ -284,22 +277,14 @@ class Entry(object):
         except KeyError:
             return []
 
-    def _read_header(self, file):
-        header = ['---']
-        while True:
-            line = file.readline()
-            line = line.rstrip()
-            if not line:
-                break
-            header.append(line)
-        header = yaml.load(StringIO('\n'.join(header)))
-        # todo: dispatch header to attribute
-        # todo: parse date from string to a datetime object
-        return header
-
     def prepare(self):
-        file = codecs.open(self.abspath, 'r')
-        self.header = self._read_header(file)
+
+        self.body_html = markdown2.markdown(codecs.open(self.abspath, 'r').read(),
+                                            extras=['fenced-code-blocks',
+                                                    'hilite',
+                                                    'tables', 'metadata'])
+        self.header = self.body_html.metadata
+        self.header['tags'] = self.header['tags'].split(',')
         self.date = self.header.get('published', datetime.date.today())
         for k, v in self.header.items():
             try:
@@ -307,11 +292,6 @@ class Entry(object):
             except:
                 pass
 
-        body = file.readlines()
-
-        self.body = ''.join(body)
-        file.close()
-
     @property
     def entry_template(self):
         template_name = self.header.get('template', 'entry.html')
@@ -617,5 +597,6 @@ def main():   # pragma: no coverage
     if args.publish:
         publish()
 
+
 if __name__ == '__main__':  # pragma: no coverage
     main()

+ 1 - 2
requirements.txt

@@ -1,5 +1,4 @@
-PyYAML>=3.10
 markdown2>=1.1.1
-jinja2 
+jinja2
 pygments
 tinydb