aboutsummaryrefslogtreecommitdiffstats
path: root/libpathod/language
diff options
context:
space:
mode:
Diffstat (limited to 'libpathod/language')
-rw-r--r--libpathod/language/__init__.py10
-rw-r--r--libpathod/language/http.py9
-rw-r--r--libpathod/language/message.py3
-rw-r--r--libpathod/language/websockets.py4
4 files changed, 25 insertions, 1 deletions
diff --git a/libpathod/language/__init__.py b/libpathod/language/__init__.py
index 36ec19e2..3b7529f0 100644
--- a/libpathod/language/__init__.py
+++ b/libpathod/language/__init__.py
@@ -31,7 +31,7 @@ def parse_requests(s):
except UnicodeError:
raise exceptions.ParseException("Spec must be valid ASCII.", 0, 0)
try:
- return pp.OneOrMore(
+ reqs = pp.OneOrMore(
pp.Or(
[
websockets.WebsocketFrame.expr(),
@@ -41,6 +41,14 @@ def parse_requests(s):
).parseString(s, parseAll=True)
except pp.ParseException, 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.copy())
+ else:
+ expanded.append(i)
+ return expanded
def serve(msg, fp, settings):
diff --git a/libpathod/language/http.py b/libpathod/language/http.py
index daee7e54..543cfee3 100644
--- a/libpathod/language/http.py
+++ b/libpathod/language/http.py
@@ -32,6 +32,10 @@ class Body(base.Value):
preamble = "b"
+class Times(base.Integer):
+ preamble = "x"
+
+
class Method(base.OptionsOrValue):
options = [
"GET",
@@ -284,6 +288,7 @@ class Request(_HTTPMessage):
ShortcutUserAgent,
Raw,
PathodResponse,
+ Times,
actions.PauseAt,
actions.DisconnectAt,
@@ -304,6 +309,10 @@ class Request(_HTTPMessage):
return self.tok(Path)
@property
+ def times(self):
+ return self.tok(Times)
+
+ @property
def pathodspec(self):
return self.tok(PathodResponse)
diff --git a/libpathod/language/message.py b/libpathod/language/message.py
index dbc0cfdd..e3c7ed9e 100644
--- a/libpathod/language/message.py
+++ b/libpathod/language/message.py
@@ -22,6 +22,9 @@ class Message(object):
track.add(i.unique_name)
self.tokens = tokens
+ def copy(self):
+ return self.__class__(self.tokens[:])
+
def toks(self, klass):
"""
Fetch all tokens that are instances of klass
diff --git a/libpathod/language/websockets.py b/libpathod/language/websockets.py
index 12b59bc6..ed5596ce 100644
--- a/libpathod/language/websockets.py
+++ b/libpathod/language/websockets.py
@@ -145,6 +145,10 @@ class WebsocketFrame(message.Message):
return self.tok(KeyNone)
@property
+ def times(self):
+ return self.tok(Times)
+
+ @property
def toklength(self):
return self.tok(Length)