Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/nevow/query.py
diff options
context:
space:
mode:
authormatiu <matiu@38b22f21-9aea-0310-abfc-843a9883df58>2006-08-21 03:13:52 (GMT)
committer matiu <matiu@38b22f21-9aea-0310-abfc-843a9883df58>2006-08-21 03:13:52 (GMT)
commit9fb8d587448bdaab80f9ab2224189cb99c0cc585 (patch)
tree8e1d9d23999e469df958cbe24ffa0424281d29d7 /nevow/query.py
parent21e21a149a14334f7c1c80a0d4caeeed4ea39ebe (diff)
Moved twisted and nevow source inside of exe
git-svn-id: https://exe.svn.sourceforge.net/svnroot/exe/trunk@2114 38b22f21-9aea-0310-abfc-843a9883df58
Diffstat (limited to 'nevow/query.py')
-rw-r--r--nevow/query.py120
1 files changed, 120 insertions, 0 deletions
diff --git a/nevow/query.py b/nevow/query.py
new file mode 100644
index 0000000..b2fc2f1
--- /dev/null
+++ b/nevow/query.py
@@ -0,0 +1,120 @@
+# Copyright (c) 2004 Divmod.
+# See LICENSE for details.
+
+"""inevow.IQ adapter implementations.
+"""
+
+import warnings
+
+from nevow import inevow, compy, stan
+
+
+class QueryContext(compy.Adapter):
+ __implements__ = inevow.IQ,
+
+ def _locatePatterns(self, pattern, default, loop=True):
+ if self.original.tag.pattern == pattern:
+ yield self.original.tag.clone(deep=False, clearPattern=True)
+ for node in stan._locatePatterns(self.original.tag, pattern, default):
+ yield node
+
+ def patternGenerator(self, pattern, default=None):
+ return stan.PatternTag(self._locatePatterns(pattern, default))
+
+ def allPatterns(self, pattern):
+ if self.original.tag.pattern == pattern:
+ yield self.original.tag
+ for pat in self.original.tag.allPatterns(pattern):
+ yield pat
+
+ def onePattern(self, pattern):
+ found = False
+ try:
+ found = self.original.tag.onePattern(pattern)
+ except stan.NodeNotFound:
+ pass
+ if self.original.tag.pattern == pattern:
+ if found:
+ raise stan.TooManyNodes, ('pattern', pattern)
+ return self.original.tag.clone(deep=False, clearPattern=True)
+ if not found:
+ raise stan.NodeNotFound, ('pattern', pattern)
+ return found
+
+
+class QueryList(compy.Adapter):
+ def _locatePatterns(self, pattern, default, loop=True):
+ produced = []
+ for item in self.original:
+ try:
+ for x in inevow.IQ(item)._locatePatterns(pattern, None, loop=False):
+ produced.append(x)
+ yield x.clone(deep=False, clearPattern=True)
+ except stan.NodeNotFound:
+ continue
+
+ if produced:
+ while True:
+ for x in produced:
+ yield x.clone(deep=False, clearPattern=True)
+
+ if default is None:
+ raise stan.NodeNotFound, ("pattern", pattern)
+ if hasattr(default, 'clone'):
+ while True: yield default.clone(deep=False)
+ else:
+ while True: yield default
+
+ def patternGenerator(self, pattern, default=None):
+ return stan.PatternTag(
+ self._locatePatterns(pattern, default))
+
+ def allPatterns(self, pattern):
+ for item in self.original:
+ for pat in inevow.IQ(item).allPatterns(pattern):
+ yield pat
+
+ def onePattern(self, pattern):
+ found = False
+ for item in self.original:
+ try:
+ oldFound = found
+ found = inevow.IQ(item).onePattern(pattern)
+ if oldFound:
+ raise stan.TooManyNodes('pattern', pattern)
+ except stan.NodeNotFound:
+ continue
+ if not found:
+ raise stan.NodeNotFound('pattern', pattern)
+ return found
+
+
+class QuerySlot(QueryList):
+ def __init__(self, original):
+ QueryList.__init__(self, original.children)
+
+
+class QueryNeverFind(compy.Adapter):
+ def patternGenerator(self, pattern, default=None):
+ raise stan.NodeNotFound, ('pattern', pattern)
+
+ def allPatterns(self, pattern):
+ return []
+
+ def onePattern(self, pattern):
+ raise stan.NodeNotFound, ('pattern', pattern)
+
+ def _locatePatterns(self, pattern, default, loop=True):
+ return []
+
+
+class QueryLoader(compy.Adapter):
+ def patternGenerator(self, pattern, default=None):
+ return inevow.IQ(self.original.load()).patternGenerator(pattern, default)
+
+ def allPatterns(self, pattern):
+ return inevow.IQ(self.original.load()).allPatterns(pattern)
+
+ def onePattern(self, pattern):
+ return inevow.IQ(self.original.load()).onePattern(pattern)
+