# HG changeset patch # User Dan Connolly http://www.w3.org/People/Connolly/ # Date 1192679565 18000 # Branch trunk # Node ID dfb20fe77f991a902b6efbb20810ce18c22ed318 # Parent 4d68f2e5c387bb1bfa380f5a35e585f456856d05 move CGI routine to a function; add --test command-line option diff -r 4d68f2e5c387 -r dfb20fe77f99 explain.cgi --- a/explain.cgi Wed Oct 17 20:17:40 2007 -0500 +++ b/explain.cgi Wed Oct 17 22:52:45 2007 -0500 @@ -33,51 +33,60 @@ def explain(expansion, line, parsed_exp) -form = cgi.FieldStorage() -if not form.has_key("t"): - error("No URI Template was provided") -else: - template = form["t"].value +def handle(): + form = cgi.FieldStorage() + if not form.has_key("t"): + error("No URI Template was provided") + else: + template = form["t"].value - print "Status: 200" - print "Content-Type: text/plain" - print "" - print template - parts = re.split("(\{[^\}]*\})", template) - try: - parsed = URITemplate(template) - except: - error("Not a valid URI Template") - parser = Parser() - expansions = [] - length = 0 - line = [] - for p in parts: - if len(p) and p[0] == '{': - expansions.append((p, length, length+len(p), length+len(p)/2)) - line.append("\\") - line.append("_" * (len(p)-2)) - line.append("/") - else: - line.append(" " * len(p)) - length += len(p) - print "".join(line) - line = [" "] * len(template) - for (s, begin, end, middle) in expansions: - line[middle] = "|" - print "".join(line) - print "".join(line) - expansions.reverse() - for (s, begin, end, middle) in expansions: - parsed_exp = parser(s[1:-1]) - line[middle] = "+" - line[middle+1] = "-" - line[middle+2] = ">" - line = line[:middle+3] - "".join(line) - explain(s, line, parsed_exp) + print "Status: 200" + print "Content-Type: text/plain" + print "" + print template + parts = re.split("(\{[^\}]*\})", template) + try: + parsed = URITemplate(template) + except: + error("Not a valid URI Template") + parser = Parser() + expansions = [] + length = 0 + line = [] + for p in parts: + if len(p) and p[0] == '{': + expansions.append((p, length, length+len(p), length+len(p)/2)) + line.append("\\") + line.append("_" * (len(p)-2)) + line.append("/") + else: + line.append(" " * len(p)) + length += len(p) + print "".join(line) + line = [" "] * len(template) + for (s, begin, end, middle) in expansions: + line[middle] = "|" + print "".join(line) + print "".join(line) + expansions.reverse() + for (s, begin, end, middle) in expansions: + parsed_exp = parser(s[1:-1]) + line[middle] = "+" + line[middle+1] = "-" + line[middle+2] = ">" + line = line[:middle+3] + "".join(line) + explain(s, line, parsed_exp) - line = line[:middle-1] - print "".join(line) - - + line = line[:middle-1] + print "".join(line) + + +def _test(): + import doctest + doctest.testmod() + +if __name__ == '__main__': + import sys + if '--test' in sys.argv: _test() + else: handle() # HG changeset patch # User Dan Connolly http://www.w3.org/People/Connolly/ # Date 1192682033 18000 # Branch trunk # Node ID 3609c0d2de5fc8e799167f2fe5fcb890aec178da # Parent dfb20fe77f991a902b6efbb20810ce18c22ed318 factored cgi handler into 3 parts with doctests diff -r dfb20fe77f99 -r 3609c0d2de5f explain.cgi --- a/explain.cgi Wed Oct 17 22:52:45 2007 -0500 +++ b/explain.cgi Wed Oct 17 23:33:53 2007 -0500 @@ -23,6 +23,11 @@ descriptions = { } def explain(expansion, line, parsed_exp): + """ + >>> e = ",&|q,num" + >>> explain(e, ' ' * 5, Parser()(e)) + Join the members of the list ['q', 'num'] together with ''. + """ op = expansion[1] var = parsed_exp.variables() arg = expansion[2:].split("|")[0] @@ -33,24 +38,35 @@ def explain(expansion, line, parsed_exp) -def handle(): +def handle_request(): form = cgi.FieldStorage() if not form.has_key("t"): error("No URI Template was provided") else: template = form["t"].value + try: + parsed = URITemplate(template) + except: + error("Not a valid URI Template") - print "Status: 200" - print "Content-Type: text/plain" - print "" - print template + print "Status: 200" + print "Content-Type: text/plain" + print "" + print template + expansions = [] + brackets(template, parsed, expansions) + l = lines(template, expansions) + explanations(template, expansions, l) + + +def brackets(template, parsed, expansions): + """ + >>> t = 'http://example/s?{,&|q,num}' + >>> brackets(t, URITemplate(t), []) + \________/ + """ + parts = re.split("(\{[^\}]*\})", template) - try: - parsed = URITemplate(template) - except: - error("Not a valid URI Template") - parser = Parser() - expansions = [] length = 0 line = [] for p in parts: @@ -63,11 +79,39 @@ def handle(): line.append(" " * len(p)) length += len(p) print "".join(line) + +def lines(template, expansions): + """ + >>> t = 'http://example/s?{,&|q,num}' + >>> e = [] + >>> brackets(t, URITemplate(t), e) + \________/ + >>> len(lines(t, e)) + | + | + 27 + """ line = [" "] * len(template) for (s, begin, end, middle) in expansions: line[middle] = "|" print "".join(line) print "".join(line) + return line + +def explanations(template, expansions, line): + """ + >>> t = 'http://example/s?{,&|q,num}' + >>> e = [] + >>> brackets(t, URITemplate(t), e) + \________/ + >>> l = lines(t, e) + | + | + >>> explanations(t, e, l) + +-> Join 'var=value' for each variable in ['q', 'num'] with '&'. + + """ + parser = Parser() expansions.reverse() for (s, begin, end, middle) in expansions: parsed_exp = parser(s[1:-1]) @@ -89,4 +133,4 @@ if __name__ == '__main__': if __name__ == '__main__': import sys if '--test' in sys.argv: _test() - else: handle() + else: handle_request()