This repository has been archived on 2020-09-29. You can view files and clone it, but cannot push or open issues/pull-requests.
flatfilecms/flatfilecms/views/__init__.py

45 lines
1.5 KiB
Python

import yaml
from pyramid.renderers import render_to_response
from pyramid.path import AssetResolver
from pathlib import PurePath
from flatfilecms.models import LoaderFactory
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)
def set_content_type(self, content_type):
self.request.response.content_type = content_type
def blog(self, options={}):
path = options.get('base', '')
format = options.get('format', 'blogposts')
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))
post = self.context.page.copy()
post['pages'] = sorted(
postlist, key=lambda t: t[1].page['published'], reverse=True)
if 'menu' not in post:
post['menu'] = yaml.load(
AssetResolver().resolve(
str(PurePath(self.context.data_path) /
'menu/default.yaml')).stream(),
LoaderFactory(self.context.data_path))
if format == 'atom':
set_content_type(self, 'application/atom+xml')
return render_to_response(
'{0}.jinja2'.format(post.get('template', format)),
post,
request=self.request,
response=self.request.response)