コード例 #1
0
ファイル: test_layout.py プロジェクト: mcdonc/ptah
    def test_layout_chain_same_layer_id_on_different_levels(self):
        class View(view.View):
            def render(self):
                return "View: test"

        class Layout1(view.Layout):
            def render(self, content):
                return "<div>%s</div>" % content

        class Layout2(view.Layout):
            def render(self, content):
                return "<html>%s</html>" % content

        view.register_layout("", klass=Layout1, context=Context, parent=".")
        view.register_layout("", klass=Layout2, context=Root, parent=None)
        self._init_ptah()

        root = Root()
        context1 = Context2(root)
        context2 = Context(context1)

        renderer = SimpleRenderer()
        res = renderer(context2, self.request, viewMapper(View, "render"))

        self.assertTrue("<html><div>View: test</div></html>" in res.body)
コード例 #2
0
ファイル: test_layout.py プロジェクト: blaflamme/ptah
    def test_layout_simple_chain_multi_level(self):
        class LayoutTest(view.Layout):
            def render(self, content):
                return '<div>%s</div>'%content

        class LayoutPage(view.Layout):
            def render(self, content):
                return '<html>%s</html>'%content

        view.register_layout('', klass=LayoutPage, context=Root, parent=None)
        view.register_layout('test', klass=LayoutTest, parent='.')
        self._init_ptah()

        root = Root()
        context = Context(root)

        renderer = LayoutRenderer('test')
        res = renderer(context, self.request, 'View: test')

        self.assertTrue('<html><div>View: test</div></html>' in res)

        layout = query_layout(context, self.request, 'test')
        self.assertTrue(isinstance(layout, LayoutTest))

        rootlayout = query_layout(context, self.request, '')
        self.assertTrue(isinstance(rootlayout, LayoutPage))

        rootlayout = query_layout(root, self.request, '')
        self.assertTrue(isinstance(rootlayout, LayoutPage))
コード例 #3
0
ファイル: test_layout.py プロジェクト: mcdonc/ptah
    def test_layout_simple_chain_multi_level(self):
        class View(view.View):
            def render(self):
                return "View: test"

        class LayoutTest(view.Layout):
            def render(self, content):
                return "<div>%s</div>" % content

        class LayoutPage(view.Layout):
            def render(self, content):
                return "<html>%s</html>" % content

        view.register_layout("", klass=LayoutPage, context=Root, parent=None)
        view.register_layout("test", klass=LayoutTest, parent=".")
        self._init_ptah()

        root = Root()
        context = Context(root)
        v = View(context, self.request)

        renderer = SimpleRenderer("test")
        res = renderer(context, self.request, viewMapper(View, "render"))

        self.assertTrue("<html><div>View: test</div></html>" in res.body)

        layout = query_layout(self.request, v.context, "test")
        self.assertTrue(isinstance(layout, LayoutTest))

        rootlayout = query_layout(self.request, context, "")
        self.assertTrue(isinstance(rootlayout, LayoutPage))

        rootlayout = query_layout(self.request, root, "")
        self.assertTrue(isinstance(rootlayout, LayoutPage))
コード例 #4
0
ファイル: test_layout.py プロジェクト: mcdonc/ptah
    def test_layout_register_custom_class(self):
        class MyLayout(view.Layout):
            pass

        view.register_layout("test", klass=MyLayout)
        self._init_ptah()

        layout = config.registry.getMultiAdapter((object(), self.request), view.ILayout, "test")

        self.assertTrue(isinstance(layout, MyLayout))
コード例 #5
0
ファイル: test_layout.py プロジェクト: mcdonc/ptah
    def test_layout_register_simple(self):
        view.register_layout("test")
        self._init_ptah()

        layout = config.registry.getMultiAdapter((object(), self.request), view.ILayout, "test")

        self.assertEqual(layout.name, "test")
        self.assertEqual(layout.__name__, "test")
        self.assertTrue(isinstance(layout, Layout))
        self.assertTrue(issubclass(layout.__class__, Layout))
        self.assertTrue(layout.__class__ is not Layout)
