home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / var / lib / python-support / python2.6 / gdata / tlslite / utils / xmltools.pyc (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  8.3 KB  |  228 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. '''Helper functions for XML.
  5.  
  6. This module has misc. helper functions for working with XML DOM nodes.'''
  7. import re
  8. from compat import *
  9. import os
  10. if os.name != 'java':
  11.     from xml.dom import minidom
  12.     from xml.sax import saxutils
  13.     
  14.     def parseDocument(s):
  15.         return minidom.parseString(s)
  16.  
  17. else:
  18.     from javax.xml.parsers import *
  19.     import java
  20.     builder = DocumentBuilderFactory.newInstance().newDocumentBuilder()
  21.     
  22.     def parseDocument(s):
  23.         stream = java.io.ByteArrayInputStream(java.lang.String(s).getBytes())
  24.         return builder.parse(stream)
  25.  
  26.  
  27. def parseAndStripWhitespace(s):
  28.     
  29.     try:
  30.         element = parseDocument(s).documentElement
  31.     except BaseException:
  32.         e = None
  33.         raise SyntaxError(str(e))
  34.  
  35.     stripWhitespace(element)
  36.     return element
  37.  
  38.  
  39. def stripWhitespace(element, tab = 0):
  40.     element.normalize()
  41.     lastSpacer = '\n' + '\t' * tab
  42.     spacer = lastSpacer + '\t'
  43.     if element.childNodes.length == 0:
  44.         raise SyntaxError('Empty XML elements not allowed')
  45.     element.childNodes.length == 0
  46.     if element.childNodes.length == 1:
  47.         if element.firstChild.nodeType == element.firstChild.TEXT_NODE:
  48.             if element.firstChild.data == lastSpacer:
  49.                 element.removeChild(element.firstChild)
  50.             
  51.             return None
  52.         if element.firstChild.nodeType == element.firstChild.ELEMENT_NODE:
  53.             raise SyntaxError("Bad whitespace under '%s'" % element.tagName)
  54.         element.firstChild.nodeType == element.firstChild.ELEMENT_NODE
  55.         raise SyntaxError('Unexpected node type in XML document')
  56.     element.childNodes.length == 1
  57.     child = element.firstChild
  58.     while child:
  59.         if child.nodeType == child.ELEMENT_NODE:
  60.             stripWhitespace(child, tab + 1)
  61.             child = child.nextSibling
  62.             continue
  63.         if child.nodeType == child.TEXT_NODE:
  64.             if child == element.lastChild:
  65.                 if child.data != lastSpacer:
  66.                     raise SyntaxError("Bad whitespace under '%s'" % element.tagName)
  67.                 child.data != lastSpacer
  68.             elif child.data != spacer:
  69.                 raise SyntaxError("Bad whitespace under '%s'" % element.tagName)
  70.             
  71.             next = child.nextSibling
  72.             element.removeChild(child)
  73.             child = next
  74.             continue
  75.         raise SyntaxError('Unexpected node type in XML document')
  76.  
  77.  
  78. def checkName(element, name):
  79.     if element.nodeType != element.ELEMENT_NODE:
  80.         raise SyntaxError("Missing element: '%s'" % name)
  81.     element.nodeType != element.ELEMENT_NODE
  82.     if name == None:
  83.         return None
  84.     if element.tagName != name:
  85.         raise SyntaxError("Wrong element name: should be '%s', is '%s'" % (name, element.tagName))
  86.     element.tagName != name
  87.  
  88.  
  89. def getChild(element, index, name = None):
  90.     if element.nodeType != element.ELEMENT_NODE:
  91.         raise SyntaxError('Wrong node type in getChild()')
  92.     element.nodeType != element.ELEMENT_NODE
  93.     child = element.childNodes.item(index)
  94.     if child == None:
  95.         raise SyntaxError("Missing child: '%s'" % name)
  96.     child == None
  97.     checkName(child, name)
  98.     return child
  99.  
  100.  
  101. def getChildIter(element, index):
  102.     
  103.     class ChildIter:
  104.         
  105.         def __init__(self, element, index):
  106.             self.element = element
  107.             self.index = index
  108.  
  109.         
  110.         def next(self):
  111.             if self.index < len(self.element.childNodes):
  112.                 retVal = self.element.childNodes.item(self.index)
  113.                 self.index += 1
  114.             else:
  115.                 retVal = None
  116.             return retVal
  117.  
  118.         
  119.         def checkEnd(self):
  120.             if self.index != len(self.element.childNodes):
  121.                 raise SyntaxError("Too many elements under: '%s'" % self.element.tagName)
  122.             self.index != len(self.element.childNodes)
  123.  
  124.  
  125.     return ChildIter(element, index)
  126.  
  127.  
  128. def getChildOrNone(element, index):
  129.     if element.nodeType != element.ELEMENT_NODE:
  130.         raise SyntaxError('Wrong node type in getChild()')
  131.     element.nodeType != element.ELEMENT_NODE
  132.     child = element.childNodes.item(index)
  133.     return child
  134.  
  135.  
  136. def getLastChild(element, index, name = None):
  137.     if element.nodeType != element.ELEMENT_NODE:
  138.         raise SyntaxError('Wrong node type in getLastChild()')
  139.     element.nodeType != element.ELEMENT_NODE
  140.     child = element.childNodes.item(index)
  141.     if child == None:
  142.         raise SyntaxError("Missing child: '%s'" % name)
  143.     child == None
  144.     if child != element.lastChild:
  145.         raise SyntaxError("Too many elements under: '%s'" % element.tagName)
  146.     child != element.lastChild
  147.     checkName(child, name)
  148.     return child
  149.  
  150. nsRegEx = 'http://trevp.net/cryptoID\\Z'
  151. cryptoIDRegEx = '([a-km-z3-9]{5}\\.){3}[a-km-z3-9]{5}\\Z'
  152. urlRegEx = 'http(s)?://.{1,100}\\Z'
  153. sha1Base64RegEx = '[A-Za-z0-9+/]{27}=\\Z'
  154. base64RegEx = '[A-Za-z0-9+/]+={0,4}\\Z'
  155. certsListRegEx = '(0)?(1)?(2)?(3)?(4)?(5)?(6)?(7)?(8)?(9)?\\Z'
  156. keyRegEx = '[A-Z]\\Z'
  157. 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'
  158. dateTimeRegEx = '\\d\\d\\d\\d-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\dZ\\Z'
  159. shortStringRegEx = '.{1,100}\\Z'
  160. exprRegEx = '[a-zA-Z0-9 ,()]{1,200}\\Z'
  161. notAfterDeltaRegEx = '0|([1-9][0-9]{0,8})\\Z'
  162. booleanRegEx = '(true)|(false)'
  163.  
  164. def getReqAttribute(element, attrName, regEx = ''):
  165.     if element.nodeType != element.ELEMENT_NODE:
  166.         raise SyntaxError('Wrong node type in getReqAttribute()')
  167.     element.nodeType != element.ELEMENT_NODE
  168.     value = element.getAttribute(attrName)
  169.     if not value:
  170.         raise SyntaxError('Missing Attribute: ' + attrName)
  171.     value
  172.     if not re.match(regEx, value):
  173.         raise SyntaxError("Bad Attribute Value for '%s': '%s' " % (attrName, value))
  174.     re.match(regEx, value)
  175.     element.removeAttribute(attrName)
  176.     return str(value)
  177.  
  178.  
  179. def getAttribute(element, attrName, regEx = ''):
  180.     if element.nodeType != element.ELEMENT_NODE:
  181.         raise SyntaxError('Wrong node type in getAttribute()')
  182.     element.nodeType != element.ELEMENT_NODE
  183.     value = element.getAttribute(attrName)
  184.     if value:
  185.         if not re.match(regEx, value):
  186.             raise SyntaxError("Bad Attribute Value for '%s': '%s' " % (attrName, value))
  187.         re.match(regEx, value)
  188.         element.removeAttribute(attrName)
  189.         return str(value)
  190.  
  191.  
  192. def checkNoMoreAttributes(element):
  193.     if element.nodeType != element.ELEMENT_NODE:
  194.         raise SyntaxError('Wrong node type in checkNoMoreAttributes()')
  195.     element.nodeType != element.ELEMENT_NODE
  196.     if element.attributes.length != 0:
  197.         raise SyntaxError("Extra attributes on '%s'" % element.tagName)
  198.     element.attributes.length != 0
  199.  
  200.  
  201. def getText(element, regEx = ''):
  202.     textNode = element.firstChild
  203.     if textNode == None:
  204.         raise SyntaxError("Empty element '%s'" % element.tagName)
  205.     textNode == None
  206.     if textNode.nodeType != textNode.TEXT_NODE:
  207.         raise SyntaxError("Non-text node: '%s'" % element.tagName)
  208.     textNode.nodeType != textNode.TEXT_NODE
  209.     if not re.match(regEx, textNode.data):
  210.         raise SyntaxError("Bad Text Value for '%s': '%s' " % (element.tagName, textNode.data))
  211.     re.match(regEx, textNode.data)
  212.     return str(textNode.data)
  213.  
  214.  
  215. def indent(s, steps, ch = '\t'):
  216.     tabs = ch * steps
  217.     if s[-1] != '\n':
  218.         s = tabs + s.replace('\n', '\n' + tabs)
  219.     else:
  220.         s = tabs + s.replace('\n', '\n' + tabs)
  221.         s = s[:-len(tabs)]
  222.     return s
  223.  
  224.  
  225. def escape(s):
  226.     return saxutils.escape(s)
  227.  
  228.