11from __future__import absolute_import ,division ,unicode_literals
2- from six import text_type ,string_types
32
43from xml .dom import Node
54from ..constants import namespaces ,voidElements ,spaceCharacters
1817spaceCharacters = "" .join (spaceCharacters )
1918
2019
21- def to_text (s ,blank_if_none = True ):
22- """Wrapper around six.text_type to convert None to empty string"""
23- if s is None :
24- if blank_if_none :
25- return ""
26- else :
27- return None
28- elif isinstance (s ,text_type ):
29- return s
30- else :
31- return text_type (s )
32-
33-
3420class TreeWalker (object ):
3521def __init__ (self ,tree ):
3622self .tree = tree
@@ -42,28 +28,26 @@ def error(self, msg):
4228return {"type" :"SerializeError" ,"data" :msg }
4329
4430def emptyTag (self ,namespace ,name ,attrs ,hasChildren = False ):
45- yield {"type" :"EmptyTag" ,"name" :to_text ( name , False ) ,
46- "namespace" :to_text ( namespace ) ,
31+ yield {"type" :"EmptyTag" ,"name" :name ,
32+ "namespace" :namespace ,
4733"data" :attrs }
4834if hasChildren :
4935yield self .error ("Void element has children" )
5036
5137def startTag (self ,namespace ,name ,attrs ):
5238return {"type" :"StartTag" ,
53- "name" :text_type (name ),
54- "namespace" :to_text (namespace ),
55- "data" :dict (((to_text (namespace ,False ),to_text (name )),
56- to_text (value ,False ))
57- for (namespace ,name ),value in attrs .items ())}
39+ "name" :name ,
40+ "namespace" :namespace ,
41+ "data" :attrs }
5842
5943def endTag (self ,namespace ,name ):
6044return {"type" :"EndTag" ,
61- "name" :to_text ( name , False ) ,
62- "namespace" :to_text ( namespace ) ,
45+ "name" :name ,
46+ "namespace" :namespace ,
6347"data" : {}}
6448
6549def text (self ,data ):
66- data = to_text ( data )
50+ data = data
6751middle = data .lstrip (spaceCharacters )
6852left = data [:len (data )- len (middle )]
6953if left :
@@ -77,17 +61,17 @@ def text(self, data):
7761yield {"type" :"SpaceCharacters" ,"data" :right }
7862
7963def comment (self ,data ):
80- return {"type" :"Comment" ,"data" :text_type ( data ) }
64+ return {"type" :"Comment" ,"data" :data }
8165
8266def doctype (self ,name ,publicId = None ,systemId = None ,correct = True ):
8367return {"type" :"Doctype" ,
84- "name" :to_text ( name ) ,
85- "publicId" :to_text ( publicId ) ,
86- "systemId" :to_text ( systemId ) ,
87- "correct" :to_text ( correct ) }
68+ "name" :name ,
69+ "publicId" :publicId ,
70+ "systemId" :systemId ,
71+ "correct" :correct }
8872
8973def entity (self ,name ):
90- return {"type" :"Entity" ,"name" :text_type ( name ) }
74+ return {"type" :"Entity" ,"name" :name }
9175
9276def unknown (self ,nodeType ):
9377return self .error ("Unknown node type: " + nodeType )