コード例 #6
0
ファイル: test_layout.py プロジェクト: mcdonc/ptah
    def test_layout_for_route(self):
        view.register_route("test-route", "/test/", use_global_views=True)
        view.register_layout("test", route="test-route")
        self._init_ptah()

        layout = query_layout(self.request, Context(), "test")
        self.assertIsNone(layout)

        request_iface = config.registry.getUtility(IRouteRequest, name="test-route")
        interface.directlyProvides(self.request, request_iface)

        layout = query_layout(self.request, Context(), "test")
        self.assertIsNotNone(layout)
コード例 #7
0
ファイル: test_layout.py プロジェクト: blaflamme/ptah
    def test_layout_simple_view_without_template(self):
        class View(view.View):
            def render(self):
                return 'test'

        view.register_layout('test')
        self._init_ptah()

        v = View(Context(), self.request)

        layout = query_layout(v.context, self.request, 'test')
        layout.update()
        self.assertTrue('test' == layout.render(v.render()))
コード例 #8
0
ファイル: test_layout.py プロジェクト: blaflamme/ptah
    def test_layout_for_route(self):
        view.register_route('test-route', '/test/', use_global_views=True)
        view.register_layout('test', route = 'test-route')
        self._init_ptah()

        layout = query_layout(Context(), self.request, 'test')
        self.assertIsNone(layout)

        request_iface = config.registry.getUtility(
            IRouteRequest, name='test-route')
        interface.directlyProvides(self.request, request_iface)

        layout = query_layout(Context(), self.request, 'test')
        self.assertIsNotNone(layout)
コード例 #9
0
ファイル: test_layout.py プロジェクト: blaflamme/ptah
    def test_layout_simple_view_with_template(self):
        fn = os.path.join(self.dir, 'test.pt')
        tmpl = open(fn, 'wb')
        tmpl.write('<html>${content}</html>')
        tmpl.close()

        view.register_layout('test', template = view.template(fn))
        self._init_ptah()

        renderer = LayoutRenderer('test')

        context = Context()
        res = renderer(context, self.request, 'View: test')

        self.assertTrue('<html>View: test</html>' in res)
コード例 #10
0
ファイル: test_layout.py プロジェクト: blaflamme/ptah
    def test_layout_chain_parent_notfound(self):
        class Layout(view.Layout):
            def render(self, content):
                return '<div>%s</div>'%content

        view.register_layout('', klass=Layout, context=Context, parent='page')
        self._init_ptah()

        root = Root()
        context = Context(root)

        renderer = LayoutRenderer('')
        res = renderer(context, self.request, 'View: test')

        self.assertTrue('<div>View: test</div>' in res)
コード例 #11
0
ファイル: test_view.py プロジェクト: mcdonc/ptah
    def test_view_register_view_layout(self):
        class MyLayout(view.Layout):
            def render(self, rendered):
                return '<html>%s</html>'%rendered

        class MyView(view.View):
            def render(self):
                return 'test'

        view.register_view('index.html', MyView, Context)
        view.register_layout('', Context, klass=MyLayout)
        self._init_ptah()

        context = Context()
        res = view.render_view('index.html', context, self.request)
        self.assertTrue('<html>test</html>' in res.body)
コード例 #12
0
ファイル: test_layout.py プロジェクト: blaflamme/ptah
    def test_layout_simple_chain_one_level(self):
        class LayoutTest(view.Layout):
            def render(self,content):
                return '<div>%s</div>'%content

        class LayoutPage(view.Layout):
            def render(self, content):
                return '<html>%s</html>'%content

        view.register_layout('', klass=LayoutPage, parent=None)
        view.register_layout('test', klass=LayoutTest, parent='.')
        self._init_ptah()

        context = Context()
        renderer = LayoutRenderer('test')
        res = renderer(context, self.request, 'View: test')

        self.assertTrue('<html><div>View: test</div></html>' in res)
コード例 #13
0
ファイル: test_layout.py プロジェクト: mcdonc/ptah
    def test_layout_chain_parent_notfound(self):
        class View(view.View):
            def __call__(self):
                return "View: test"

        class Layout(view.Layout):
            def render(self, content):
                return "<div>%s</div>" % content

        view.register_layout("", klass=Layout, context=Context, parent="page")
        self._init_ptah()

        root = Root()
        context = Context(root)

        renderer = SimpleRenderer(layout="")
        res = renderer(context, self.request, viewMapper(View))

        self.assertTrue("<div>View: test</div>" in res.body)
