added separate tostring files
This commit is contained in:
		
							
								
								
									
										60
									
								
								sleekxmpp/xmlstream/tostring.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								sleekxmpp/xmlstream/tostring.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					class ToString(object):
 | 
				
			||||||
 | 
						def __str__(self, xml=None, xmlns='', stringbuffer=''):
 | 
				
			||||||
 | 
							if xml is None:
 | 
				
			||||||
 | 
								xml = self.xml
 | 
				
			||||||
 | 
							newoutput = [stringbuffer]
 | 
				
			||||||
 | 
							#TODO respect ET mapped namespaces
 | 
				
			||||||
 | 
							itag = xml.tag.split('}', 1)[-1]
 | 
				
			||||||
 | 
							if '}' in xml.tag:
 | 
				
			||||||
 | 
								ixmlns = xml.tag.split('}', 1)[0][1:]
 | 
				
			||||||
 | 
							else:
 | 
				
			||||||
 | 
								ixmlns = ''
 | 
				
			||||||
 | 
							nsbuffer = ''
 | 
				
			||||||
 | 
							if xmlns != ixmlns and ixmlns != '' and ixmlns != self.namespace:
 | 
				
			||||||
 | 
								if self.stream is not None and ixmlns in self.stream.namespace_map:
 | 
				
			||||||
 | 
									if self.stream.namespace_map[ixmlns] != '':
 | 
				
			||||||
 | 
										itag = "%s:%s" % (self.stream.namespace_map[ixmlns], itag)
 | 
				
			||||||
 | 
								else:
 | 
				
			||||||
 | 
									nsbuffer = """ xmlns="%s\"""" % ixmlns
 | 
				
			||||||
 | 
							if ixmlns not in ('', xmlns, self.namespace):
 | 
				
			||||||
 | 
								nsbuffer = """ xmlns="%s\"""" % ixmlns
 | 
				
			||||||
 | 
							newoutput.append("<%s" % itag)
 | 
				
			||||||
 | 
							newoutput.append(nsbuffer)
 | 
				
			||||||
 | 
							for attrib in xml.attrib:
 | 
				
			||||||
 | 
								if '{' not in attrib:
 | 
				
			||||||
 | 
									newoutput.append(""" %s="%s\"""" % (attrib, self.xmlesc(xml.attrib[attrib])))
 | 
				
			||||||
 | 
							if len(xml) or xml.text or xml.tail:
 | 
				
			||||||
 | 
								newoutput.append(">")
 | 
				
			||||||
 | 
								if xml.text:
 | 
				
			||||||
 | 
									newoutput.append(self.xmlesc(xml.text))
 | 
				
			||||||
 | 
								if len(xml):
 | 
				
			||||||
 | 
									for child in xml.getchildren():
 | 
				
			||||||
 | 
										newoutput.append(self.__str__(child, ixmlns))
 | 
				
			||||||
 | 
								newoutput.append("</%s>" % (itag, ))
 | 
				
			||||||
 | 
								if xml.tail:
 | 
				
			||||||
 | 
									newoutput.append(self.xmlesc(xml.tail))
 | 
				
			||||||
 | 
							elif xml.text:
 | 
				
			||||||
 | 
								newoutput.append(">%s</%s>" % (self.xmlesc(xml.text), itag))
 | 
				
			||||||
 | 
							else:
 | 
				
			||||||
 | 
								newoutput.append(" />")
 | 
				
			||||||
 | 
							return ''.join(newoutput)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def xmlesc(self, text):
 | 
				
			||||||
 | 
							text = list(text)
 | 
				
			||||||
 | 
							cc = 0
 | 
				
			||||||
 | 
							matches = ('&', '<', '"', '>', "'")
 | 
				
			||||||
 | 
							for c in text:
 | 
				
			||||||
 | 
								if c in matches:
 | 
				
			||||||
 | 
									if c == '&':
 | 
				
			||||||
 | 
										text[cc] = '&'
 | 
				
			||||||
 | 
									elif c == '<':
 | 
				
			||||||
 | 
										text[cc] = '<'
 | 
				
			||||||
 | 
									elif c == '>':
 | 
				
			||||||
 | 
										text[cc] = '>'
 | 
				
			||||||
 | 
									elif c == "'":
 | 
				
			||||||
 | 
										text[cc] = '''
 | 
				
			||||||
 | 
									else:
 | 
				
			||||||
 | 
										text[cc] = '"'
 | 
				
			||||||
 | 
								cc += 1
 | 
				
			||||||
 | 
							return ''.join(text)
 | 
				
			||||||
							
								
								
									
										65
									
								
								sleekxmpp/xmlstream/tostring26.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								sleekxmpp/xmlstream/tostring26.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
				
			|||||||
 | 
					import types
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ToString(object):
 | 
				
			||||||
 | 
						def __str__(self, xml=None, xmlns='', stringbuffer=''):
 | 
				
			||||||
 | 
							if xml is None:
 | 
				
			||||||
 | 
								xml = self.xml
 | 
				
			||||||
 | 
							newoutput = [stringbuffer]
 | 
				
			||||||
 | 
							#TODO respect ET mapped namespaces
 | 
				
			||||||
 | 
							itag = xml.tag.split('}', 1)[-1]
 | 
				
			||||||
 | 
							if '}' in xml.tag:
 | 
				
			||||||
 | 
								ixmlns = xml.tag.split('}', 1)[0][1:]
 | 
				
			||||||
 | 
							else:
 | 
				
			||||||
 | 
								ixmlns = ''
 | 
				
			||||||
 | 
							nsbuffer = ''
 | 
				
			||||||
 | 
							if xmlns != ixmlns and ixmlns != u'' and ixmlns != self.namespace:
 | 
				
			||||||
 | 
								if self.stream is not None and ixmlns in self.stream.namespace_map:
 | 
				
			||||||
 | 
									if self.stream.namespace_map[ixmlns] != u'':
 | 
				
			||||||
 | 
										itag = "%s:%s" % (self.stream.namespace_map[ixmlns], itag)
 | 
				
			||||||
 | 
								else:
 | 
				
			||||||
 | 
									nsbuffer = """ xmlns="%s\"""" % ixmlns
 | 
				
			||||||
 | 
							if ixmlns not in ('', xmlns, self.namespace):
 | 
				
			||||||
 | 
								nsbuffer = """ xmlns="%s\"""" % ixmlns
 | 
				
			||||||
 | 
							newoutput.append("<%s" % itag)
 | 
				
			||||||
 | 
							newoutput.append(nsbuffer)
 | 
				
			||||||
 | 
							for attrib in xml.attrib:
 | 
				
			||||||
 | 
								if '{' not in attrib:
 | 
				
			||||||
 | 
									newoutput.append(""" %s="%s\"""" % (attrib, self.xmlesc(xml.attrib[attrib])))
 | 
				
			||||||
 | 
							if len(xml) or xml.text or xml.tail:
 | 
				
			||||||
 | 
								newoutput.append(u">")
 | 
				
			||||||
 | 
								if xml.text:
 | 
				
			||||||
 | 
									newoutput.append(self.xmlesc(xml.text))
 | 
				
			||||||
 | 
								if len(xml):
 | 
				
			||||||
 | 
									for child in xml.getchildren():
 | 
				
			||||||
 | 
										newoutput.append(self.__str__(child, ixmlns))
 | 
				
			||||||
 | 
								newoutput.append(u"</%s>" % (itag, ))
 | 
				
			||||||
 | 
								if xml.tail:
 | 
				
			||||||
 | 
									newoutput.append(self.xmlesc(xml.tail))
 | 
				
			||||||
 | 
							elif xml.text:
 | 
				
			||||||
 | 
								newoutput.append(">%s</%s>" % (self.xmlesc(xml.text), itag))
 | 
				
			||||||
 | 
							else:
 | 
				
			||||||
 | 
								newoutput.append(" />")
 | 
				
			||||||
 | 
							return u''.join(newoutput)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def xmlesc(self, text):
 | 
				
			||||||
 | 
							if type(text) != types.UnicodeType:
 | 
				
			||||||
 | 
								text = list(unicode(text, 'utf-8', 'ignore'))
 | 
				
			||||||
 | 
							else:
 | 
				
			||||||
 | 
								text = list(text)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							cc = 0
 | 
				
			||||||
 | 
							matches = (u'&', u'<', u'"', u'>', u"'")
 | 
				
			||||||
 | 
							for c in text:
 | 
				
			||||||
 | 
								if c in matches:
 | 
				
			||||||
 | 
									if c == u'&':
 | 
				
			||||||
 | 
										text[cc] = u'&'
 | 
				
			||||||
 | 
									elif c == u'<':
 | 
				
			||||||
 | 
										text[cc] = u'<'
 | 
				
			||||||
 | 
									elif c == u'>':
 | 
				
			||||||
 | 
										text[cc] = u'>'
 | 
				
			||||||
 | 
									elif c == u"'":
 | 
				
			||||||
 | 
										text[cc] = u'''
 | 
				
			||||||
 | 
									else:
 | 
				
			||||||
 | 
										text[cc] = u'"'
 | 
				
			||||||
 | 
								cc += 1
 | 
				
			||||||
 | 
							return ''.join(text)
 | 
				
			||||||
							
								
								
									
										15
									
								
								tests/test_presencestanzas.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								tests/test_presencestanzas.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class testpresencestanzas(unittest.TestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						def setUp(self):
 | 
				
			||||||
 | 
							import sleekxmpp.stanza.presence as p
 | 
				
			||||||
 | 
							self.p = p
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						def testPresenceShowRegression(self):
 | 
				
			||||||
 | 
							"Regression check presence['type'] = 'dnd' show value working"
 | 
				
			||||||
 | 
							p = self.p.Presence()
 | 
				
			||||||
 | 
							p['type'] = 'dnd'
 | 
				
			||||||
 | 
							self.failUnless(str(p) == "<presence><show>dnd</show></presence>")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					suite = unittest.TestLoader().loadTestsFromTestCase(testpresencestanzas)
 | 
				
			||||||
		Reference in New Issue
	
	Block a user