| Index: third_party/twisted_8_1/twisted/web/domhelpers.py
|
| diff --git a/third_party/twisted_8_1/twisted/web/domhelpers.py b/third_party/twisted_8_1/twisted/web/domhelpers.py
|
| deleted file mode 100644
|
| index e1322c492ffe0e56eb6cc820dc7b193f19a7b5f9..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/web/domhelpers.py
|
| +++ /dev/null
|
| @@ -1,260 +0,0 @@
|
| -# -*- test-case-name: twisted.web.test.test_woven -*-
|
| -# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -#
|
| -
|
| -from __future__ import nested_scopes
|
| -
|
| -from twisted.web import microdom
|
| -from microdom import getElementsByTagName, escape, unescape
|
| -
|
| -try:
|
| - import cStringIO as StringIO
|
| -except ImportError:
|
| - import StringIO
|
| -
|
| -class NodeLookupError(Exception): pass
|
| -
|
| -
|
| -def substitute(request, node, subs):
|
| - """
|
| - Look through the given node's children for strings, and
|
| - attempt to do string substitution with the given parameter.
|
| - """
|
| - for child in node.childNodes:
|
| - if hasattr(child, 'nodeValue') and child.nodeValue:
|
| - child.replaceData(0, len(child.nodeValue), child.nodeValue % subs)
|
| - substitute(request, child, subs)
|
| -
|
| -def _get(node, nodeId, nodeAttrs=('id','class','model','pattern')):
|
| - """
|
| - (internal) Get a node with the specified C{nodeId} as any of the C{class},
|
| - C{id} or C{pattern} attributes.
|
| - """
|
| -
|
| - if hasattr(node, 'hasAttributes') and node.hasAttributes():
|
| - for nodeAttr in nodeAttrs:
|
| - if (str (node.getAttribute(nodeAttr)) == nodeId):
|
| - return node
|
| - if node.hasChildNodes():
|
| - if hasattr(node.childNodes, 'length'):
|
| - length = node.childNodes.length
|
| - else:
|
| - length = len(node.childNodes)
|
| - for childNum in range(length):
|
| - result = _get(node.childNodes[childNum], nodeId)
|
| - if result: return result
|
| -
|
| -def get(node, nodeId):
|
| - """
|
| - Get a node with the specified C{nodeId} as any of the C{class},
|
| - C{id} or C{pattern} attributes. If there is no such node, raise
|
| - L{NodeLookupError}.
|
| - """
|
| - result = _get(node, nodeId)
|
| - if result: return result
|
| - raise NodeLookupError, nodeId
|
| -
|
| -def getIfExists(node, nodeId):
|
| - """
|
| - Get a node with the specified C{nodeId} as any of the C{class},
|
| - C{id} or C{pattern} attributes. If there is no such node, return
|
| - C{None}.
|
| - """
|
| - return _get(node, nodeId)
|
| -
|
| -def getAndClear(node, nodeId):
|
| - """Get a node with the specified C{nodeId} as any of the C{class},
|
| - C{id} or C{pattern} attributes. If there is no such node, raise
|
| - L{NodeLookupError}. Remove all child nodes before returning.
|
| - """
|
| - result = get(node, nodeId)
|
| - if result:
|
| - clearNode(result)
|
| - return result
|
| -
|
| -def clearNode(node):
|
| - """
|
| - Remove all children from the given node.
|
| - """
|
| - node.childNodes[:] = []
|
| -
|
| -def locateNodes(nodeList, key, value, noNesting=1):
|
| - """
|
| - Find subnodes in the given node where the given attribute
|
| - has the given value.
|
| - """
|
| - returnList = []
|
| - if not isinstance(nodeList, type([])):
|
| - return locateNodes(nodeList.childNodes, key, value, noNesting)
|
| - for childNode in nodeList:
|
| - if not hasattr(childNode, 'getAttribute'):
|
| - continue
|
| - if str(childNode.getAttribute(key)) == value:
|
| - returnList.append(childNode)
|
| - if noNesting:
|
| - continue
|
| - returnList.extend(locateNodes(childNode, key, value, noNesting))
|
| - return returnList
|
| -
|
| -def superSetAttribute(node, key, value):
|
| - if not hasattr(node, 'setAttribute'): return
|
| - node.setAttribute(key, value)
|
| - if node.hasChildNodes():
|
| - for child in node.childNodes:
|
| - superSetAttribute(child, key, value)
|
| -
|
| -def superPrependAttribute(node, key, value):
|
| - if not hasattr(node, 'setAttribute'): return
|
| - old = node.getAttribute(key)
|
| - if old:
|
| - node.setAttribute(key, value+'/'+old)
|
| - else:
|
| - node.setAttribute(key, value)
|
| - if node.hasChildNodes():
|
| - for child in node.childNodes:
|
| - superPrependAttribute(child, key, value)
|
| -
|
| -def superAppendAttribute(node, key, value):
|
| - if not hasattr(node, 'setAttribute'): return
|
| - old = node.getAttribute(key)
|
| - if old:
|
| - node.setAttribute(key, old + '/' + value)
|
| - else:
|
| - node.setAttribute(key, value)
|
| - if node.hasChildNodes():
|
| - for child in node.childNodes:
|
| - superAppendAttribute(child, key, value)
|
| -
|
| -def gatherTextNodes(iNode, dounescape=0, joinWith=""):
|
| - """Visit each child node and collect its text data, if any, into a string.
|
| -For example::
|
| - >>> doc=microdom.parseString('<a>1<b>2<c>3</c>4</b></a>')
|
| - >>> gatherTextNodes(doc.documentElement)
|
| - '1234'
|
| -With dounescape=1, also convert entities back into normal characters.
|
| -@return: the gathered nodes as a single string
|
| -@rtype: str
|
| -"""
|
| - gathered=[]
|
| - gathered_append=gathered.append
|
| - slice=[iNode]
|
| - while len(slice)>0:
|
| - c=slice.pop(0)
|
| - if hasattr(c, 'nodeValue') and c.nodeValue is not None:
|
| - if dounescape:
|
| - val=unescape(c.nodeValue)
|
| - else:
|
| - val=c.nodeValue
|
| - gathered_append(val)
|
| - slice[:0]=c.childNodes
|
| - return joinWith.join(gathered)
|
| -
|
| -class RawText(microdom.Text):
|
| - """This is an evil and horrible speed hack. Basically, if you have a big
|
| - chunk of XML that you want to insert into the DOM, but you don't want to
|
| - incur the cost of parsing it, you can construct one of these and insert it
|
| - into the DOM. This will most certainly only work with microdom as the API
|
| - for converting nodes to xml is different in every DOM implementation.
|
| -
|
| - This could be improved by making this class a Lazy parser, so if you
|
| - inserted this into the DOM and then later actually tried to mutate this
|
| - node, it would be parsed then.
|
| - """
|
| -
|
| - def writexml(self, writer, indent="", addindent="", newl="", strip=0, nsprefixes=None, namespace=None):
|
| - writer.write("%s%s%s" % (indent, self.data, newl))
|
| -
|
| -def findNodes(parent, matcher, accum=None):
|
| - if accum is None:
|
| - accum = []
|
| - if not parent.hasChildNodes():
|
| - return accum
|
| - for child in parent.childNodes:
|
| - # print child, child.nodeType, child.nodeName
|
| - if matcher(child):
|
| - accum.append(child)
|
| - findNodes(child, matcher, accum)
|
| - return accum
|
| -
|
| -
|
| -def findNodesShallowOnMatch(parent, matcher, recurseMatcher, accum=None):
|
| - if accum is None:
|
| - accum = []
|
| - if not parent.hasChildNodes():
|
| - return accum
|
| - for child in parent.childNodes:
|
| - # print child, child.nodeType, child.nodeName
|
| - if matcher(child):
|
| - accum.append(child)
|
| - if recurseMatcher(child):
|
| - findNodesShallowOnMatch(child, matcher, recurseMatcher, accum)
|
| - return accum
|
| -
|
| -def findNodesShallow(parent, matcher, accum=None):
|
| - if accum is None:
|
| - accum = []
|
| - if not parent.hasChildNodes():
|
| - return accum
|
| - for child in parent.childNodes:
|
| - if matcher(child):
|
| - accum.append(child)
|
| - else:
|
| - findNodes(child, matcher, accum)
|
| - return accum
|
| -
|
| -
|
| -def findElementsWithAttributeShallow(parent, attribute):
|
| - return findNodesShallow(parent,
|
| - lambda n: isinstance(n, microdom.Element) and
|
| - n.hasAttribute(attribute))
|
| -
|
| -
|
| -def findElements(parent, matcher):
|
| - return findNodes(
|
| - parent,
|
| - lambda n, matcher=matcher: isinstance(n, microdom.Element) and
|
| - matcher(n))
|
| -
|
| -def findElementsWithAttribute(parent, attribute, value=None):
|
| - if value:
|
| - return findElements(
|
| - parent,
|
| - lambda n, attribute=attribute, value=value:
|
| - n.hasAttribute(attribute) and n.getAttribute(attribute) == value)
|
| - else:
|
| - return findElements(
|
| - parent,
|
| - lambda n, attribute=attribute: n.hasAttribute(attribute))
|
| -
|
| -
|
| -def findNodesNamed(parent, name):
|
| - return findNodes(parent, lambda n, name=name: n.nodeName == name)
|
| -
|
| -
|
| -def writeNodeData(node, oldio):
|
| - for subnode in node.childNodes:
|
| - if hasattr(subnode, 'data'):
|
| - oldio.write(str(subnode.data))
|
| - else:
|
| - writeNodeData(subnode, oldio)
|
| -
|
| -
|
| -def getNodeText(node):
|
| - oldio = StringIO.StringIO()
|
| - writeNodeData(node, oldio)
|
| - return oldio.getvalue()
|
| -
|
| -def getParents(node):
|
| - l = []
|
| - while node:
|
| - l.append(node)
|
| - node = node.parentNode
|
| - return l
|
| -
|
| -def namedChildren(parent, nodeName):
|
| - """namedChildren(parent, nodeName) -> children (not descendants) of parent
|
| - that have tagName == nodeName
|
| - """
|
| - return [n for n in parent.childNodes if getattr(n, 'tagName', '')==nodeName]
|
|
|