コード例 #14
0
ファイル: test_layout.py プロジェクト: mcdonc/ptah
    def test_layout_simple_view_with_template(self):
        class View(view.View):
            def __call__(self):
                return "View: test"

        fn = os.path.join(self.dir, "test.pt")
        tmpl = open(fn, "wb")
        tmpl.write("<html>${content}</html>")
        tmpl.close()

        view.register_layout("test", template=view.template(fn))
        self._init_ptah()

        renderer = SimpleRenderer(layout="test")

        context = Context()
        res = renderer(context, self.request, viewMapper(View))

        self.assertTrue("<html>View: test</html>" in res.body)
コード例 #15
0
ファイル: test_layout.py プロジェクト: blaflamme/ptah
    def test_layout_simple_multilevel(self):
        class Layout(view.Layout):
            def render(self, content):
                return '<html>%s</html>'%content

        view.register_layout('', klass=Layout, context=Root)
        self._init_ptah()

        root = Root()
        context = Context(root)

        # find layout for view
        layout = query_layout(context, self.request, '')
        self.assertTrue(isinstance(layout, Layout))

        renderer = LayoutRenderer('')
        res = renderer(context, self.request, 'View: test')

        self.assertTrue('<html>View: test</html>' in res)
コード例 #16
0
ファイル: test_renderers.py プロジェクト: mcdonc/ptah
    def test_renderer_simple_with_layout(self):
        class Layout(view.Layout):
            def render(self, content):
                return '<html>%s</html>'%content

        view.register_layout('test', klass=Layout)
        self._init_ptah()

        def viewFactory(context, request):
            return None, 'test'

        # renderer layout is different
        r = SimpleRenderer('')
        res = r(Context(), self.request, viewFactory)
        self.assertEqual(res.body, 'test')

        # layout is 'test'
        r = SimpleRenderer('test')
        res = r(Context(), self.request, viewFactory)
        self.assertEqual(res.body, '<html>test</html>')
コード例 #17
0
ファイル: test_layout.py プロジェクト: blaflamme/ptah
    def test_layout_simple_view(self):
        class View(view.View):
            def __call__(self):
                return 'View: test'
        class Layout(view.Layout):
            def render(self, rendered):
                return '<html>%s</html>'%rendered

        view.register_layout('test', klass=Layout)
        self._init_ptah()

        v = View(Context(), self.request)

        # find layout for view
        layout = query_layout(v.context, self.request, 'test')
        self.assertTrue(isinstance(layout, Layout))

        layout.update()
        self.assertEqual(layout.render(v()),
                         '<html>View: test</html>')
コード例 #18
0
ファイル: test_view.py プロジェクト: mcdonc/ptah
    def test_view_register_view_disable_layout1(self):
        class MyLayout(view.Layout):
            def render(self, rendered):
                return '<html>%s</html>'%rendered

        class MyView(view.View):
            def render(self):
                return 'test'

        view.register_view('index.html', MyView, Context, layout=None)
        view.register_layout('', Context, klass=MyLayout)
        self._init_ptah()

        context = Context()
        res = view.render_view('index.html', context, self.request)
        self.assertEqual(res.body, 'test')

        v = MyView(None, self.request)
        self.assertEqual(MyLayout(v, self.request).render(
                v.render()), '<html>test</html>')
コード例 #19
0
ファイル: test_layout.py プロジェクト: blaflamme/ptah
    def test_layout_chain_same_layer_id_on_different_levels(self):
        class Layout1(view.Layout):
            def render(self, content):
                return '<div>%s</div>'%content

        class Layout2(view.Layout):
            def render(self, content):
                return '<html>%s</html>'%content

        view.register_layout('', klass=Layout1, context=Context, parent='.')
        view.register_layout('', klass=Layout2, context=Root, parent=None)
        self._init_ptah()

        root = Root()
        context1 = Context2(root)
        context2 = Context(context1)

        renderer = LayoutRenderer('')
        res = renderer(context2, self.request, 'View: test')

        self.assertTrue('<html><div>View: test</div></html>' in res)
