From c7c9ea3c84801d0b4773eeb282306656b8bd845d 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 02:54:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA?= =?UTF-8?q?=D0=B8=20published.=20=D0=95=D1=81=D0=BB=D0=B8=20=D0=B4=D0=B0?= =?UTF-8?q?=D1=82=D0=B0=20=D0=B2=20=D0=B1=D1=83=D0=B4=D1=83=D1=89=D0=B5?= =?UTF-8?q?=D0=BC,=20=D1=82=D0=BE=20=D0=BD=D0=B5=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D1=8F=D1=82=D1=8C=20=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=86=D1=83=20[closes=20#9]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flatfilecms/models.py | 44 +++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/flatfilecms/models.py b/flatfilecms/models.py index c05c3c1..ba8b69d 100644 --- a/flatfilecms/models.py +++ b/flatfilecms/models.py @@ -1,8 +1,9 @@ -from pyramid.path import AssetResolver from pathlib import PurePath import yaml import frontmatter import markdown +from datetime import datetime +from pyramid.path import AssetResolver from zope.interface import (Interface, implementer) from flatfilecms.filters import IgnoreExtension @@ -66,6 +67,10 @@ class CustomYAMLHandler(frontmatter.YAMLHandler): return yaml.load(fm, self.loader) +class HiddenFile(Exception): + pass + + class Folder(dict): def __init__(self, name, parent, path): self.path = path @@ -82,19 +87,23 @@ class Folder(dict): def create_file(self, asset): path = PurePath(asset) - if path.suffix == '.md': - self[path.stem] = Markdown(path.stem, self, asset) - elif path.suffix == '.yaml': - self[path.stem] = YAML(path.stem, self, asset) - elif path.suffix == '.j2' or path.suffix == '.jinja2': - self[path.stem] = Jinja2(path.stem, self, asset) - else: - name = path.name - # Если имя файла не index.html, - # то отдавать по имени файла - if name == 'index.html': - name = 'index' - self[name] = Document(name, self, asset) + try: + if path.suffix == '.md': + self[path.stem] = Markdown(path.stem, self, asset) + elif path.suffix == '.yaml': + self[path.stem] = YAML(path.stem, self, asset) + elif path.suffix == '.j2' or path.suffix == '.jinja2': + self[path.stem] = Jinja2(path.stem, self, asset) + else: + name = path.name + # Если имя файла не index.html, + # то отдавать по имени файла + if name == 'index.html': + name = 'index' + self[name] = Document(name, self, asset) + except HiddenFile: + # Do nothing, file was not added to self + pass def create_dir(self, asset): path = PurePath(asset) @@ -128,6 +137,10 @@ class Markdown(Document): AssetResolver().resolve(self.path).stream(), handler=CustomYAMLHandler(self.data_path), ).to_dict() + if 'published' in self.page and \ + str(datetime.now()) < str(self.page['published']): + raise HiddenFile + @implementer(IMarkdown) @@ -137,6 +150,9 @@ class YAML(Document): self.page = yaml.load( AssetResolver().resolve(self.path).stream(), LoaderFactory(self.data_path)) + if 'published' in self.page and \ + str(datetime.now()) < str(self.page['published']): + raise HiddenFile class Jinja2(Document):