Import Upstream version 2.7.18

This commit is contained in:
geos_one
2025-08-15 16:28:06 +02:00
commit ba1f69ab39
4521 changed files with 1778434 additions and 0 deletions

42
Demo/xml/elem_count.py Normal file
View File

@@ -0,0 +1,42 @@
"""
A simple demo that reads in an XML document and displays the number of
elements and attributes as well as a tally of elements and attributes by name.
"""
import sys
from collections import defaultdict
from xml.sax import make_parser, handler
class FancyCounter(handler.ContentHandler):
def __init__(self):
self._elems = 0
self._attrs = 0
self._elem_types = defaultdict(int)
self._attr_types = defaultdict(int)
def startElement(self, name, attrs):
self._elems += 1
self._attrs += len(attrs)
self._elem_types[name] += 1
for name in attrs.keys():
self._attr_types[name] += 1
def endDocument(self):
print "There were", self._elems, "elements."
print "There were", self._attrs, "attributes."
print "---ELEMENT TYPES"
for pair in self._elem_types.items():
print "%20s %d" % pair
print "---ATTRIBUTE TYPES"
for pair in self._attr_types.items():
print "%20s %d" % pair
if __name__ == '__main__':
parser = make_parser()
parser.setContentHandler(FancyCounter())
parser.parse(sys.argv[1])

46
Demo/xml/roundtrip.py Normal file
View File

@@ -0,0 +1,46 @@
"""
A simple demo that reads in an XML document and spits out an equivalent,
but not necessarily identical, document.
"""
import sys
from xml.sax import saxutils, handler, make_parser
# --- The ContentHandler
class ContentGenerator(handler.ContentHandler):
def __init__(self, out=sys.stdout):
handler.ContentHandler.__init__(self)
self._out = out
# ContentHandler methods
def startDocument(self):
self._out.write('<?xml version="1.0" encoding="iso-8859-1"?>\n')
def startElement(self, name, attrs):
self._out.write('<' + name)
for (name, value) in attrs.items():
self._out.write(' %s="%s"' % (name, saxutils.escape(value)))
self._out.write('>')
def endElement(self, name):
self._out.write('</%s>' % name)
def characters(self, content):
self._out.write(saxutils.escape(content))
def ignorableWhitespace(self, content):
self._out.write(content)
def processingInstruction(self, target, data):
self._out.write('<?%s %s?>' % (target, data))
# --- The main program
if __name__ == '__main__':
parser = make_parser()
parser.setContentHandler(ContentGenerator())
parser.parse(sys.argv[1])

97
Demo/xml/rss2html.py Normal file
View File

@@ -0,0 +1,97 @@
"""
A demo that reads in an RSS XML document and emits an HTML file containing
a list of the individual items in the feed.
"""
import sys
import codecs
from xml.sax import make_parser, handler
# --- Templates
top = """\
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>%s</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<h1>%s</h1>
"""
bottom = """
</ul>
<hr>
<address>
Converted to HTML by rss2html.py.
</address>
</body>
</html>
"""
# --- The ContentHandler
class RSSHandler(handler.ContentHandler):
def __init__(self, out=sys.stdout):
handler.ContentHandler.__init__(self)
self._out = codecs.getwriter('utf-8')(out)
self._text = ""
self._parent = None
self._list_started = False
self._title = None
self._link = None
self._descr = ""
# ContentHandler methods
def startElement(self, name, attrs):
if name == "channel" or name == "image" or name == "item":
self._parent = name
self._text = ""
def endElement(self, name):
if self._parent == "channel":
if name == "title":
self._out.write(top % (self._text, self._text))
elif name == "description":
self._out.write("<p>%s</p>\n" % self._text)
elif self._parent == "item":
if name == "title":
self._title = self._text
elif name == "link":
self._link = self._text
elif name == "description":
self._descr = self._text
elif name == "item":
if not self._list_started:
self._out.write("<ul>\n")
self._list_started = True
self._out.write(' <li><a href="%s">%s</a> %s\n' %
(self._link, self._title, self._descr))
self._title = None
self._link = None
self._descr = ""
if name == "rss":
self._out.write(bottom)
def characters(self, content):
self._text = self._text + content
# --- Main program
if __name__ == '__main__':
parser = make_parser()
parser.setContentHandler(RSSHandler())
parser.parse(sys.argv[1])