コード例 #20
0
ファイル: test_renderers.py プロジェクト: mcdonc/ptah
    def test_renderer_tmpl_with_layout(self):
        class Layout(view.Layout):
            def render(self, content):
                return '<html>%s</html>'%content

        view.register_layout('test', klass=Layout)
        self._init_ptah()

        def viewFactory(context, request):
            return None, {}

        # renderer layout is different
        r = Renderer(view.template('templates/test.pt'), '')
        res = r(Context(), self.request, viewFactory)
        self.assertEqual(res.body.strip(), '<div>My snippet</div>')

        # layout is 'test'
        config.cleanup_system()
        r = Renderer(view.template('templates/test.pt'), 'test')
        res = r(Context(), self.request, viewFactory)
        self.assertEqual(''.join(res.body.split()), '<html><div>Mysnippet</div></html>')
コード例 #21
0
ファイル: test_layout.py プロジェクト: mcdonc/ptah
    def test_layout_simple_context(self):
        class View(view.View):
            layout = "test"

            def render(self):
                return "View: test"

        class Layout(view.Layout):
            def render(self, content):
                return "<html>%s</html>" % content

        view.register_layout("test", klass=Layout, context=Context)
        self._init_ptah()

        v = View(Context(), self.request)

        # find layout for view
        layout = query_layout(self.request, v.context, "test")
        self.assertTrue(isinstance(layout, Layout))

        layout.update()
        self.assertEqual(layout.render(v.render()), "<html>View: test</html>")
コード例 #22
0
ファイル: test_layout.py プロジェクト: mcdonc/ptah
    def test_layout_simple_chain_one_level(self):
        class View(view.View):
            def render(self):
                return "View: test"

        class LayoutTest(view.Layout):
            def render(self, content):
                return "<div>%s</div>" % content

        class LayoutPage(view.Layout):
            def render(self, content):
                return "<html>%s</html>" % content

        view.register_layout("", klass=LayoutPage, parent=None)
        view.register_layout("test", klass=LayoutTest, parent=".")
        self._init_ptah()

        context = Context()
        renderer = SimpleRenderer("test")
        res = renderer(context, self.request, viewMapper(View, "render"))

        self.assertTrue("<html><div>View: test</div></html>" in res.body)
コード例 #23
0
ファイル: test_layout.py プロジェクト: mcdonc/ptah
    def test_layout_simple_multilevel(self):
        class View(view.View):
            def __call__(self):
                return "View: test"

        class Layout(view.Layout):
            def render(self, content):
                return "<html>%s</html>" % content

        view.register_layout("", klass=Layout, context=Root)
        self._init_ptah()

        root = Root()
        context = Context(root)
        v = View(context, self.request)

        # find layout for view
        layout = query_layout(self.request, context, "")
        self.assertTrue(isinstance(layout, Layout))

        renderer = SimpleRenderer(layout="")
        res = renderer(context, self.request, viewMapper(View))

        self.assertTrue("<html>View: test</html>" in res.body)
コード例 #24
0
ファイル: test_layout.py プロジェクト: blaflamme/ptah
    def test_layout_chain_multi_level(self):
        class Layout1(view.Layout):
            """ """
        class Layout2(view.Layout):
            """ """
        class Layout3(view.Layout):
            """ """

        class Context1(object):
            """ """
        class Context2(object):
            """ """
        class Context3(object):
            """ """

        view.register_layout('l1', klass=Layout1, context=Context1)
        view.register_layout('l1', klass=Layout2, context=Context2, parent='l1')
        view.register_layout('l3', klass=Layout3, context=Context3, parent='l1')
        self._init_ptah()

        root = Root()
        context1 = Context1()
        context2 = Context2()
        context3 = Context3()

        context1.__parent__ = root
        context2.__parent__ = context1
        context3.__parent__ = context2

        chain = query_layout_chain(context1, self.request, 'l1')

        self.assertEqual(len(chain), 1)
        self.assertIsInstance(chain[0], Layout1)

        chain = query_layout_chain(context2, self.request, 'l1')

        self.assertEqual(len(chain), 2)
        self.assertIsInstance(chain[0], Layout2)
        self.assertIsInstance(chain[1], Layout1)

        chain = query_layout_chain(context3, self.request, 'l3')

        self.assertEqual(len(chain), 3)
        self.assertIsInstance(chain[0], Layout3)
        self.assertIsInstance(chain[1], Layout2)
        self.assertIsInstance(chain[2], Layout1)
