annotate roundup/cgi/TAL/XMLParser.py @ 2119:cc4667ef3f12

Added the ability to toggle where error messages go. They either go to the user (default, for backwards compatibility), the dispatcher, or both. These are able to be toggled via settings in config.py. Please refer to upgrading.txt for more details. (And Richard, let me know if I've done anything wrong with this checkin. :))
author Eddie Parker <eparker@users.sourceforge.net>
date Thu, 25 Mar 2004 19:27:15 +0000
parents fc52d57c6c3e
children 8c2402a78bb0
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 ##############################################################################
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1071
diff changeset
14 """Generic expat-based XML parser base class.
1071
c08b3820edd1 Adhering to ZPL
Richard Jones <richard@users.sourceforge.net>
parents: 1049
diff changeset
15
c08b3820edd1 Adhering to ZPL
Richard Jones <richard@users.sourceforge.net>
parents: 1049
diff changeset
16 Modified for Roundup 0.5 release:
c08b3820edd1 Adhering to ZPL
Richard Jones <richard@users.sourceforge.net>
parents: 1049
diff changeset
17
c08b3820edd1 Adhering to ZPL
Richard Jones <richard@users.sourceforge.net>
parents: 1049
diff changeset
18 - removed dependency on zLOG
c08b3820edd1 Adhering to ZPL
Richard Jones <richard@users.sourceforge.net>
parents: 1049
diff changeset
19
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20 """
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1071
diff changeset
21 __docformat__ = 'restructuredtext'
1049
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/