Example #1
0
    def test_customize_layers_with_custom_name(self):
        self.dir3 = tempfile.mkdtemp()

        self._mkfile1(self.file1)
        f = open(os.path.join(self.dir1, 'file2.pt'), 'wb')
        f.write(self.file2)
        f.close()

        tmpl1 = view.template(os.path.join(self.dir1, 'file.pt'),
                              layer = 'layer')
        tmpl2 = view.template(os.path.join(self.dir1, 'file2.pt'),
                              layer = 'layer')
        self.assertEqual(tmpl1(), '<div>Test template 1</div>')
        self.assertEqual(tmpl2(), '<div>Test template 2</div>')

        # layers
        view.layer('layer', self.dir2)
        view.layer('layer', self.dir3)

        # override file.pt
        f = open(os.path.join(self.dir2, 'file.pt'), 'wb')
        f.write(self.file2)
        f.close()

        # override file2.pt
        f = open(os.path.join(self.dir3, 'file2.pt'), 'wb')
        f.write(self.file1)
        f.close()

        # initialize layers
        customize._Manager.initialize()

        self.assertEqual(tmpl1(), '<div>Test template 2</div>')
        self.assertEqual(tmpl2(), '<div>Test template 1</div>')
Example #2
0
 def test_tmpl_multiple_disable_packages(self):
     tmpl = view.template('ptah.view.tests:templates/test.pt',
                          nolayer = True)
     tmpl = view.template('ptah.view.tests:templates/test.pt',
                          nolayer = True)
     self.assertEqual(
         tapi.registry.keys(), [])
Example #3
0
    def test_tmpl_multiple_extra_params(self):
        view.template('ptah.view.tests:templates/test.pt',
                      title = 'Test template',
                      description = 'Test template description')

        self.assertEqual(tapi.registry['ptah.view.tests']['test.pt'][1:3],
                         ['Test template', 'Test template description'])
Example #4
0
    def test_tmpl(self):
        tmpl = view.template('ptah.view.tests:templates/test.pt')
        self.assertTrue('PageTemplateFile' in repr(tmpl))

        tmpl = view.template('ptah.view.tests:templates/test.txt')
        self.assertTrue('PageTextTemplateFile' in repr(tmpl))

        self.assertEqual(tapi.registry['ptah.view.tests'].keys(),
                         ['test.pt', 'test.txt'])
Example #5
0
    def test_customize_global_createfolder_and_reloadpackage(self):
        self._mkfile1(self.file1)

        tmpl = view.template(os.path.join(self.dir1, 'file.pt'))
        self.assertEqual(tmpl(), '<div>Test template 1</div>')

        self.dir2 = os.path.join(self.dir2, 'test')

        # enable custom folder
        self._init_ptah({'template.custom': self.dir2})

        self.assertTrue(os.path.isdir(self.dir2))
        self.assertEqual(tmpl(), '<div>Test template 1</div>')

        # create new custom resource
        os.mkdir(os.path.join(self.dir2, 'ptah.view.tests'))
        self._mkfile2(self.file2)
        time.sleep(0.1)

        # template reloaded
        self.assertEqual(tmpl(), '<div>Test template 2</div>')

        # remove template
        shutil.rmtree(os.path.join(self.dir2, 'ptah.view.tests'))

        time.sleep(0.1)
        self.assertEqual(tmpl(), '<div>Test template 1</div>')
Example #6
0
    def test_commands_template_customize_error2(self):
        tmpl = view.template('ptah.view:/tests/templates/test.pt')
        sys.argv[:] = ['paste', 'templates', '-c', 'unknownpkg:filename']

        val = self._run()

        self.assertTrue("Can't find package 'unknownpkg'" in val)
Example #7
0
    def test_renderer_tmpl_extra_params_none(self):
        def viewFactory(context, request):
            return None, None

        r = Renderer(template=view.template('templates/test.pt'))
        res = r(Context(), self.request, viewFactory)
        self.assertEqual(res.body.strip(), '<div>My snippet</div>')
Example #8
0
    def test_customize_global_reenable(self):
        self._mkfile1(self.file1)
        self._mkfile2(self.file2)

        f = open(os.path.join(self.dir2, 'test'), 'wb')
        f.write(' ')
        f.close()

        tmpl = view.template(os.path.join(self.dir1, 'file.pt'))
        self.assertEqual(tmpl(), '<div>Test template 1</div>')

        # load without watcher
        self._init_ptah({'template.custom': os.path.join(self.dir2, 'test')})

        self.assertTrue(customize.TEMPLATE._manager is None)
        self.assertTrue(customize.TEMPLATE._watcher is None)
        self.assertEqual(tmpl(), '<div>Test template 1</div>')

        # reinitialize
        customize.TEMPLATE['custom'] = self.dir2
        customize.TEMPLATE['watcher'] = ''
        customize.initialize(config.SettingsInitializing(object()))

        self.assertTrue(customize.TEMPLATE._manager is not None)
        self.assertTrue(customize.TEMPLATE._watcher is None)

        self.assertEqual(tmpl(), '<div>Test template 2</div>')
