aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--libpathod/rparse.py27
-rw-r--r--test/test_rparse.py8
3 files changed, 32 insertions, 4 deletions
diff --git a/.gitignore b/.gitignore
index ac1655a1..674722aa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@ MANIFEST
/doc
.coverage
netlib
+venv
diff --git a/libpathod/rparse.py b/libpathod/rparse.py
index 6306f746..e08da49f 100644
--- a/libpathod/rparse.py
+++ b/libpathod/rparse.py
@@ -155,20 +155,29 @@ class FileGenerator:
return self.map.__getslice__(a, b)
-class ValueLiteral:
+class _Value:
def __init__(self, val):
self.val = val
def get_generator(self, settings):
return LiteralGenerator(self.val)
+ def __str__(self):
+ return self.val
+
+
+class ValueLiteral(_Value):
@classmethod
def expr(klass):
e = v_literal.copy()
return e.setParseAction(lambda x: klass(*x))
- def __str__(self):
- return self.val
+
+class ValueNakedLiteral(_Value):
+ @classmethod
+ def expr(klass):
+ e = v_naked_literal.copy()
+ return e.setParseAction(lambda x: klass(*x))
class ValueGenerate:
@@ -238,6 +247,16 @@ Value = pp.MatchFirst(
)
+NakedValue = pp.MatchFirst(
+ [
+ ValueGenerate.expr(),
+ ValueFile.expr(),
+ ValueLiteral.expr(),
+ ValueNakedLiteral.expr(),
+ ]
+)
+
+
class ShortcutContentType:
def __init__(self, value):
self.value = value
@@ -302,7 +321,7 @@ class Path:
@classmethod
def expr(klass):
- e = v_naked_literal.copy()
+ e = NakedValue.copy()
return e.setParseAction(lambda x: klass(*x))
diff --git a/test/test_rparse.py b/test/test_rparse.py
index 9f330f51..cb1076c2 100644
--- a/test/test_rparse.py
+++ b/test/test_rparse.py
@@ -42,6 +42,10 @@ class TestMisc:
assert v.expr()
assert str(v)
+ def test_valuenakedliteral(self):
+ v = rparse.ValueNakedLiteral("foo")
+ assert v.expr()
+
def test_file_value(self):
v = rparse.Value.parseString("<'one two'")[0]
assert str(v)
@@ -200,6 +204,10 @@ class TestParseRequest:
r = rparse.parse_request({}, 'GET:"/foo"')
assert r.method == "GET"
assert r.path == "/foo"
+ r = rparse.parse_request({}, 'GET:/foo')
+ assert r.path == "/foo"
+ r = rparse.parse_request({}, 'GET:@1k')
+ assert len(r.path) == 1024
def test_render(self):
s = cStringIO.StringIO()