From fred at zope.com Thu Mar 20 14:58:29 2003 From: fred at zope.com (Fred L. Drake, Jr.) Date: Sun Aug 10 17:05:18 2008 Subject: [ZPT-CVS] CVS: Zope/lib/python/TAL/tests/output - test16.xml:1.2 Message-ID: <200303201958.h2KJwTv02740@cvs.baymountain.com> Update of /cvs-repository/Zope/lib/python/TAL/tests/output In directory cvs.zope.org:/tmp/cvs-serv2699/tests/output Modified Files: test16.xml Log Message: XML attribute names are case-sensitive; do not lower-case them! This corresponds to Zope 3 collector issue 129. http://collector.zope.org/Zope3-dev/129 === Zope/lib/python/TAL/tests/output/test16.xml 1.1 => 1.2 === --- Zope/lib/python/TAL/tests/output/test16.xml:1.1 Mon Dec 16 18:21:31 2002 +++ Zope/lib/python/TAL/tests/output/test16.xml Thu Mar 20 14:58:28 2003 @@ -1,6 +1,6 @@ -baz +bar From fred at zope.com Thu Mar 20 14:58:58 2003 From: fred at zope.com (Fred L. Drake, Jr.) Date: Sun Aug 10 17:05:18 2008 Subject: [ZPT-CVS] CVS: Zope/lib/python/TAL - TALDefs.py:1.35 TALGenerator.py:1.62 TALParser.py:1.22 Message-ID: <200303201958.h2KJww902751@cvs.baymountain.com> Update of /cvs-repository/Zope/lib/python/TAL In directory cvs.zope.org:/tmp/cvs-serv2699 Modified Files: TALDefs.py TALGenerator.py TALParser.py Log Message: XML attribute names are case-sensitive; do not lower-case them! This corresponds to Zope 3 collector issue 129. http://collector.zope.org/Zope3-dev/129 === Zope/lib/python/TAL/TALDefs.py 1.34 => 1.35 === --- Zope/lib/python/TAL/TALDefs.py:1.34 Mon Dec 16 18:24:32 2002 +++ Zope/lib/python/TAL/TALDefs.py Thu Mar 20 14:58:27 2003 @@ -113,14 +113,15 @@ _subst_re = re.compile(r"\s*(?:(text|structure)\s+)?(.*)\Z", re.S) del re -def parseAttributeReplacements(arg): +def parseAttributeReplacements(arg, xml): dict = {} for part in splitParts(arg): m = _attr_re.match(part) if not m: raise TALError("Bad syntax in attributes:" + `part`) name, expr = m.group(1, 2) - name = name.lower() + if not xml: + name = name.lower() if dict.has_key(name): raise TALError("Duplicate attribute name in attributes:" + `part`) dict[name] = expr === Zope/lib/python/TAL/TALGenerator.py 1.61 => 1.62 === --- Zope/lib/python/TAL/TALGenerator.py:1.61 Mon Dec 16 18:24:32 2002 +++ Zope/lib/python/TAL/TALGenerator.py Thu Mar 20 14:58:27 2003 @@ -646,7 +646,8 @@ self.pushProgram() if attrsubst or i18nattrs: if attrsubst: - repldict = TALDefs.parseAttributeReplacements(attrsubst) + repldict = TALDefs.parseAttributeReplacements(attrsubst, + self.xml) else: repldict = {} if i18nattrs: === Zope/lib/python/TAL/TALParser.py 1.21 => 1.22 === --- Zope/lib/python/TAL/TALParser.py:1.21 Mon Dec 16 18:21:31 2002 +++ Zope/lib/python/TAL/TALParser.py Thu Mar 20 14:58:27 2003 @@ -72,7 +72,7 @@ for key, value in attrlist: key, keybase, keyns = self.fixname(key) ns = keyns or namens # default to tag namespace - item = key.lower(), value + item = key, value if ns == 'metal': metaldict[keybase] = value item = item + ("metal",) From fred at zope.com Thu Mar 20 14:58:58 2003 From: fred at zope.com (Fred L. Drake, Jr.) Date: Sun Aug 10 17:05:18 2008 Subject: [ZPT-CVS] CVS: Zope/lib/python/TAL/tests/input - test16.xml:1.2 Message-ID: <200303201958.h2KJwwX02758@cvs.baymountain.com> Update of /cvs-repository/Zope/lib/python/TAL/tests/input In directory cvs.zope.org:/tmp/cvs-serv2699/tests/input Modified Files: test16.xml Log Message: XML attribute names are case-sensitive; do not lower-case them! This corresponds to Zope 3 collector issue 129. http://collector.zope.org/Zope3-dev/129 === Zope/lib/python/TAL/tests/input/test16.xml 1.1 => 1.2 === --- Zope/lib/python/TAL/tests/input/test16.xml:1.1 Mon Dec 16 18:21:31 2002 +++ Zope/lib/python/TAL/tests/input/test16.xml Thu Mar 20 14:58:28 2003 @@ -1,7 +1,7 @@ -bar From fred at zope.com Fri Mar 21 14:17:33 2003 From: fred at zope.com (Fred L. Drake, Jr.) Date: Sun Aug 10 17:05:18 2008 Subject: [ZPT-CVS] CVS: Zope/lib/python/Products/PageTemplates - PageTemplate.py:1.30 Message-ID: <200303211917.h2LJHXp19947@cvs.baymountain.com> Update of /cvs-repository/Zope/lib/python/Products/PageTemplates In directory cvs.zope.org:/tmp/cvs-serv19930 Modified Files: PageTemplate.py Log Message: Use the same _cook_check() / _cook() arrangement as the Zope 3 implementation, to allow the PageTemplateFile class to override what happens when the check is performed. === Zope/lib/python/Products/PageTemplates/PageTemplate.py 1.29 => 1.30 === --- Zope/lib/python/Products/PageTemplates/PageTemplate.py:1.29 Thu Sep 19 10:39:24 2002 +++ Zope/lib/python/Products/PageTemplates/PageTemplate.py Fri Mar 21 14:17:32 2003 @@ -139,8 +139,7 @@ self._cook() def read(self): - if not self._v_cooked: - self._cook() + self._cook_check() if not self._v_errors: if not self.expand: return self._text @@ -154,6 +153,10 @@ return ('%s\n %s\n-->\n%s' % (self._error_start, '\n '.join(self._v_errors), self._text)) + + def _cook_check(self): + if not self._v_cooked: + self._cook() def _cook(self): """Compile the TAL and METAL statments. From fred at zope.com Fri Mar 21 14:22:01 2003 From: fred at zope.com (Fred L. Drake, Jr.) Date: Sun Aug 10 17:05:18 2008 Subject: [ZPT-CVS] CVS: Zope/lib/python/Products/PageTemplates/tests - test_ptfile.py:1.1 Message-ID: <200303211922.h2LJM1w20554@cvs.baymountain.com> Update of /cvs-repository/Zope/lib/python/Products/PageTemplates/tests In directory cvs.zope.org:/tmp/cvs-serv20502/tests Added Files: test_ptfile.py Log Message: Backport the type-sniffing code from Zope 3 to support XML page templates from the filesystem. === Added File Zope/lib/python/Products/PageTemplates/tests/test_ptfile.py === """Tests of PageTemplateFile.""" import os import tempfile import unittest from Products.PageTemplates.PageTemplateFile import PageTemplateFile class TypeSniffingTestCase(unittest.TestCase): TEMPFILENAME = tempfile.mktemp() def tearDown(self): if os.path.exists(self.TEMPFILENAME): os.unlink(self.TEMPFILENAME) def check_content_type(self, text, expected_type): f = open(self.TEMPFILENAME, "wb") f.write(text) f.close() pt = PageTemplateFile(self.TEMPFILENAME) pt.read() self.assertEqual(pt.content_type, expected_type) def test_sniffer_xml_ascii(self): self.check_content_type( "", "text/xml") self.check_content_type( "", "text/xml") def test_sniffer_xml_utf8(self): # w/out byte order mark self.check_content_type( "", "text/xml") self.check_content_type( "", "text/xml") # with byte order mark self.check_content_type( "\xef\xbb\xbf", "text/xml") self.check_content_type( "\xef\xbb\xbf", "text/xml") def test_sniffer_xml_utf16_be(self): # w/out byte order mark self.check_content_type( "\0<\0?\0x\0m\0l\0 \0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'" "\0 \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>" "\0<\0d\0o\0c\0/\0>", "text/xml") self.check_content_type( "\0<\0?\0x\0m\0l\0\t\0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'" "\0 \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>" "\0<\0d\0o\0c\0/\0>", "text/xml") # with byte order mark self.check_content_type( "\xfe\xff" "\0<\0?\0x\0m\0l\0 \0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'" "\0 \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>" "\0<\0d\0o\0c\0/\0>", "text/xml") self.check_content_type( "\xfe\xff" "\0<\0?\0x\0m\0l\0\t\0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'" "\0 \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>" "\0<\0d\0o\0c\0/\0>", "text/xml") def test_sniffer_xml_utf16_le(self): # w/out byte order mark self.check_content_type( "<\0?\0x\0m\0l\0 \0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'\0" " \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>\0" "<\0d\0o\0c\0/\0>\n", "text/xml") self.check_content_type( "<\0?\0x\0m\0l\0\t\0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'\0" " \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>\0" "<\0d\0o\0c\0/\0>\0", "text/xml") # with byte order mark self.check_content_type( "\xff\xfe" "<\0?\0x\0m\0l\0 \0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'\0" " \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>\0" "<\0d\0o\0c\0/\0>\0", "text/xml") self.check_content_type( "\xff\xfe" "<\0?\0x\0m\0l\0\t\0v\0e\0r\0s\0i\0o\0n\0=\0'\01\0.\0000\0'\0" " \0e\0n\0c\0o\0d\0i\0n\0g\0=\0'\0u\0t\0f\0-\08\0'\0?\0>\0" "<\0d\0o\0c\0/\0>\0", "text/xml") HTML_PUBLIC_ID = "-//W3C//DTD HTML 4.01 Transitional//EN" HTML_SYSTEM_ID = "http://www.w3.org/TR/html4/loose.dtd" def test_sniffer_html_ascii(self): self.check_content_type( "" % self.HTML_SYSTEM_ID, "text/html") self.check_content_type( "sample document", "text/html") # XXX This reflects a case that simply isn't handled by the # sniffer; there are many, but it gets it right more often than # before. def donttest_sniffer_xml_simple(self): self.check_content_type("", "text/xml") def test_suite(): return unittest.makeSuite(TypeSniffingTestCase) if __name__ == "__main__": unittest.main(defaultTest="test_suite") From fred at zope.com Fri Mar 21 14:22:30 2003 From: fred at zope.com (Fred L. Drake, Jr.) Date: Sun Aug 10 17:05:18 2008 Subject: [ZPT-CVS] CVS: Zope/lib/python/Products/PageTemplates - PageTemplateFile.py:1.24 Message-ID: <200303211922.h2LJMUE20661@cvs.baymountain.com> Update of /cvs-repository/Zope/lib/python/Products/PageTemplates In directory cvs.zope.org:/tmp/cvs-serv20502 Modified Files: PageTemplateFile.py Log Message: Backport the type-sniffing code from Zope 3 to support XML page templates from the filesystem. === Zope/lib/python/Products/PageTemplates/PageTemplateFile.py 1.23 => 1.24 === --- Zope/lib/python/Products/PageTemplates/PageTemplateFile.py:1.23 Tue Feb 11 12:17:07 2003 +++ Zope/lib/python/Products/PageTemplates/PageTemplateFile.py Fri Mar 21 14:22:00 2003 @@ -117,7 +117,12 @@ mtime = 0 if self._v_program is not None and mtime == self._v_last_read: return - self.pt_edit(open(self.filename), None) + f = open(self.filename, "rb") + try: + text = f.read() + finally: + f.close() + self.pt_edit(text, sniff_type(text)) self._cook() if self._v_errors: LOG('PageTemplateFile', ERROR, 'Error in template', @@ -154,3 +159,19 @@ from ZODB.POSException import StorageError raise StorageError, ("Instance of AntiPersistent class %s " "cannot be stored." % self.__class__.__name__) + + +XML_PREFIXES = [ + "