Реализация поддержки view [закрывает #22]

master
Антон Касимов 2019-02-24 00:17:06 +03:00
parent 255aa9b57a
commit 02baa99d89
3 changed files with 21 additions and 10 deletions

View File

@ -5,7 +5,7 @@ from pyramid.view import (
from pyramid.renderers import render_to_response
from pyramid.httpexceptions import (HTTPFound, HTTPNotFound)
from pyramid.response import FileResponse
from pyramid.path import AssetResolver
from pyramid.path import (DottedNameResolver, AssetResolver)
from pathlib import PurePath
import yaml
@ -36,6 +36,17 @@ class PagesView:
@view_config(context=IMarkdown)
def process_yaml(self):
if 'view' in self.context.page:
r = DottedNameResolver()
if isinstance(self.context.page['view'], str):
r.resolve(self.context.page['view'])(self)
else:
for view in self.context.page['view']:
if isinstance(view, str):
r.resolve(view)(self)
else:
for name, kw in view.items():
r.resolve(name)(self, **kw)
post = self.context.page
if 'redirect' in post:
return HTTPFound(location=post['redirect'])

View File

@ -16,7 +16,7 @@ def pages(current_directory):
@pytest.fixture
def request():
def fake_request():
from pyramid.testing import DummyRequest
return DummyRequest()
@ -37,20 +37,20 @@ def test_loading_markdown(pages):
assert pages['index'].page['title'] == 'Заглушка для тестов БД'
def test_generating_markdown(pages, request, config):
def test_generating_markdown(pages, fake_request, config):
from flatfilecms.views.pages import PagesView
view = PagesView(pages['index'], request)
view = PagesView(pages['index'], fake_request)
assert view.process_yaml().text == 'Hello World!'
def test_view(pages, request, config):
def test_view(pages, fake_request, config):
from flatfilecms.views.pages import PagesView
view = PagesView(pages['view'], request)
view = PagesView(pages['view'], fake_request)
assert view.process_yaml().text == 'Hello World! View1'
def test_views(pages, request, config):
def test_views(pages, fake_request, config):
from flatfilecms.views.pages import PagesView
view = PagesView(pages['views'], request)
view = PagesView(pages['views'], fake_request)
assert view.process_yaml().text == \
'Hello World! View1 View2 View3(a:1, b:2)'

View File

@ -6,5 +6,5 @@ def test2(self):
self.context.page['content'] += ' View2'
def test3(self, a, b):
self.context.page['content'] += f' View3(a:{a}, b:{b})'
def test3(self, **kwargs):
self.context.page['content'] += f" View3(a:{kwargs['a']}, b:{kwargs['b']})"