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):