aboutsummaryrefslogtreecommitdiffstats
path: root/libpathod/language/__init__.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2015-06-07 13:18:33 +1200
committerAldo Cortesi <aldo@nullcube.com>2015-06-07 13:18:33 +1200
commit0da3e51e1c08eed2c8054d4a71bc591268b19af1 (patch)
treea96991a862c05881bf57636135024155a0d787c1 /libpathod/language/__init__.py
parent7412ec83f55e6a9dcdde84603b88cd67bbf8b04d (diff)
downloadmitmproxy-0da3e51e1c08eed2c8054d4a71bc591268b19af1.tar.gz
mitmproxy-0da3e51e1c08eed2c8054d4a71bc591268b19af1.tar.bz2
mitmproxy-0da3e51e1c08eed2c8054d4a71bc591268b19af1.zip
Make parse_pathoc a generator
This lets us do things like this: get:/:ir,@1:x1000000000 It will also let us expand the language to include a "repeat forever" concept.
Diffstat (limited to 'libpathod/language/__init__.py')
-rw-r--r--libpathod/language/__init__.py18
1 files changed, 10 insertions, 8 deletions
diff --git a/libpathod/language/__init__.py b/libpathod/language/__init__.py
index 48466fa6..d1ace600 100644
--- a/libpathod/language/__init__.py
+++ b/libpathod/language/__init__.py
@@ -1,3 +1,4 @@
+import itertools
import time
import pyparsing as pp
@@ -28,6 +29,14 @@ def parse_pathod(s):
raise exceptions.ParseException(v.msg, v.line, v.col)
+def expand(req):
+ if req.times:
+ for j in xrange(int(req.times.value)):
+ yield req.strike_token("times")
+ else:
+ yield req
+
+
def parse_pathoc(s):
"""
May raise ParseException
@@ -47,14 +56,7 @@ def parse_pathoc(s):
).parseString(s, parseAll=True)
except pp.ParseException as v:
raise exceptions.ParseException(v.msg, v.line, v.col)
- expanded = []
- for i in reqs:
- if i.times:
- for j in range(int(i.times.value)):
- expanded.append(i.strike_token("times"))
- else:
- expanded.append(i)
- return expanded
+ return itertools.chain(*[expand(i) for i in reqs])
def parse_websocket_frame(s):