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/pages.py

65 lines
1.9 KiB
Python

from pyramid.view import (
view_config,
render_view_to_response,
)
from pyramid.renderers import render_to_response
from pyramid.httpexceptions import (HTTPFound, HTTPNotFound)
from pyramid.response import FileResponse
from pyramid.path import AssetResolver
from pathlib import PurePath
import yaml
from flatfilecms.models import (
Folder,
Document,
IMarkdown,
Jinja2,
LoaderFactory)
class PagesView:
def __init__(self, context, request):
self.context = context
self.request = request
@view_config(context=Folder)
def folder(self):
if 'index' not in self.context:
raise HTTPNotFound
return render_view_to_response(self.context['index'], self.request)
@view_config(context=Document)
def document(self):
return FileResponse(
AssetResolver().resolve(self.context.path).abspath(),
request=self.request)
@view_config(context=IMarkdown)
def process_yaml(self):
post = self.context.page
if 'redirect' in post:
return HTTPFound(location=post['redirect'])
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))
response = render_to_response(
'{0}.jinja2'.format(
post.get('template', 'default')),
post,
request=self.request
)
if 'content_type' in post:
response.content_type = post['content_type']
return response
@view_config(context=Jinja2)
def jinja2(self):
return render_to_response(
self.context.path,
{},
request=self.request
)