diff options
-rw-r--r-- | libpathod/language/__init__.py | 10 | ||||
-rw-r--r-- | libpathod/language/http.py | 9 | ||||
-rw-r--r-- | libpathod/language/message.py | 3 | ||||
-rw-r--r-- | libpathod/language/websockets.py | 4 | ||||
-rw-r--r-- | libpathod/templates/docs_lang_requests.html | 7 | ||||
-rw-r--r-- | libpathod/templates/docs_lang_websockets.html | 6 |
6 files changed, 38 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) diff --git a/libpathod/templates/docs_lang_requests.html b/libpathod/templates/docs_lang_requests.html index 72391587..fe73f0af 100644 --- a/libpathod/templates/docs_lang_requests.html +++ b/libpathod/templates/docs_lang_requests.html @@ -103,5 +103,12 @@ </td> </tr> + + <tr> + <td> x<a href="#valuespec">INTEGER</a> </td> + <td> + Repeat this message N times. + </td> + </tr> </tbody> </table> diff --git a/libpathod/templates/docs_lang_websockets.html b/libpathod/templates/docs_lang_websockets.html index 8cd176fc..3233577f 100644 --- a/libpathod/templates/docs_lang_websockets.html +++ b/libpathod/templates/docs_lang_websockets.html @@ -105,6 +105,12 @@ </td> </tr> + <tr> + <td> x<a href="#valuespec">INTEGER</a> </td> + <td> + Repeat this message N times. + </td> + </tr> </tbody> </table> |