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>')
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(), [])
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'])
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'])
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>')
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)
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>')
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>')
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()
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>')
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})
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
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>')
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')
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)
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')
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>')
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>')
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)
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)
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)
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)
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')
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)
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>')
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>')
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>')
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)
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)
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)
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):
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'))