Example #9
0
    def test_commands_template_custom_layer_name(self):
        tmpl = view.template('ptah.view:/tests/templates/test.pt',
                             layer = 'test-unknown')

        sys.argv[:] = ['paste', 'templates', '-l', 'test-unknown']

        val = self._run()
Example #10
0
    def test_view_with_template(self):
        view.register_view(
            'index.html', view.View, Context,
            template=view.template('ptah.view.tests:templates/test.pt'))

        self._init_ptah()

        res = view.render_view('index.html', Context(), self.request)
        self.assertEqual(res.body.strip(), '<div>My snippet</div>')
Example #11
0
    def test_customize_global_enabled(self):
        self._mkfile1(self.file1)
        self._mkfile2(self.file2)

        tmpl = view.template(os.path.join(self.dir1, 'file.pt'))
        self.assertEqual(tmpl(), '<div>Test template 1</div>')

        # enable custom folder
        self._init_ptah({'template.custom': self.dir2})
Example #12
0
class WorkspaceLayout(view.Layout):
    view.layout('workspace',
                cms.ApplicationRoot,
                parent='page',
                layer='test',
                template=view.template('templates/layoutworkspace.pt'))
    """ same as PageLayout, it uses 'page' as parent layout """
    def update(self):
        self.user = ptah.auth_service.get_current_principal()
        self.isAnon = self.user is None
Example #13
0
    def test_view_register_view_function_requestonly_template(self):
        def render(request):
            return {}

        view.register_view('index.html', render,
                          template = view.template('templates/test.pt'))
        self._init_ptah()

        context = Context()
        v = self._view('index.html', context, self.request)
        self.assertEqual(v.body.strip(), '<div>My snippet</div>')
Example #14
0
    def test_renderer_tmpl(self):
        def viewFactory(context, request):
            return None, {}

        r = Renderer(template=view.template('templates/test.pt'))
        res = r(Context(), self.request, viewFactory)

        self.assertTrue(isinstance(res, Response))
        self.assertEqual(res.body.strip(), '<div>My snippet</div>')
        self.assertEqual(res.status, '200 OK')
        self.assertEqual(res.content_type, 'text/html')
Example #15
0
    def test_view_httpresp_from_update(self):
        class MyView(view.View):
            def update(self):
                raise HTTPForbidden()

        view.register_view('index.html', MyView, Context,
                          template = view.template('templates/test.pt'))
        self._init_ptah()

        resp = view.render_view('index.html', Context(), self.request)
        self.assertIsInstance(resp, HTTPForbidden)
Example #16
0
    def test_renderer_tmpl_change_response_attrs(self):
        def viewFactory(context, request):
            request.response.status = 202
            request.response.content_type = 'text/plain'
            return None, None

        r = Renderer(view.template('templates/test.pt'))
        res = r(Context(), self.request, viewFactory)

        self.assertEqual(res.body.strip(), '<div>My snippet</div>')
        self.assertEqual(res.status, '202 Accepted')
        self.assertEqual(res.content_type, 'text/plain')
Example #17
0
    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>')
Example #18
0
    def test_commands_template_customize(self):
        tmpl = view.template('ptah.view:/tests/templates/test.pt')

        sys.argv[:] = ['paste', 'templates', '-c', 'ptah.view:test.pt',
                       '-o', self.dir]

        val = self._run()

        self.assertTrue(
            "Template 'ptah.view:test.pt' has been customized" in val)
        self.assertEqual(
            open(os.path.join(self.dir, 'ptah.view', 'test.pt'),'rb').read().strip(),
            '<div>My snippet</div>')
Example #19
0
    def test_commands_template_customize_error5(self):
        tmpl = view.template('ptah.view:/tests/templates/test.pt')

        file = os.path.join(self.dir, 'file')
        f = open(file, 'wb')
        f.write(' ')
        f.close()

        sys.argv[:] = ['paste', 'templates', '-c', 'ptah.view:test.pt',
                       '-o', file]

        val = self._run()
        self.assertTrue("Custom path is not a directory:" in val)
Example #20
0
    def test_commands_template_list(self):
        tmpl = view.template('ptah.view:/tests/templates/test.pt',
                             title='Test template title',
                             description = 'Test template description')

        sys.argv[:] = ['paste', 'templates', '-l', 'ptah.view']

        val = self._run()

        self.assertTrue('* ptah.view' in val)
        self.assertTrue('* ptah.view.tests' not in val)
        self.assertTrue('Test template title' in val)
        self.assertTrue('Test template description' in val)
