Реализация поддержки 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.renderers import render_to_response
from pyramid.httpexceptions import (HTTPFound, HTTPNotFound) from pyramid.httpexceptions import (HTTPFound, HTTPNotFound)
from pyramid.response import FileResponse from pyramid.response import FileResponse
from pyramid.path import AssetResolver from pyramid.path import (DottedNameResolver, AssetResolver)
from pathlib import PurePath from pathlib import PurePath
import yaml import yaml
@ -36,6 +36,17 @@ class PagesView:
@view_config(context=IMarkdown) @view_config(context=IMarkdown)
def process_yaml(self): 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 post = self.context.page
if 'redirect' in post: if 'redirect' in post:
return HTTPFound(location=post['redirect']) return HTTPFound(location=post['redirect'])

View File

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

View File

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