From 0da3e51e1c08eed2c8054d4a71bc591268b19af1 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sun, 7 Jun 2015 13:18:33 +1200 Subject: 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. --- libpathod/language/__init__.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'libpathod/language') 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): -- cgit v1.2.3