Example #21
0
    def test_commands_template_print(self):
        tmpl = view.template('ptah.view:/tests/templates/test.pt',
                             title='Test template title',
                             description = 'Test template description')

        sys.argv[:] = ['paste', 'templates', '-p', 'ptah.view:test.pt']

        val = self._run()
        self.assertTrue('Test template title' in val)
        self.assertTrue('Test template description' in val)
        self.assertTrue('Package:  ptah.view' in val)
        self.assertTrue('Template: test.pt' in val)
        self.assertTrue('<div>My snippet</div>' in val)
Example #22
0
    def test_commands_template_all_several_pkg(self):
        tmpl = view.template('ptah.view:/tests/templates/test.pt')

        sys.argv[:] = ['paste', 'templates', '-a']

        val = self._run()

        self.assertTrue('* ptah.view' in val)
        self.assertTrue('* ptah.view.tests' in val)

        name = os.path.join('..', 'ptah', 'view', 'tests',
            'templates', 'test.pt')
        self.assertTrue(
            '- test.pt: %s'%name in val)
Example #23
0
    def test_commands_template_skip_existing(self):
        tmpl = view.template('ptah.view:/tests/templates/test.pt')

        os.makedirs(os.path.join(self.dir, 'ptah.view'))
        open(os.path.join(self.dir, 'ptah.view', 'test.pt'),'wb').write(
            'my customized template')

        sys.argv[:] = ['paste', 'templates', '-c', 'ptah.view:test.pt',
                       '-o', self.dir]

        val = self._run()
        self.assertTrue("Custom file 'test.pt' already exists" in val)
        self.assertEqual(
            open(os.path.join(self.dir, 'ptah.view', 'test.pt'),'rb').read(),
            'my customized template')
Example #24
0
    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)
Example #25
0
    def test_commands_template_force_override(self):
        tmpl = view.template('ptah.view:/tests/templates/test.pt')

        os.makedirs(os.path.join(self.dir, 'ptah.view'))
        open(os.path.join(self.dir, 'ptah.view', 'test.pt'),'w').write(
            'my customized template')

        sys.argv[:] = ['paste', 'templates', '-c', 'ptah.view:test.pt',
                       '-o', self.dir, '--force']

        val = self._run()
        self.assertTrue("Overrids: Template 'ptah.view:test.pt' has been customized." in val)
        self.assertEqual(
            open(os.path.join(self.dir, 'ptah.view', 'test.pt'),'rb').read().strip(),
            '<div>My snippet</div>')
Example #26
0
    def test_customize_global_custom_layer_name(self):
        self._mkfile1(self.file1)

        tmpl = view.template(os.path.join(self.dir1, 'file.pt'),
                             layer='layer')
        self.assertEqual(tmpl(), '<div>Test template 1</div>')

        os.makedirs(os.path.join(self.dir2, 'layer'))
        f = open(os.path.join(self.dir2, 'layer', 'file.pt'), 'wb')
        f.write(self.file2)
        f.close()

        # enable custom folder
        self._init_ptah({'template.custom': self.dir2})

        self.assertEqual(tmpl(), '<div>Test template 2</div>')
Example #27
0
    def test_customize_global_disable(self):
        self._mkfile1(self.file1)
        self._mkfile2(self.file2)

        tmpl = view.template(os.path.join(self.dir1, 'file.pt'))
        self.assertEqual(tmpl(), '<div>Test template 1</div>')

        # enable custom folder
        self._init_ptah({'template.custom': self.dir2})
        self.assertEqual(tmpl(), '<div>Test template 2</div>')

        customize.TEMPLATE['custom'] = ''
        customize.initialize(config.SettingsInitializing(None))

        self.assertTrue(customize.TEMPLATE._manager is None)
        self.assertTrue(customize.TEMPLATE._watcher is None)
        self.assertEqual(tmpl(), '<div>Test template 1</div>')
Example #28
0
    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)
Example #29
0
class PageLayout(view.Layout):
    view.layout('page',
                cms.ApplicationRoot,
                layer='test',
                template=view.template('templates/layoutpage.pt'))
    """ override 'page' layout from ptah.cmsapp

    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,
            'request': self.request,
            'format': format
        })

        return self.template(**kwargs)
Example #30
0
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):
    view.layout('page', PloudApplicationRoot, layer=LAYER)
Example #31
0
        raise KeyError(key)


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):
Example #32
0

class MembershipView(view.View):
    view.pview(route='frontend-membership', layout='page',
               template = view.template('newui/membership.pt'))

    policy = 0

    def update(self):
        uri = authenticated_userid(self.request)
        user = User.getByURI(uri)
        info = {'email': user.email,
                'policy': getattr(user, 'type', 0)}
        self.policy = info['policy']
        self.user = user
        self.isAnon = user is None
        return info


view.register_view(
    route='frontend-membership1', layout='page',
    template = view.template('newui/membership-free.pt'))

view.register_view(
    route='frontend-membership2', layout='page',
    template = view.template('newui/membership1.pt'))

view.register_view(
    route='frontend-membership3', layout='page',
    template = view.template('newui/membership2.pt'))