View для подбора записей блога [closes #25]

master
Антон Касимов 2019-03-03 01:22:04 +03:00
parent 27a70ed76d
commit b013100831
7 changed files with 45 additions and 5 deletions

View File

@ -70,7 +70,7 @@ class Folder(dict):
def __init__(self, name, parent, path):
self.path = path
self.name = name
self.parent = parent
self.__parent__ = parent
if parent is not None:
self.data_path = parent.data_path
for entry in AssetResolver().resolve(path).listdir():
@ -101,16 +101,17 @@ class Folder(dict):
self[path.name] = Folder(path.name, self, asset)
def walk(self):
for item in self.values():
yield item
for name, item in self.items():
yield name, item
if isinstance(item, Folder):
yield from item.walk()
for subname, subitem in item.walk():
yield f"{name}/{subname}", subitem
class Document(object):
def __init__(self, name, parent, path):
self.name = name
self.parent = parent
self.__parent__ = parent
self.path = path
self.data_path = parent.data_path

View File

@ -1,5 +1,7 @@
from pyramid.httpexceptions import HTTPFound
from pyramid.traversal import (find_root, find_resource)
from flatfilecms.models import (YAML, Markdown)
def redirect(self, url):
return HTTPFound(location=url)
@ -7,3 +9,14 @@ def redirect(self, url):
def set_content_type(self, content_type):
self.request.response.content_type = content_type
def blog(self, options):
path = options.get('base', '/')
root = find_root(self.context)
tree = find_resource(root, path)
postlist = []
for name, item in tree.walk():
if isinstance(item, (YAML, Markdown)) and 'published' in item.page:
postlist.append((f"{path}/{name}", item))
self.pages = sorted(postlist, key=lambda t: t[1].page['published'])

View File

@ -2,6 +2,7 @@
title: Блоговая запись 1 в формате markdown
description: Тест записей блогов
template: blogpost
published: 2019-02-01
---
Hello World!

View File

@ -1,3 +1,4 @@
title: Блоговая запись 2 в формате YAML
template: blogpost
published: 2019-02-02
content: Hello World! 2

View File

@ -0,0 +1,4 @@
view:
- flatfilecms.views.blog:
base: /blog
template: bloglist

View File

@ -0,0 +1,7 @@
---
title: Не блоговая запись
description: Тест записей блогов
template: blogpost
---
Hello World!

View File

@ -60,3 +60,16 @@ def test_views(pages, fake_request, config):
view = PagesView(pages['views'], fake_request)
assert view.process_yaml().text == \
'Hello World! View1 View2 View3(a:1, b:2)'
def test_blogindex(pages, fake_request, config):
from flatfilecms.views import blog
from flatfilecms.views.pages import PagesView
fake_view_object = PagesView(pages['blog']['index'], fake_request)
blog(fake_view_object, {'base': '/blog'})
assert hasattr(fake_view_object, 'pages')
assert isinstance(fake_view_object.pages, list)
assert len(fake_view_object.pages) == 2
assert fake_view_object.pages[0][0] == '/blog/blogpost1' and \
fake_view_object.pages[1][0] == '/blog/blogpost2'