コード例 #25
0
ファイル: manage.py プロジェクト: blaflamme/ptah
view.register_route(
    'ptah-manage-view','/ptah-manage',
    PtahManageRoute, use_global_views=True)

view.register_route(
    'ptah-manage','/ptah-manage/*traverse',
    PtahManageRoute, use_global_views=True)

view.snippettype('ptah-module-actions', PtahModule)

view.register_snippet(
    'ptah-module-actions', PtahModule,
    template = view.template('ptah.manage:templates/moduleactions.pt'))

view.register_layout(
    '', PtahManageRoute, parent='ptah-manage',
    template=view.template("ptah.manage:templates/ptah-layout.pt"))


class LayoutManage(view.Layout):
    view.layout('ptah-manage', PtahManageRoute,
                template=view.template("ptah.manage:templates/ptah-manage.pt"))

    def update(self):
        self.user = authService.get_current_principal()

        mod = self.request.context
        while not isinstance(mod, PtahModule):
            mod = getattr(mod, '__parent__', None)
            if mod is None: # pragma: no cover
                break
コード例 #26
0
ファイル: layouts.py プロジェクト: nerdfiles/ptah-aha
import ptah
from ptah import view, cms, manage, authService

from myapp301.app import ApplicationRoot

ptah.cms.uiaction(cms.Content, 'layout-preview', 'Layout preview',
                  description='view parameter is any registered view name for object',
                  action='layout-preview.html?view=')

view.register_layout(
    'ptah-page', ApplicationRoot, parent='workspace', layer='myapp301',
    template = view.template("myapp301:templates/layout-ptahpage.pt"))

class PageLayout(view.Layout):
    view.layout('page', ApplicationRoot, layer='myapp301',
                template = view.template('templates/layout-page.pt'))

    """ override 'page' layout

    layer - identifier, import order does matter, last imported wins
    """

    def render(self, content, **kwargs):
        """ default implementation, just example. in most cases
        default implementation is ok. """
        if self.template is None:
            return content

        kwargs.update({'view': self,
                       'content': content,
                       'context': self.context,
コード例 #27
0
ファイル: layout.py プロジェクト: nerdfiles/ploud-prod
from ptah import view
from pyramid.httpexceptions import HTTPFound
from pyramid.security import forget, authenticated_userid

import ptah
import ptah.cms
from ploud.utils.policy import POLICIES
from ploud.frontend.config import PLOUD, LAYER
from ploud.frontend.root import PloudApplicationRoot

import config
from models import User


view.register_layout(
    'workspace', context=PloudApplicationRoot, parent='page',
    template=view.template('ploud.frontend:newui/layout-workspace.pt'))

view.register_layout(
    '', ptah.cms.IContent, parent="workspace", layer=LAYER,
    template=view.template("ploud.frontend:newui/layout-content.pt"))


class Fake(view.Layout):
    view.layout('', PloudApplicationRoot, parent='page', layer=LAYER)
    
    def render(self, content):
        return content


class MainLayout(view.Layout):
コード例 #28
0
ファイル: views.py プロジェクト: mcdonc/ptah
from zope import interface
from ptah import view, form, config
from pyramid.httpexceptions import HTTPFound, HTTPNotFound

import ptah
from ptah import authService, manage
from ptah import cms
from ptah.cms import tinfo, interfaces, events

from forms import AddForm
from uiactions import list_uiactions


view.register_layout(
    'page', cms.ApplicationRoot,
    template = view.template("ptah.cmsapp:templates/layoutpage.pt"))

view.register_layout(
    'ptah-page', cms.ApplicationRoot, parent='workspace', layer='ptah.cmsapp',
    template = view.template("ptah.cmsapp:templates/layout-ptahsecurity.pt"))


class LayoutWorkspace(view.Layout):
    view.layout('workspace', cms.ApplicationRoot, parent="page",
                template=view.template("ptah.cmsapp:templates/layoutworkspace.pt"))

    def update(self):
        self.root = getattr(self.request, 'root', None)
        self.user = authService.get_current_principal()
        self.isAnon = self.user is None
        self.ptahManager = manage.get_access_manager()(authService.get_userid())