65 lines
1.9 KiB
Python
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
|
|
)
|