Index: third_party/tlslite/tlslite/utils/xmltools.py |
diff --git a/third_party/tlslite/tlslite/utils/xmltools.py b/third_party/tlslite/tlslite/utils/xmltools.py |
deleted file mode 100644 |
index 06f2e43071c64a1adbeeea29454dd8f5f29d620e..0000000000000000000000000000000000000000 |
--- a/third_party/tlslite/tlslite/utils/xmltools.py |
+++ /dev/null |
@@ -1,201 +0,0 @@ |
-"""Helper functions for XML. |
- |
-This module has misc. helper functions for working with XML DOM nodes.""" |
- |
-import re |
-from compat import * |
- |
-import os |
-if os.name != "java": |
- from xml.dom import minidom |
- from xml.sax import saxutils |
- |
- def parseDocument(s): |
- return minidom.parseString(s) |
-else: |
- from javax.xml.parsers import * |
- import java |
- |
- builder = DocumentBuilderFactory.newInstance().newDocumentBuilder() |
- |
- def parseDocument(s): |
- stream = java.io.ByteArrayInputStream(java.lang.String(s).getBytes()) |
- return builder.parse(stream) |
- |
-def parseAndStripWhitespace(s): |
- try: |
- element = parseDocument(s).documentElement |
- except BaseException, e: |
- raise SyntaxError(str(e)) |
- stripWhitespace(element) |
- return element |
- |
-#Goes through a DOM tree and removes whitespace besides child elements, |
-#as long as this whitespace is correctly tab-ified |
-def stripWhitespace(element, tab=0): |
- element.normalize() |
- |
- lastSpacer = "\n" + ("\t"*tab) |
- spacer = lastSpacer + "\t" |
- |
- #Zero children aren't allowed (i.e. <empty/>) |
- #This makes writing output simpler, and matches Canonical XML |
- if element.childNodes.length==0: #DON'T DO len(element.childNodes) - doesn't work in Jython |
- raise SyntaxError("Empty XML elements not allowed") |
- |
- #If there's a single child, it must be text context |
- if element.childNodes.length==1: |
- if element.firstChild.nodeType == element.firstChild.TEXT_NODE: |
- #If it's an empty element, remove |
- if element.firstChild.data == lastSpacer: |
- element.removeChild(element.firstChild) |
- return |
- #If not text content, give an error |
- elif element.firstChild.nodeType == element.firstChild.ELEMENT_NODE: |
- raise SyntaxError("Bad whitespace under '%s'" % element.tagName) |
- else: |
- raise SyntaxError("Unexpected node type in XML document") |
- |
- #Otherwise there's multiple child element |
- child = element.firstChild |
- while child: |
- if child.nodeType == child.ELEMENT_NODE: |
- stripWhitespace(child, tab+1) |
- child = child.nextSibling |
- elif child.nodeType == child.TEXT_NODE: |
- if child == element.lastChild: |
- if child.data != lastSpacer: |
- raise SyntaxError("Bad whitespace under '%s'" % element.tagName) |
- elif child.data != spacer: |
- raise SyntaxError("Bad whitespace under '%s'" % element.tagName) |
- next = child.nextSibling |
- element.removeChild(child) |
- child = next |
- else: |
- raise SyntaxError("Unexpected node type in XML document") |
- |
- |
-def checkName(element, name): |
- if element.nodeType != element.ELEMENT_NODE: |
- raise SyntaxError("Missing element: '%s'" % name) |
- |
- if name == None: |
- return |
- |
- if element.tagName != name: |
- raise SyntaxError("Wrong element name: should be '%s', is '%s'" % (name, element.tagName)) |
- |
-def getChild(element, index, name=None): |
- if element.nodeType != element.ELEMENT_NODE: |
- raise SyntaxError("Wrong node type in getChild()") |
- |
- child = element.childNodes.item(index) |
- if child == None: |
- raise SyntaxError("Missing child: '%s'" % name) |
- checkName(child, name) |
- return child |
- |
-def getChildIter(element, index): |
- class ChildIter: |
- def __init__(self, element, index): |
- self.element = element |
- self.index = index |
- |
- def next(self): |
- if self.index < len(self.element.childNodes): |
- retVal = self.element.childNodes.item(self.index) |
- self.index += 1 |
- else: |
- retVal = None |
- return retVal |
- |
- def checkEnd(self): |
- if self.index != len(self.element.childNodes): |
- raise SyntaxError("Too many elements under: '%s'" % self.element.tagName) |
- return ChildIter(element, index) |
- |
-def getChildOrNone(element, index): |
- if element.nodeType != element.ELEMENT_NODE: |
- raise SyntaxError("Wrong node type in getChild()") |
- child = element.childNodes.item(index) |
- return child |
- |
-def getLastChild(element, index, name=None): |
- if element.nodeType != element.ELEMENT_NODE: |
- raise SyntaxError("Wrong node type in getLastChild()") |
- |
- child = element.childNodes.item(index) |
- if child == None: |
- raise SyntaxError("Missing child: '%s'" % name) |
- if child != element.lastChild: |
- raise SyntaxError("Too many elements under: '%s'" % element.tagName) |
- checkName(child, name) |
- return child |
- |
-#Regular expressions for syntax-checking attribute and element content |
-nsRegEx = "http://trevp.net/cryptoID\Z" |
-cryptoIDRegEx = "([a-km-z3-9]{5}\.){3}[a-km-z3-9]{5}\Z" |
-urlRegEx = "http(s)?://.{1,100}\Z" |
-sha1Base64RegEx = "[A-Za-z0-9+/]{27}=\Z" |
-base64RegEx = "[A-Za-z0-9+/]+={0,4}\Z" |
-certsListRegEx = "(0)?(1)?(2)?(3)?(4)?(5)?(6)?(7)?(8)?(9)?\Z" |
-keyRegEx = "[A-Z]\Z" |
-keysListRegEx = "(A)?(B)?(C)?(D)?(E)?(F)?(G)?(H)?(I)?(J)?(K)?(L)?(M)?(N)?(O)?(P)?(Q)?(R)?(S)?(T)?(U)?(V)?(W)?(X)?(Y)?(Z)?\Z" |
-dateTimeRegEx = "\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ\Z" |
-shortStringRegEx = ".{1,100}\Z" |
-exprRegEx = "[a-zA-Z0-9 ,()]{1,200}\Z" |
-notAfterDeltaRegEx = "0|([1-9][0-9]{0,8})\Z" #A number from 0 to (1 billion)-1 |
-booleanRegEx = "(true)|(false)" |
- |
-def getReqAttribute(element, attrName, regEx=""): |
- if element.nodeType != element.ELEMENT_NODE: |
- raise SyntaxError("Wrong node type in getReqAttribute()") |
- |
- value = element.getAttribute(attrName) |
- if not value: |
- raise SyntaxError("Missing Attribute: " + attrName) |
- if not re.match(regEx, value): |
- raise SyntaxError("Bad Attribute Value for '%s': '%s' " % (attrName, value)) |
- element.removeAttribute(attrName) |
- return str(value) #de-unicode it; this is needed for bsddb, for example |
- |
-def getAttribute(element, attrName, regEx=""): |
- if element.nodeType != element.ELEMENT_NODE: |
- raise SyntaxError("Wrong node type in getAttribute()") |
- |
- value = element.getAttribute(attrName) |
- if value: |
- if not re.match(regEx, value): |
- raise SyntaxError("Bad Attribute Value for '%s': '%s' " % (attrName, value)) |
- element.removeAttribute(attrName) |
- return str(value) #de-unicode it; this is needed for bsddb, for example |
- |
-def checkNoMoreAttributes(element): |
- if element.nodeType != element.ELEMENT_NODE: |
- raise SyntaxError("Wrong node type in checkNoMoreAttributes()") |
- |
- if element.attributes.length!=0: |
- raise SyntaxError("Extra attributes on '%s'" % element.tagName) |
- |
-def getText(element, regEx=""): |
- textNode = element.firstChild |
- if textNode == None: |
- raise SyntaxError("Empty element '%s'" % element.tagName) |
- if textNode.nodeType != textNode.TEXT_NODE: |
- raise SyntaxError("Non-text node: '%s'" % element.tagName) |
- if not re.match(regEx, textNode.data): |
- raise SyntaxError("Bad Text Value for '%s': '%s' " % (element.tagName, textNode.data)) |
- return str(textNode.data) #de-unicode it; this is needed for bsddb, for example |
- |
-#Function for adding tabs to a string |
-def indent(s, steps, ch="\t"): |
- tabs = ch*steps |
- if s[-1] != "\n": |
- s = tabs + s.replace("\n", "\n"+tabs) |
- else: |
- s = tabs + s.replace("\n", "\n"+tabs) |
- s = s[ : -len(tabs)] |
- return s |
- |
-def escape(s): |
- return saxutils.escape(s) |