aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/words/xish/xpath.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/words/xish/xpath.py')
-rwxr-xr-xlib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/words/xish/xpath.py333
1 files changed, 0 insertions, 333 deletions
diff --git a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/words/xish/xpath.py b/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/words/xish/xpath.py
deleted file mode 100755
index bf5b5299..00000000
--- a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/words/xish/xpath.py
+++ /dev/null
@@ -1,333 +0,0 @@
-# -*- test-case-name: twisted.words.test.test_xpath -*-
-#
-# Copyright (c) Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-"""
-XPath query support.
-
-This module provides L{XPathQuery} to match
-L{domish.Element<twisted.words.xish.domish.Element>} instances against
-XPath-like expressions.
-"""
-
-try:
- import cStringIO as StringIO
-except ImportError:
- import StringIO
-
-class LiteralValue(str):
- def value(self, elem):
- return self
-
-
-class IndexValue:
- def __init__(self, index):
- self.index = int(index) - 1
-
- def value(self, elem):
- return elem.children[self.index]
-
-
-class AttribValue:
- def __init__(self, attribname):
- self.attribname = attribname
- if self.attribname == "xmlns":
- self.value = self.value_ns
-
- def value_ns(self, elem):
- return elem.uri
-
- def value(self, elem):
- if self.attribname in elem.attributes:
- return elem.attributes[self.attribname]
- else:
- return None
-
-
-class CompareValue:
- def __init__(self, lhs, op, rhs):
- self.lhs = lhs
- self.rhs = rhs
- if op == "=":
- self.value = self._compareEqual
- else:
- self.value = self._compareNotEqual
-
- def _compareEqual(self, elem):
- return self.lhs.value(elem) == self.rhs.value(elem)
-
- def _compareNotEqual(self, elem):
- return self.lhs.value(elem) != self.rhs.value(elem)
-
-
-class BooleanValue:
- """
- Provide boolean XPath expression operators.
-
- @ivar lhs: Left hand side expression of the operator.
- @ivar op: The operator. One of C{'and'}, C{'or'}.
- @ivar rhs: Right hand side expression of the operator.
- @ivar value: Reference to the method that will calculate the value of
- this expression given an element.
- """
- def __init__(self, lhs, op, rhs):
- self.lhs = lhs
- self.rhs = rhs
- if op == "and":
- self.value = self._booleanAnd
- else:
- self.value = self._booleanOr
-
- def _booleanAnd(self, elem):
- """
- Calculate boolean and of the given expressions given an element.
-
- @param elem: The element to calculate the value of the expression from.
- """
- return self.lhs.value(elem) and self.rhs.value(elem)
-
- def _booleanOr(self, elem):
- """
- Calculate boolean or of the given expressions given an element.
-
- @param elem: The element to calculate the value of the expression from.
- """
- return self.lhs.value(elem) or self.rhs.value(elem)
-
-
-def Function(fname):
- """
- Internal method which selects the function object
- """
- klassname = "_%s_Function" % fname
- c = globals()[klassname]()
- return c
-
-
-class _not_Function:
- def __init__(self):
- self.baseValue = None
-
- def setParams(self, baseValue):
- self.baseValue = baseValue
-
- def value(self, elem):
- return not self.baseValue.value(elem)
-
-
-class _text_Function:
- def setParams(self):
- pass
-
- def value(self, elem):
- return str(elem)
-
-
-class _Location:
- def __init__(self):
- self.predicates = []
- self.elementName = None
- self.childLocation = None
-
- def matchesPredicates(self, elem):
- if self.elementName != None and self.elementName != elem.name:
- return 0
-
- for p in self.predicates:
- if not p.value(elem):
- return 0
-
- return 1
-
- def matches(self, elem):
- if not self.matchesPredicates(elem):
- return 0
-
- if self.childLocation != None:
- for c in elem.elements():
- if self.childLocation.matches(c):
- return 1
- else:
- return 1
-
- return 0
-
- def queryForString(self, elem, resultbuf):
- if not self.matchesPredicates(elem):
- return
-
- if self.childLocation != None:
- for c in elem.elements():
- self.childLocation.queryForString(c, resultbuf)
- else:
- resultbuf.write(str(elem))
-
- def queryForNodes(self, elem, resultlist):
- if not self.matchesPredicates(elem):
- return
-
- if self.childLocation != None:
- for c in elem.elements():
- self.childLocation.queryForNodes(c, resultlist)
- else:
- resultlist.append(elem)
-
- def queryForStringList(self, elem, resultlist):
- if not self.matchesPredicates(elem):
- return
-
- if self.childLocation != None:
- for c in elem.elements():
- self.childLocation.queryForStringList(c, resultlist)
- else:
- for c in elem.children:
- if isinstance(c, (str, unicode)):
- resultlist.append(c)
-
-
-class _AnyLocation:
- def __init__(self):
- self.predicates = []
- self.elementName = None
- self.childLocation = None
-
- def matchesPredicates(self, elem):
- for p in self.predicates:
- if not p.value(elem):
- return 0
- return 1
-
- def listParents(self, elem, parentlist):
- if elem.parent != None:
- self.listParents(elem.parent, parentlist)
- parentlist.append(elem.name)
-
- def isRootMatch(self, elem):
- if (self.elementName == None or self.elementName == elem.name) and \
- self.matchesPredicates(elem):
- if self.childLocation != None:
- for c in elem.elements():
- if self.childLocation.matches(c):
- return True
- else:
- return True
- return False
-
- def findFirstRootMatch(self, elem):
- if (self.elementName == None or self.elementName == elem.name) and \
- self.matchesPredicates(elem):
- # Thus far, the name matches and the predicates match,
- # now check into the children and find the first one
- # that matches the rest of the structure
- # the rest of the structure
- if self.childLocation != None:
- for c in elem.elements():
- if self.childLocation.matches(c):
- return c
- return None
- else:
- # No children locations; this is a match!
- return elem
- else:
- # Ok, predicates or name didn't match, so we need to start
- # down each child and treat it as the root and try
- # again
- for c in elem.elements():
- if self.matches(c):
- return c
- # No children matched...
- return None
-
- def matches(self, elem):
- if self.isRootMatch(elem):
- return True
- else:
- # Ok, initial element isn't an exact match, walk
- # down each child and treat it as the root and try
- # again
- for c in elem.elements():
- if self.matches(c):
- return True
- # No children matched...
- return False
-
- def queryForString(self, elem, resultbuf):
- raise NotImplementedError(
- "queryForString is not implemented for any location")
-
- def queryForNodes(self, elem, resultlist):
- # First check to see if _this_ element is a root
- if self.isRootMatch(elem):
- resultlist.append(elem)
-
- # Now check each child
- for c in elem.elements():
- self.queryForNodes(c, resultlist)
-
-
- def queryForStringList(self, elem, resultlist):
- if self.isRootMatch(elem):
- for c in elem.children:
- if isinstance(c, (str, unicode)):
- resultlist.append(c)
- for c in elem.elements():
- self.queryForStringList(c, resultlist)
-
-
-class XPathQuery:
- def __init__(self, queryStr):
- self.queryStr = queryStr
- from twisted.words.xish.xpathparser import parse
- self.baseLocation = parse('XPATH', queryStr)
-
- def __hash__(self):
- return self.queryStr.__hash__()
-
- def matches(self, elem):
- return self.baseLocation.matches(elem)
-
- def queryForString(self, elem):
- result = StringIO.StringIO()
- self.baseLocation.queryForString(elem, result)
- return result.getvalue()
-
- def queryForNodes(self, elem):
- result = []
- self.baseLocation.queryForNodes(elem, result)
- if len(result) == 0:
- return None
- else:
- return result
-
- def queryForStringList(self, elem):
- result = []
- self.baseLocation.queryForStringList(elem, result)
- if len(result) == 0:
- return None
- else:
- return result
-
-
-__internedQueries = {}
-
-def internQuery(queryString):
- if queryString not in __internedQueries:
- __internedQueries[queryString] = XPathQuery(queryString)
- return __internedQueries[queryString]
-
-
-def matches(xpathstr, elem):
- return internQuery(xpathstr).matches(elem)
-
-
-def queryForStringList(xpathstr, elem):
- return internQuery(xpathstr).queryForStringList(elem)
-
-
-def queryForString(xpathstr, elem):
- return internQuery(xpathstr).queryForString(elem)
-
-
-def queryForNodes(xpathstr, elem):
- return internQuery(xpathstr).queryForNodes(elem)