1# Coding declaration for unicode strings 2# -*- coding: utf-8 -*- 3from __future__ import unicode_literals 4import logging 5if __name__ == '__main__': 6 logging.basicConfig() 7_log = logging.getLogger(__name__) 8# See also: 9# http://www.evanjones.ca/python-utf8.html 10# http://bytes.com/topic/python/answers/41153-xml-unicode-what-am-i-doing-wrong 11 12import pyxb.binding.generate 13import pyxb.binding.datatypes as xs 14import pyxb.binding.basis 15import pyxb.utils.domutils 16import xml.sax 17import io 18 19import os.path 20xsd='''<?xml version="1.0" encoding="UTF-8"?> 21<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 22 <xs:element name="foo" type="xs:string"/> 23 <xs:element name="bar"> 24 <xs:complexType> 25 <xs:sequence> 26 <xs:element name="e" type="xs:string" minOccurs="0"/> 27 </xs:sequence> 28 <xs:attribute name="a" type="xs:string"/> 29 </xs:complexType> 30 </xs:element> 31</xs:schema>''' 32 33code = pyxb.binding.generate.GeneratePython(schema_text=xsd) 34#open('code.py', 'w').write(code) 35 36rv = compile(code, 'test', 'exec') 37eval(rv) 38 39from pyxb.exceptions_ import * 40 41import unittest 42 43class TestTrac0131 (unittest.TestCase): 44 # Unicode string, UTF-8 encoding (per declaration at script top) 45 strt = 'Sign of Leser-Trélat' 46 strd = strt.encode('utf-8') 47 base_xmlt = '<bar><e>' + strt + '</e></bar>' 48 declared_xmlt = '<?xml version="1.0" encoding="UTF-8"?>' + base_xmlt 49 50 def setUp (self): 51 self.__xmlStyle = pyxb._XMLStyle 52 53 def tearDown (self): 54 pyxb._SetXMLStyle(self.__xmlStyle) 55 56 def testRepresentation (self): 57 self.assertEqual(self.strd, b'Sign of Leser-Tr\xc3\xa9lat') 58 59 def testBasicParse (self): 60 xmlt = self.base_xmlt 61 xmld = xmlt.encode('utf-8') 62 self.assertTrue(isinstance(xmlt, six.text_type)) 63 self.assertTrue(isinstance(xmld, six.binary_type)) 64 pyxb._SetXMLStyle(pyxb.XMLStyle_saxer) 65 instance = CreateFromDocument(xmlt) 66 self.assertEqual(instance.e, self.strt) 67 instance = CreateFromDocument(xmld) 68 self.assertEqual(instance.e, self.strt) 69 pyxb._SetXMLStyle(pyxb.XMLStyle_minidom) 70 instance = CreateFromDocument(xmlt) 71 self.assertEqual(instance.e, self.strt) 72 instance = CreateFromDocument(xmld) 73 self.assertEqual(instance.e, self.strt) 74 # saxdom can handle Unicode representation 75 pyxb._SetXMLStyle(pyxb.XMLStyle_saxdom) 76 instance = CreateFromDocument(xmlt) 77 self.assertEqual(instance.e, self.strt) 78 instance = CreateFromDocument(xmld) 79 self.assertEqual(instance.e, self.strt) 80 81 def testDeclaredParse (self): 82 xmlt = self.declared_xmlt 83 xmld = xmlt.encode('utf-8') 84 self.assertTrue(isinstance(xmlt, six.text_type)) 85 self.assertTrue(isinstance(xmld, six.binary_type)) 86 pyxb._SetXMLStyle(pyxb.XMLStyle_saxer) 87 instance = CreateFromDocument(xmlt) 88 self.assertEqual(instance.e, self.strt) 89 instance = CreateFromDocument(xmld) 90 self.assertEqual(instance.e, self.strt) 91 pyxb._SetXMLStyle(pyxb.XMLStyle_minidom) 92 instance = CreateFromDocument(xmlt) 93 self.assertEqual(instance.e, self.strt) 94 instance = CreateFromDocument(xmld) 95 self.assertEqual(instance.e, self.strt) 96 # saxdom can handle Unicode representation 97 pyxb._SetXMLStyle(pyxb.XMLStyle_saxdom) 98 instance = CreateFromDocument(xmlt) 99 self.assertEqual(instance.e, self.strt) 100 instance = CreateFromDocument(xmld) 101 self.assertEqual(instance.e, self.strt) 102 103 def testElementEncode (self): 104 instance = bar() 105 instance.e = self.strt 106 self.assertEqual(instance.e, self.strt) 107 108 def testAttributeEncode (self): 109 instance = bar() 110 instance.a = self.strt 111 self.assertEqual(instance.a, self.strt) 112 113 def testuEncode (self): 114 instance = foo(self.strt) 115 self.assertEqual(instance, self.strt) 116 117if __name__ == '__main__': 118 unittest.main() 119