def testEditWithContentTypeCharset(self): manage_addPageTemplate(self.app, 'test', xml_utf8, encoding='utf-8') zpt = self.app['test'] xml_unicode = unicode(xml_utf8, 'utf-8').strip() zpt.pt_edit(xml_unicode, 'text/xml') zpt.pt_edit(xml_unicode, 'text/xml; charset=utf-8') self.assertEqual(zpt.read(), xml_unicode)
def testWriteAcceptsUnicode(self): manage_addPageTemplate(self.app, 'test', '', encoding='utf-8') zpt = self.app['test'] s = u'this is unicode' zpt.write(s) self.assertEqual(zpt.read(), s) self.assertEqual(isinstance(zpt.read(), unicode), True)
def _createZPT(self): manage_addPageTemplate(self.app, 'test', text=utf8_text, encoding='utf-8') zpt = self.app['test'] return zpt
def testWriteAcceptsUnicode(self): manage_addPageTemplate(self.app, 'test', '', encoding='utf-8') zpt = self.app['test'] s = 'this is unicode' zpt.write(s) self.assertEqual(zpt.read(), s) self.assertEqual(isinstance(zpt.read(), str), True)
def loadSkelton(self, REQUEST, skelton='zch'): "Add Page Template PythonScript, DTMLMethod and Image read from skelton directory." for entry in os.listdir(os.path.join(package_home(globals()), 'skelton', skelton)): if entry[-3:] == '.pt' or entry[-4:]=='.pys' or entry[-5:]=='.dtml' or entry[-4:]=='.gif': f=open(os.path.join(package_home(globals()), 'skelton', skelton, entry), 'rb') file=f.read() f.close() try: if entry[-3:] == '.pt': id = entry[:-3] manage_addPageTemplate(self, id, '', file, encoding='utf-8') elif entry[-4:] == '.pys': id = entry[:-4] manage_addPythonScript(self,id) self._getOb(id).write(file) elif entry[-5:] == '.dtml': id = entry[:-5] self.manage_addDTMLMethod(id,'',file) elif entry[-4:] == '.gif': id = entry[:-4] self.manage_addImage(id,file,content_type='image/gif') except: pass if REQUEST is not None: return REQUEST.RESPONSE.redirect(REQUEST['HTTP_REFERER'])
def manage_afterAdd(self, item, container): """ Setup tasks upon instantiation """ manage_addPageTemplate( self , 'login_form' , title='Login Form' , text=BASIC_LOGIN_FORM )
def _create_eionet_survey(container): portal_map = container.getGeoMapTool() meeting_type = portal_map.getSymbolTitle(container.geo_type) survey_details = EIONET_SURVEYS[meeting_type] manage_addMegaSurvey(container, survey_details['id'], survey_details['title']) eionet_survey = container._getOb(survey_details['id']) eionet_survey.meeting_eionet_survey = True eionet_survey.allow_anonymous = 1 eionet_survey._p_changed = True for question in survey_details['questions']: eionet_survey.addWidget(**question) for widget in eionet_survey.objectValues(): widget.locked = True widget._p_changed = True if meeting_type == 'NRC meeting': # Create validation_html and validation_onsubmit for custom validation validation_onsubmit = os.path.join( os.path.dirname(__file__), 'eionet_survey', 'validation_onsubmit_NRC_meeting.txt') manage_addPythonScript(eionet_survey, 'validation_onsubmit') script_content = open(validation_onsubmit, 'rb').read() params = 'datamodel, errors' script_title = 'Custom validation logic' eionet_survey._getOb('validation_onsubmit').ZPythonScript_edit( params, script_content) eionet_survey._getOb('validation_onsubmit').ZPythonScript_setTitle( script_title) validation_html = os.path.join(os.path.dirname(__file__), 'eionet_survey', 'validation_html_NRC_meeting.txt') validation_title = "Custom questionnaire HTML" manage_addPageTemplate(eionet_survey, 'validation_html', validation_title, open(validation_html).read())
def testEditWithContentTypeCharset(self): manage_addPageTemplate(self.app, 'test', xml_utf8, encoding='utf-8') zpt = self.app['test'] xml_unicode = unicode(xml_utf8, 'utf-8').strip() zpt.pt_edit(xml_unicode, 'text/xml') zpt.pt_edit(xml_unicode, 'text/xml; charset=utf-8') self.assertEqual(zpt.read(), xml_unicode)
def installUi(self): '''Installs the user interface''' # Some useful imports from OFS.Folder import manage_addFolder from OFS.Image import manage_addImage, manage_addFile # Delete the existing folder if it existed zopeContent = self.app.objectIds() for name in ('ui', self.favIcon): if name in zopeContent: self.app.manage_delObjects([name]) manage_addFolder(self.app, 'ui') # Browse the physical ui folders (the Appy one and an app-specific, if # the app defines one) and create the corresponding objects in the Zope # folder. In the case of files having the same name in both folders, # the one from the app-specific folder is chosen. j = os.path.join uiFolders = [j(j(appy.getPath(), 'gen'), 'ui')] for uiFolder in self.config.appConfig.uiFolders: if uiFolder.startswith('..'): folder = j(os.path.dirname(self.config.diskFolder),uiFolder[3:]) else: folder = j(self.config.diskFolder, uiFolder) if os.path.exists(folder): uiFolders.insert(0, folder) for ui in uiFolders: for root, dirs, files in os.walk(ui): folderName = root[len(ui):] # Get the Zope folder that corresponds to this name zopeFolder = self.app.ui if folderName: for name in folderName.strip(os.sep).split(os.sep): zopeFolder = zopeFolder._getOb(name) # Create sub-folders at this level for name in dirs: if not hasattr(zopeFolder.aq_base, name): manage_addFolder(zopeFolder, name) # Create files at this level for name in files: ext = os.path.splitext(name)[1] if hasattr(zopeFolder.aq_base, name): continue f = file(j(root, name)) if name == self.favIcon: if not hasattr(self.app, name): # Copy it at the root. Else, IE won't notice it. manage_addImage(self.app, name, f) elif ext in gen.File.imageExts: manage_addImage(zopeFolder, name, f) else: manage_addFile(zopeFolder, name, f) f.close() # Update home and error pages from Products.PageTemplates.ZopePageTemplate import \ manage_addPageTemplate if 'index_html' in zopeContent: self.app.manage_delObjects(['index_html']) manage_addPageTemplate(self.app, 'index_html', '', homePage) if 'standard_error_message' in zopeContent: self.app.manage_delObjects(['standard_error_message']) manage_addPageTemplate(self.app, 'standard_error_message', '', errorPage)
def testPT_RenderWithISO885915(self): manage_addPageTemplate(self.app, 'test', text=iso885915_binary, encoding='iso-8859-15') zpt = self.app['test'] result = zpt.pt_render() # use startswith() because the renderer appends a trailing \n self.assertTrue(result.encode('iso-8859-15').startswith(iso885915_binary)) self.assertEqual(zpt.output_encoding, 'utf-8')
def manage_customize_index(self, REQUEST): """ create a custom map_index """ if "map_index" in self.objectIds(): raise ValueError("map_index already customized") else: text = get_template_source(self._index_template()) manage_addPageTemplate(self, id="map_index", title="", text=text) REQUEST.RESPONSE.redirect("%s/manage_workspace" % self.map_index.absolute_url())
def testPT_RenderWithUTF8(self): manage_addPageTemplate(self.app, 'test', text=utf8_str, encoding='utf-8') zpt = self.app['test'] result = zpt.pt_render() # use startswith() because the renderer appends a trailing \n self.assertEqual(result.encode('utf-8').startswith(utf8_str), True) self.assertEqual(zpt.output_encoding, 'utf-8')
def manage_afterAdd(self, item, container): """ Setup tasks upon instantiation """ manage_addPageTemplate( self , 'login_form' , title='Login Form' , text=BASIC_LOGIN_FORM ) self.login_form.__roles__ = []
def testPT_RenderWithUTF8(self): manage_addPageTemplate(self.app, 'test', text=utf8_str, encoding='utf-8') zpt = self.app['test'] result = zpt.pt_render() # use startswith() because the renderer appends a trailing \n self.assertEqual(result.encode('utf-8').startswith(utf8_str), True) self.assertEqual(zpt.output_encoding, 'iso-8859-15')
def testPT_RenderWithAscii(self): manage_addPageTemplate(self.app, 'test', text=ascii_binary, encoding='ascii') zpt = self.app['test'] result = zpt.pt_render() # use startswith() because the renderer appends a trailing \n self.assertEqual(result.encode('ascii').startswith(ascii_binary), True) self.assertEqual(zpt.output_encoding, 'utf-8')
def testPT_RenderWithAscii(self): manage_addPageTemplate(self.app, 'test', text=ascii_str, encoding='ascii') zpt = self.app['test'] result = zpt.pt_render() # use startswith() because the renderer appends a trailing \n self.assertEqual(result.encode('ascii').startswith(ascii_str), True) self.assertEqual(zpt.output_encoding, 'iso-8859-15')
def installUi(self): '''Installs the user interface.''' # Some useful imports. from OFS.Folder import manage_addFolder from OFS.Image import manage_addImage, manage_addFile # Delete the existing folder if it existed. zopeContent = self.app.objectIds() if 'ui' in zopeContent: self.app.manage_delObjects(['ui']) manage_addFolder(self.app, 'ui') # Browse the physical ui folders (the Appy one and an app-specific, if # the app defines one) and create the corresponding objects in the Zope # folder. In the case of files having the same name in both folders, # the one from the app-specific folder is chosen. j = os.path.join uiFolders = [j(j(appy.getPath(), 'gen'), 'ui')] for uiFolder in self.config.appConfig.uiFolders: if uiFolder.startswith('..'): folder = j(os.path.dirname(self.config.diskFolder), uiFolder[3:]) else: folder = j(self.config.diskFolder, uiFolder) if os.path.exists(folder): uiFolders.insert(0, folder) for ui in uiFolders: for root, dirs, files in os.walk(ui): folderName = root[len(ui):] # Get the Zope folder that corresponds to this name zopeFolder = self.app.ui if folderName: for name in folderName.strip(os.sep).split(os.sep): zopeFolder = zopeFolder._getOb(name) # Create sub-folders at this level for name in dirs: if not hasattr(zopeFolder.aq_base, name): manage_addFolder(zopeFolder, name) # Create files at this level for name in files: ext = os.path.splitext(name)[1] if hasattr(zopeFolder.aq_base, name): continue f = file(j(root, name)) if name == 'favicon.ico': if not hasattr(self.app, name): # Copy it at the root. Else, IE won't notice it. manage_addImage(self.app, name, f) elif ext in gen.File.imageExts: manage_addImage(zopeFolder, name, f) else: manage_addFile(zopeFolder, name, f) f.close() # Update the home page if 'index_html' in zopeContent: self.app.manage_delObjects(['index_html']) from Products.PageTemplates.ZopePageTemplate import \ manage_addPageTemplate manage_addPageTemplate(self.app, 'index_html', '', homePage) # Remove the error page. if 'standard_error_message' in zopeContent: self.app.manage_delObjects(['standard_error_message'])
def manage_create_validation_html(self, REQUEST=None): """ create a blank validation_html template in this survey """ datafile = path.join(path.dirname(__file__), "www", "initial_validation_html.txt") id = "validation_html" title = "Custom questionnaire HTML" manage_addPageTemplate(self, id, title, open(datafile).read()) if REQUEST is not None: url = self[id].absolute_url() + "/manage_workspace" REQUEST.RESPONSE.redirect(url)
def manage_customize_index(self, REQUEST): """ create a custom map_index """ if 'map_index' in self.objectIds(): raise ValueError('map_index already customized') else: manage_addPageTemplate(self, id='map_index', title='', text=self._index_template()._text) REQUEST.RESPONSE.redirect('%s/manage_workspace' % self.map_index.absolute_url())
def testPT_RenderWithISO885915(self): manage_addPageTemplate(self.app, 'test', text=iso885915_str, encoding='iso-8859-15') zpt = self.app['test'] result = zpt.pt_render() # use startswith() because the renderer appends a trailing \n self.assertTrue(result.encode('iso-8859-15' ).startswith(iso885915_str)) self.assertEqual(zpt.output_encoding, 'iso-8859-15')
def testPT_RenderUnicodeExpr(self): # Check workaround for unicode incompatibility of ZRPythonExpr. # See http://mail.zope.org/pipermail/zope/2007-February/170537.html manage_addPageTemplate(self.app, 'test', text=('<span tal:content="python: ' 'unicode(\'\xfe\', \'iso-8859-15\')" />'), encoding='iso-8859-15') zpt = self.app['test'] zpt.pt_render() # should not raise a UnicodeDecodeError
def testPT_RenderUnicodeExpr(self): # Check workaround for unicode incompatibility of ZRPythonExpr. # See http://mail.zope.org/pipermail/zope/2007-February/170537.html manage_addPageTemplate(self.app, 'test', text=('<span tal:content="python: ' 'unicode(\'\xfe\', \'iso-8859-15\')" />'), encoding='iso-8859-15') zpt = self.app['test'] result = zpt.pt_render() # should not raise a UnicodeDecodeError
def testStructureWithAccentedChars(self): raw = u'<div tal:content="structure python: \'üöä\'" />' manage_addPageTemplate(self.app, 'test', text=raw.encode('iso-8859-15'), encoding='iso-8859-15') zpt = self.app['test'] self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'iso-8859-15,utf-8') result = zpt.pt_render() self.assertTrue(result.startswith(u'<div>üöä</div>'))
def manage_create_validation_html(self, REQUEST=None): """ create a blank validation_html template in this survey """ datafile = os.path.join(os.path.dirname(__file__), 'www', 'initial_validation_html.txt') id = 'validation_html' title = "Custom questionnaire HTML" manage_addPageTemplate(self, id, title, open(datafile).read()) if REQUEST is not None: url = self[id].absolute_url() + '/manage_workspace' REQUEST.RESPONSE.redirect(url)
def testBug151020(self): manage_addPageTemplate(self.app, 'test', text=((u'<div tal:content="structure ' u'python: \'üöä\'" />').encode('iso-8859-15')), encoding='iso-8859-15') zpt = self.app['test'] self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'x-user-defined, iso-8859-15,utf-8') result = zpt.pt_render() self.assertTrue(result.startswith(u'<div>üöä</div>'))
def testUTF8WrongPreferredCharset(self): manage_addPageTemplate(self.app, 'test', text=(b'<div tal:content="python: ' b'request.get(\'data\')" />'), encoding='ascii') zpt = self.app['test'] self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'iso-8859-15') self.app.REQUEST.set('data', u'üöä'.encode('utf-8')) result = zpt.pt_render() self.assertFalse(result.startswith(u'<div>üöä</div>'))
def testUTF8(self): manage_addPageTemplate(self.app, 'test', text=(b'<div tal:content="python: ' b'request.get(\'data\')" />'), encoding='ascii') zpt = self.app['test'] self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'utf-8,ISO-8859-15') self.app.REQUEST.set('data', 'üöä'.encode()) result = zpt.pt_render() self.assertIn('<div>üöä</div>', result)
def test_profiled(self): app = self.layer['app'] manage_addPageTemplate(app, 'pttemplate') pttemplate = app['pttemplate'] pttemplate.pt_edit('<p tal:content="string:test" />', 'text/html') self.assertTrue('test' in pttemplate()) self.assertFalse(self.ptviewer.enabled()) self.assertFalse(self.ptviewer.full_result()) self.ptviewer.enable() pttemplate() self.assertTrue(self.ptviewer.full_result())
def testISO_8859_15(self): manage_addPageTemplate(self.app, 'test', text=('<div tal:content="python: ' 'request.get(\'data\')" />'), encoding='ascii') zpt = self.app['test'] self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'ISO-8859-15,utf-8') self.app.REQUEST.set('data', '�צה') result = zpt.pt_render() self.assertTrue(result.startswith(unicode('<div>�צה</div>', 'iso-8859-15')))
def testISO_8859_15(self): manage_addPageTemplate(self.app, 'test', text=('<div tal:content="python: ' 'request.get(\'data\')" />'), encoding='ascii') zpt = self.app['test'] self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'ISO-8859-15,utf-8') self.app.REQUEST.set('data', '�צה') result = zpt.pt_render() self.assertTrue(result.startswith(unicode('<div>�צה</div>', 'iso-8859-15')))
def testInstallMonkeyPatch(self): from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate, manage_addPageTemplate manage_addPageTemplate(self.app, 'test', text='<div tal:content="string:foo">bar</div>', encoding='ascii') zpt = self.app['test'] from zope.publisher.base import DebugFlags self.app.REQUEST.debug = DebugFlags() self.assertEqual(zpt.pt_render(), u'<div>foo</div>\n') self.app.REQUEST.debug.showTAL = True self.assertEqual(zpt.pt_render(), u'<div tal:content="string:foo">foo</div>\n')
def test_profiled(self): app = self.layer['app'] manage_addPageTemplate(app, 'pttemplate') pttemplate = app['pttemplate'] pttemplate.pt_edit('<p tal:content="string:test" />', 'text/html') self.assertTrue('test' in pttemplate()) self.assertFalse(self.ptviewer.enabled()) self.assertFalse(self.ptviewer.full_result()) self.ptviewer.enable() pttemplate() self.assertTrue(self.ptviewer.full_result())
def testBug151020(self): raw = '<div tal:content="structure python: \'üöä\'" />' manage_addPageTemplate(self.app, 'test', text=raw.encode('iso-8859-15'), encoding='iso-8859-15') zpt = self.app['test'] self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'x-user-defined, iso-8859-15,utf-8') result = zpt.pt_render() self.assertIn('<div>üöä</div>', result)
def loadDefaultData(self): """ """ #set default 'Naaya' configuration NySite.__dict__['createPortalTools'](self) NySite.__dict__['loadDefaultData'](self) #load site skeleton - configuration self.loadSkeleton(join(CHM2_PRODUCT_PATH, 'skel')) #remove Naaya default content self.getLayoutTool().manage_delObjects('skin') #set default PhotoFolder manage_addNyPhotoFolder(self, ID_PHOTOARCHIVE, TITLE_PHOTOARCHIVE) self._getOb(ID_PHOTOARCHIVE).approveThis() #create and configure LinkChecker instance manage_addLinkChecker(self, ID_LINKCHECKER, TITLE_LINKCHECKER) linkchecker_ob = self._getOb(ID_LINKCHECKER) linkchecker_ob.manage_edit(proxy='', batch_size=10, catalog_name=ID_CATALOGTOOL) linkchecker_ob.manage_addMetaType(METATYPE_NYURL) linkchecker_ob.manage_addProperty(METATYPE_NYURL, 'locator') for k,v in self.get_content_urls().items(): linkchecker_ob.manage_addMetaType(k) for p in v: linkchecker_ob.manage_addProperty(k, p) #create helpdesk instance manage_addHelpDesk(self, ID_HELPDESKAGENT, TITLE_HELPDESKAGENT, self.getAuthenticationToolPath(1)) #create NaayaCalendar instance manage_addEventCalendar(self, id="portal_calendar", title='Calendar of Events', description='', day_len='2', cal_meta_types='Naaya Event', start_day='Monday', catalog=self.getCatalogTool().id, REQUEST=None) #create index for Naaya Calendar extra=Extra_for_DateRangeIndex(since_field='start_date', until_field='end_date') self.getCatalogTool().manage_addIndex("resource_interval", 'DateRangeIndex', extra=extra) #create and fill glossaries manage_addGlossaryCentre(self, ID_GLOSSARY_KEYWORDS, TITLE_GLOSSARY_KEYWORDS) self._getOb(ID_GLOSSARY_KEYWORDS).xliff_import(self.futRead(join(CHM2_PRODUCT_PATH, 'skel', 'others', 'glossary_keywords.xml'))) self.add_glossary_coverage() #portal_map custom index custom_map_index = self.futRead(join(CHM2_PRODUCT_PATH, 'skel', 'others', 'map_index.zpt')) portal_map = self.getGeoMapTool() manage_addPageTemplate(portal_map, id='map_index', title='', text='') map_index = portal_map._getOb(id='map_index') map_index.pt_edit(text=custom_map_index, content_type='') #set glossary for pick lists self.keywords_glossary = ID_GLOSSARY_KEYWORDS self.coverage_glossary = ID_GLOSSARY_COVERAGE self._p_changed = 1 #add Forum instance manage_addNyForum(self, id='portal_forum', title='CHM Forum', description='', categories=['CHM', 'Biodiversity', 'Other'], file_max_size=0, REQUEST=None)
def setUp(self): super(SiteIndexInLayoutTest, self).setUp() layout_tool = self.portal.getLayoutTool() current_skin = layout_tool.get_current_skin() if hasattr(current_skin, 'site_index'): current_skin.site_index.write(self.TEXT) else: manage_addPageTemplate(current_skin, 'site_index', text=self.TEXT) transaction.commit()
def testStructureWithAccentedChars(self): manage_addPageTemplate(self.app, 'test', text=('<div tal:content="structure ' 'python: %s" />' % "'�צה'"), encoding='iso-8859-15') zpt = self.app['test'] self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'iso-8859-15,utf-8') self.app.REQUEST.set('data', unicode('�צה', 'iso-8859-15').encode('utf-8')) result = zpt.pt_render() self.assertTrue(result.startswith(unicode('<div>�צה</div>', 'iso-8859-15')))
def testStructureWithAccentedChars(self): manage_addPageTemplate(self.app, 'test', text=('<div tal:content="structure ' 'python: %s" />' % "'�צה'"), encoding='iso-8859-15') zpt = self.app['test'] self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'iso-8859-15,utf-8') self.app.REQUEST.set('data', unicode('�צה', 'iso-8859-15').encode('utf-8')) result = zpt.pt_render() self.assertTrue(result.startswith(unicode('<div>�צה</div>', 'iso-8859-15')))
def loadDefaultData(self): """ """ #set default 'Naaya' configuration NySite.__dict__['createPortalTools'](self) NySite.__dict__['loadDefaultData'](self) #load site skeleton - configuration self.loadSkeleton(join(SMAP_PRODUCT_PATH, 'skel')) #custom indexes try: self.getCatalogTool().manage_addIndex('resource_area', 'TextIndexNG2', extra={'default_encoding': 'utf-8', 'splitter_single_chars': 1}) except: pass try: self.getCatalogTool().manage_addIndex('resource_focus', 'TextIndexNG2', extra={'default_encoding': 'utf-8', 'splitter_single_chars': 1}) except: pass try: self.getCatalogTool().manage_addIndex('resource_area_exp', 'TextIndexNG2', extra={'default_encoding': 'utf-8', 'splitter_single_chars': 1}) except: pass try: self.getCatalogTool().manage_addIndex('resource_focus_exp', 'TextIndexNG2', extra={'default_encoding': 'utf-8', 'splitter_single_chars': 1}) except: pass try: self.getCatalogTool().manage_addIndex('resource_country', 'TextIndexNG2', extra={'default_encoding': 'utf-8', 'splitter_single_chars': 1}) except: pass #remove Naaya default content self.getLayoutTool().manage_delObjects('skin') self.manage_delObjects('info') self.getPortletsTool().manage_delObjects('topnav_links') #set default 'Main topics' try: self.getPropertiesTool().manageMainTopics(['fol120392', 'fol657555', 'fol112686', 'fol034934', 'test1']) except: pass #set portal index's right portlets self.getPortletsTool().set_right_portlets_locations('', ['portlet_rdfcalendar']) #default Forum instance manage_addNyForum(self, id=ID_FORUM, title=TITLE_FORUM) #default RDF Calendar settings manage_addRDFCalendar(self, id=ID_RDFCALENDAR, title=TITLE_RDFCALENDAR, week_day_len=1) #to be done after add #rdfcalendar_ob = self._getOb(ID_RDFCALENDAR) #manage_addRDFSummary(rdfcalendar_ob, 'events', 'Events', # 'http://smap.ewindows.eu.org/events/index_rdf', '', 'no') #rdfcal_ob = self._getOb(ID_RDFCALENDAR) #rdfcal_ob._getOb('events').update() country_folder = self._getOb('fol112686') country_folder.manage_role('Authenticated', ['Naaya - Add Naaya Contact objects', 'Naaya - Add Naaya Event objects', 'Naaya - Add Naaya Document objects', 'Naaya - Add Naaya Extended File objects', 'Naaya - Add Naaya File objects', 'Naaya - Access administrative area', 'Naaya - Add Naaya Folder objects', 'Naaya - Add Naaya GeoPoint objects', 'Naaya - Add Naaya Media File objects', 'Naaya - Add Naaya News objects', 'Naaya - Add Naaya Pointer objects', 'Naaya - Add Naaya SMAP Expert objects', 'Naaya - Add Naaya SMAP Project objects']) #portal_map custom index custom_map_index = self.futRead(join(SMAP_PRODUCT_PATH, 'skel', 'others', 'map_index.zpt')) portal_map = self.getGeoMapTool() manage_addPageTemplate(portal_map, id='map_index', title='', text='') map_index = portal_map._getOb(id='map_index') map_index.pt_edit(text=custom_map_index, content_type='')
def testBug151020(self): manage_addPageTemplate( self.app, 'test', text=((u'<div tal:content="structure ' u'python: \'üöä\'" />').encode('iso-8859-15')), encoding='iso-8859-15') zpt = self.app['test'] self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'x-user-defined, iso-8859-15,utf-8') result = zpt.pt_render() self.assertTrue(result.startswith(u'<div>üöä</div>'))
def testDebugFlags(self): # Test for bug 229549 manage_addPageTemplate(self.app, 'test', text='<div tal:content="string:foo">bar</div>', encoding='ascii') zpt = self.app['test'] from zope.publisher.base import DebugFlags self.app.REQUEST.debug = DebugFlags() self.assertEqual(zpt.pt_render(), unicode('<div>foo</div>')) self.app.REQUEST.debug.showTAL = True self.assertEqual(zpt.pt_render(), unicode('<div tal:content="string:foo">foo</div>')) self.app.REQUEST.debug.sourceAnnotations = True self.assertEqual(zpt.pt_render().startswith(unicode('<!--')), True)
def setUp(self): from Products.PageTemplates.ZopePageTemplate import \ manage_addPageTemplate super(ZPTBrowserTests, self).setUp() Zope2.App.zcml.load_site(force=True) uf = self.app.acl_users uf.userFolderAddUser('manager', 'manager_pass', ['Manager'], []) manage_addPageTemplate(self.app, 'page_template') self.browser = Browser() self.browser.login('manager', 'manager_pass') self.browser.open('http://localhost/page_template/manage_main')
def testUTF8(self): manage_addPageTemplate( self.app, 'test', text='<div tal:content="python: request.get(\'data\')" />', encoding='ascii') zpt = self.app['test'] self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'utf-8,ISO-8859-15') self.app.REQUEST.set('data', unicode('�צה', 'iso-8859-15').encode('utf-8')) result = zpt.pt_render() self.assertEqual( result.startswith(unicode('<div>�צה</div>', 'iso-8859-15')), True)
def testDebugFlags(self): # Test for bug 229549 manage_addPageTemplate(self.app, 'test', text='<div tal:content="string:foo">bar</div>', encoding='ascii') zpt = self.app['test'] from zope.publisher.base import DebugFlags self.app.REQUEST.debug = DebugFlags() self.assertEqual(zpt.pt_render(), unicode('<div>foo</div>')) self.app.REQUEST.debug.showTAL = True self.assertEqual(zpt.pt_render(), unicode('<div tal:content="string:foo">foo</div>')) self.app.REQUEST.debug.sourceAnnotations = True self.assertEqual(zpt.pt_render().startswith(unicode('<!--')), True)
def setUp(self): from Products.PageTemplates.ZopePageTemplate import \ manage_addPageTemplate super().setUp() Zope2.App.zcml.load_site(force=True) uf = self.app.acl_users uf.userFolderAddUser('manager', 'manager_pass', ['Manager'], []) manage_addPageTemplate(self.app, 'page_template') self.browser = Browser() self.browser.login('manager', 'manager_pass') self.browser.open('http://localhost/page_template/manage_main')
def importResourceFromJSON(self, container, id, element): """ """ id = id.encode('utf-8') resource_type = element['type'] if id in container.objectIds(): container.manage_delObjects([id]) if resource_type == "Page Template": obj = manage_addPageTemplate(container, id) obj.title = element['title'] obj.write(element['data']) elif resource_type == "Script (Python)": manage_addPythonScript(container, id) obj = container._getOb(id) obj.ZPythonScript_setTitle(element['title']) obj.write(element['data']) elif resource_type == "Image": id = manage_addImage(container, id, element['data'].decode('base64'), content_type=element['contenttype']) else: container.manage_addFile(id) obj = getattr(container, id) obj.meta_type = resource_type obj.title = element['title'] data = element['data'].decode('base64') obj.update_data(data, content_type=element['contenttype'])
def importResourceFromJSON(self, container, id, element): """ """ id = id.encode('utf-8') resource_type = element['type'] if id in container.objectIds(): container.manage_delObjects([id]) if resource_type == "Page Template": obj = manage_addPageTemplate(container, id) obj.title = element['title'] obj.write(element['data']) elif resource_type == "Script (Python)": manage_addPythonScript(container, id) obj = container._getOb(id) obj.ZPythonScript_setTitle(element['title']) obj.write(element['data']) elif resource_type == "Image": id = manage_addImage(container, id, element['data'].decode('base64'), content_type=element['contenttype']) else: container.manage_addFile(id) obj = getattr(container, id) obj.meta_type = resource_type obj.title = element['title'] data = element['data'].decode('base64') obj.update_data(data, content_type=element['contenttype'])
def importResourceFromXML(self, container, node): """ """ id = str(node.getAttribute('id')) resource_type = node.getAttribute('type') if id in container.objectIds(): container.manage_delObjects([id]) if resource_type == "Page Template": obj = manage_addPageTemplate(container, id) obj.title = node.getAttribute('title') obj.write(node.firstChild.data) elif resource_type == "Script (Python)": manage_addPythonScript(container, id) obj = container._getOb(id) obj.ZPythonScript_setTitle(node.getAttribute('title')) obj.write(node.firstChild.data) elif resource_type == "Image": id = manage_addImage(container, id, node.firstChild.data.decode('base64'), content_type=node.getAttribute('contenttype')) else: container.manage_addFile(id) obj = getattr(container, id) obj.meta_type = resource_type obj.title = node.getAttribute('title') obj.update_data(node.firstChild.data.decode('base64'), content_type=node.getAttribute('contenttype'))
def _loadRegistrationForms(self): """ load registration forms """ registration_form = file(join(constants.PRODUCT_PATH, 'zpt', 'registration', 'registration.zpt')).read() manage_addPageTemplate(self, 'registration_form', title='', text=registration_form) view_participant = file(join(constants.PRODUCT_PATH, 'zpt', 'participant', 'view_participant.zpt')).read() edit_participant = file(join(constants.PRODUCT_PATH, 'zpt', 'participant', 'edit_participant.zpt')).read() menu_buttons = file(join(constants.PRODUCT_PATH, 'zpt', 'menu_buttons.zpt')).read() manage_addPageTemplate(self, 'menu_buttons', title='', text=menu_buttons) manage_addPageTemplate(self, 'view_participant', title='', text=view_participant) manage_addPageTemplate(self, 'edit_participant', title='', text=edit_participant)
def manage_addMessageBoard(self, id, title='',description='', filesize=500000, mailhost='', integrated=0, REQUEST=None): """ Add a new Meeting object """ ob=MessageBoard(id, title, description, filesize, mailhost, integrated) self._setObject(id, ob) object=self._getOb(id) indexfile = open(join(package_home(globals()),'zpt','MessageBoardIndex.zpt')) content = indexfile.read() indexfile.close() manage_addPageTemplate(object, id='index_html', title='Default View', text=content) indexfile = open(join(package_home(globals()),'zpt','MessageTreeIndex.zpt')) content = indexfile.read() indexfile.close() manage_addPageTemplate(object, id='tree_html', title='Default View', text=content) if REQUEST is not None: return self.manage_main(self, REQUEST, update_menu=1)
def test_zopepagetemplate_processing_instruction_skipped(self): from Products.PageTemplates.ZopePageTemplate import manage_addPageTemplate template = manage_addPageTemplate(self.folder, 'test') # aq-wrap before we proceed template = template.__of__(self.folder) # test rendering engine template.write(open(os.path.join(path, "pi.pt")).read()) self.assertIn('world', template())
def testBug246983(self): # See https://bugs.launchpad.net/bugs/246983 self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'utf-8') self.app.REQUEST.set('data', 'üöä'.encode()) # Direct inclusion of encoded strings is hadled normally by the unicode # conflict resolver textDirect = b""" <tal:block content="request/data" /> """.strip() manage_addPageTemplate(self.app, 'test', text=textDirect) zpt = self.app['test'] self.assertEqual(zpt.pt_render(), 'üöä') # Indirect inclusion of encoded strings through String Expressions # should be resolved as well. textIndirect = b""" <tal:block content="string:x ${request/data}" /> """.strip() zpt.pt_edit(textIndirect, zpt.content_type) self.assertEqual(zpt.pt_render(), 'x üöä')
def testBug246983(self): # See https://bugs.launchpad.net/bugs/246983 self.app.REQUEST.set('HTTP_ACCEPT_CHARSET', 'utf-8') self.app.REQUEST.set('data', u'�צה'.encode('utf-8')) # Direct inclusion of encoded strings is hadled normally by the unicode # conflict resolver textDirect = """ <tal:block content="request/data" /> """.strip() manage_addPageTemplate(self.app, 'test', text=textDirect) zpt = self.app['test'] self.assertEquals(zpt.pt_render(), u'�צה') # Indirect inclusion of encoded strings through String Expressions # should be resolved as well. textIndirect = """ <tal:block content="string:x ${request/data}" /> """.strip() zpt.pt_edit(textIndirect, zpt.content_type) self.assertEquals(zpt.pt_render(), u'x �צה')
def manage_addRDFCalendar(self, id, title='', first_day_week='Monday', week_day_len=3, REQUEST=None): """Add a new RDFCalendar object with id=title.""" ob=RDFCalendar(id, title, first_day_week, week_day_len) ob.id = id self._setObject(id, ob) #create index_html page template indexfile = PageTemplateFile('zpt/RDFCalendarIndex', globals()) content = indexfile.read() manage_addPageTemplate(ob, id='index_html', title='Calendar Events', text=content) #create show_day_events page template show_events_file = PageTemplateFile('zpt/RDFCalendar_dayevents', globals()) content = show_events_file.read() manage_addPageTemplate(ob, id='show_day_events', title='Show events for one day', text=content) if REQUEST is not None: return self.manage_main(self, REQUEST, update_menu=1)
def installUi(self): '''Installs the user interface.''' # Some useful imports from OFS.Folder import manage_addFolder from OFS.Image import manage_addImage, manage_addFile from Products.PythonScripts.PythonScript import PythonScript from Products.PageTemplates.ZopePageTemplate import \ manage_addPageTemplate # Delete the existing folder if it existed. zopeContent = self.app.objectIds() if 'ui' in zopeContent: self.app.manage_delObjects(['ui']) manage_addFolder(self.app, 'ui') # Browse the physical ui folders (the Appy one and an app-specific, if # the app defines one) and create the corresponding objects in the Zope # folder. In the case of files having the same name in both folders, # the one from the app-specific folder is chosen. j = os.path.join uiFolders = [j(j(appy.getPath(), 'gen'), 'ui')] appUi = j(self.config.diskFolder, 'ui') if os.path.exists(appUi): uiFolders.insert(0, appUi) for ui in uiFolders: for root, dirs, files in os.walk(ui): folderName = root[len(ui):] # Get the Zope folder that corresponds to this name zopeFolder = self.app.ui if folderName: for name in folderName.strip(os.sep).split(os.sep): zopeFolder = zopeFolder._getOb(name) # Create sub-folders at this level for name in dirs: if not hasattr(zopeFolder.aq_base, name): manage_addFolder(zopeFolder, name) # Create files at this level for name in files: zopeName, ext = os.path.splitext(name) if ext not in ('.pt', '.py'): # In the ZODB, pages and scripts have their name without # their extension. zopeName = name if hasattr(zopeFolder.aq_base, zopeName): continue f = file(j(root, name)) if ext in gen.File.imageExts: manage_addImage(zopeFolder, zopeName, f) elif ext == '.pt': manage_addPageTemplate(zopeFolder,zopeName,'',f.read()) elif ext == '.py': obj = PythonScript(zopeName) zopeFolder._setObject(zopeName, obj) zopeFolder._getOb(zopeName).write(f.read()) else: manage_addFile(zopeFolder, zopeName, f) f.close() # Update the home page if 'index_html' in zopeContent: self.app.manage_delObjects(['index_html']) manage_addPageTemplate(self.app, 'index_html', '', homePage) # Update the error page if 'standard_error_message' in zopeContent: self.app.manage_delObjects(['standard_error_message']) manage_addPageTemplate(self.app, 'standard_error_message', '',errorPage)
def test_lookup_custom_index(self): folder = self.folder # initially, nothing is set assert folder.get_custom_index_template() is None assert folder.compute_custom_index_value() == '' # test old-style `publicinterface` property folder.publicinterface = 1 assert folder.compute_custom_index_value() == 'local:index' assert folder.get_custom_index_template() is None manage_addPageTemplate(folder, id='index', title='', text="hello1") transaction.commit() assert folder.get_custom_index_template() == folder.index self.browser.go('http://localhost/portal/info/testfolder') assert self.browser.get_html().strip() == "hello1" # new-style custom_index, locally in folder manage_addPageTemplate(folder, id='something', title='', text="hello2") folder.custom_index = 'local:something' assert folder.compute_custom_index_value() == 'local:something' transaction.commit() assert folder.get_custom_index_template() == folder.something self.browser.go('http://localhost/portal/info/testfolder') assert self.browser.get_html().strip() == "hello2" # new-style custom_index, in portal_forms portal_forms = self.portal.portal_forms portal_forms._setObject('something-else', Template(id='something-else', title="", text="hello3", content_type='text/html')) folder.custom_index = 'site:portal_forms/something-else' assert (folder.compute_custom_index_value() == 'site:portal_forms/something-else') transaction.commit() assert (folder.get_custom_index_template() == portal_forms['something-else']) self.browser.go('http://localhost/portal/info/testfolder') assert self.browser.get_html().strip() == "hello3"
def test_zopepagetemplate(self): from Products.PageTemplates.ZopePageTemplate import manage_addPageTemplate template = manage_addPageTemplate(self.folder, 'test') # aq-wrap before we proceed template = template.__of__(self.folder) # test rendering engine template.write(open(os.path.join(path, "simple.pt")).read()) self.assertTrue('world' in template()) # test arguments template.write(open(os.path.join(path, "options.pt")).read()) self.assertTrue('Hello world' in template(greeting='Hello world')) # test commit import transaction transaction.commit()