annotate roundup/cgi/TAL/XMLParser.py @ 1655:0feb34b2de71 0.6.0b3

*** empty log message ***
author Richard Jones <richard@users.sourceforge.net>
date Mon, 09 Jun 2003 23:51:14 +0000
parents c08b3820edd1
children fc52d57c6c3e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 ##############################################################################
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 #
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # Copyright (c) 2001, 2002 Zope Corporation and Contributors.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 # All Rights Reserved.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 #
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 # This software is subject to the provisions of the Zope Public License,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 # Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 # FOR A PARTICULAR PURPOSE
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 #
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 ##############################################################################
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14 """
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 Generic expat-based XML parser base class.
1071
c08b3820edd1 Adhering to ZPL
Richard Jones <richard@users.sourceforge.net>
parents: 1049
diff changeset
16
c08b3820edd1 Adhering to ZPL
Richard Jones <richard@users.sourceforge.net>
parents: 1049
diff changeset
17 Modified for Roundup 0.5 release:
c08b3820edd1 Adhering to ZPL
Richard Jones <richard@users.sourceforge.net>
parents: 1049
diff changeset
18
c08b3820edd1 Adhering to ZPL
Richard Jones <richard@users.sourceforge.net>
parents: 1049
diff changeset
19 - removed dependency on zLOG
c08b3820edd1 Adhering to ZPL
Richard Jones <richard@users.sourceforge.net>
parents: 1049
diff changeset
20
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21 """
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 class XMLParser:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 ordered_attributes = 0
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 handler_names = [
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 "StartElementHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 "EndElementHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 "ProcessingInstructionHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 "CharacterDataHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 "UnparsedEntityDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 "NotationDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 "StartNamespaceDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 "EndNamespaceDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 "CommentHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 "StartCdataSectionHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 "EndCdataSectionHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 "DefaultHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 "DefaultHandlerExpand",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 "NotStandaloneHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 "ExternalEntityRefHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 "XmlDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 "StartDoctypeDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 "EndDoctypeDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 "ElementDeclHandler",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 "AttlistDeclHandler"
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 ]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 def __init__(self, encoding=None):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 self.parser = p = self.createParser()
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 if self.ordered_attributes:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 self.parser.ordered_attributes = self.ordered_attributes
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 except AttributeError:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 #zLOG.LOG("TAL.XMLParser", zLOG.INFO,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 # "Can't set ordered_attributes")
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 self.ordered_attributes = 0
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 for name in self.handler_names:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 method = getattr(self, name, None)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 if method is not None:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 setattr(p, name, method)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 except AttributeError:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 #zLOG.LOG("TAL.XMLParser", zLOG.PROBLEM,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 # "Can't set expat handler %s" % name)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 pass
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 def createParser(self, encoding=None):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 global XMLParseError
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 try:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 from Products.ParsedXML.Expat import pyexpat
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 XMLParseError = pyexpat.ExpatError
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 return pyexpat.ParserCreate(encoding, ' ')
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75 except ImportError:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 from xml.parsers import expat
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 XMLParseError = expat.ExpatError
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 return expat.ParserCreate(encoding, ' ')
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 def parseFile(self, filename):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 self.parseStream(open(filename))
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 def parseString(self, s):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 self.parser.Parse(s, 1)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 def parseURL(self, url):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 import urllib
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 self.parseStream(urllib.urlopen(url))
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 def parseStream(self, stream):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 self.parser.ParseFile(stream)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 def parseFragment(self, s, end=0):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 self.parser.Parse(s, end)

Roundup Issue Tracker: http://roundup-tracker.org/