From b013100831d62916ff0d4eec5615a96d681560f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D1=82=D0=BE=D0=BD=20=D0=9A=D0=B0=D1=81=D0=B8?= =?UTF-8?q?=D0=BC=D0=BE=D0=B2?= Date: Sun, 3 Mar 2019 01:22:04 +0300 Subject: [PATCH] =?UTF-8?q?View=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=D0=B0=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B5?= =?UTF-8?q?=D0=B9=20=D0=B1=D0=BB=D0=BE=D0=B3=D0=B0=20[closes=20#25]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flatfilecms/models.py | 11 ++++++----- flatfilecms/views/__init__.py | 13 +++++++++++++ tests/pages/{ => blog}/blogpost1.md | 1 + tests/pages/{ => blog}/blogpost2.yaml | 1 + tests/pages/blog/index.yaml | 4 ++++ tests/pages/blog/noblogpost.md | 7 +++++++ tests/test_pages.py | 13 +++++++++++++ 7 files changed, 45 insertions(+), 5 deletions(-) rename tests/pages/{ => blog}/blogpost1.md (87%) rename tests/pages/{ => blog}/blogpost2.yaml (82%) create mode 100644 tests/pages/blog/index.yaml create mode 100644 tests/pages/blog/noblogpost.md diff --git a/flatfilecms/models.py b/flatfilecms/models.py index 744a84a..c05c3c1 100644 --- a/flatfilecms/models.py +++ b/flatfilecms/models.py @@ -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 diff --git a/flatfilecms/views/__init__.py b/flatfilecms/views/__init__.py index faec57d..a6a2aa7 100644 --- a/flatfilecms/views/__init__.py +++ b/flatfilecms/views/__init__.py @@ -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']) diff --git a/tests/pages/blogpost1.md b/tests/pages/blog/blogpost1.md similarity index 87% rename from tests/pages/blogpost1.md rename to tests/pages/blog/blogpost1.md index fd9b4a1..528096e 100644 --- a/tests/pages/blogpost1.md +++ b/tests/pages/blog/blogpost1.md @@ -2,6 +2,7 @@ title: Блоговая запись 1 в формате markdown description: Тест записей блогов template: blogpost +published: 2019-02-01 --- Hello World! diff --git a/tests/pages/blogpost2.yaml b/tests/pages/blog/blogpost2.yaml similarity index 82% rename from tests/pages/blogpost2.yaml rename to tests/pages/blog/blogpost2.yaml index 83fbf9b..0589b55 100644 --- a/tests/pages/blogpost2.yaml +++ b/tests/pages/blog/blogpost2.yaml @@ -1,3 +1,4 @@ title: Блоговая запись 2 в формате YAML template: blogpost +published: 2019-02-02 content: Hello World! 2 diff --git a/tests/pages/blog/index.yaml b/tests/pages/blog/index.yaml new file mode 100644 index 0000000..317a750 --- /dev/null +++ b/tests/pages/blog/index.yaml @@ -0,0 +1,4 @@ +view: + - flatfilecms.views.blog: + base: /blog +template: bloglist diff --git a/tests/pages/blog/noblogpost.md b/tests/pages/blog/noblogpost.md new file mode 100644 index 0000000..cd3339a --- /dev/null +++ b/tests/pages/blog/noblogpost.md @@ -0,0 +1,7 @@ +--- +title: Не блоговая запись +description: Тест записей блогов +template: blogpost +--- + +Hello World! diff --git a/tests/test_pages.py b/tests/test_pages.py index 708ea21..bd1d2d2 100644 --- a/tests/test_pages.py +++ b/tests/test_pages.py @@ -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' +