aboutsummaryrefslogtreecommitdiffstats
path: root/libpathod/rparse.py
diff options
context:
space:
mode:
Diffstat (limited to 'libpathod/rparse.py')
-rw-r--r--libpathod/rparse.py29
1 files changed, 23 insertions, 6 deletions
diff --git a/libpathod/rparse.py b/libpathod/rparse.py
index de69e9b9..1a6a5e4c 100644
--- a/libpathod/rparse.py
+++ b/libpathod/rparse.py
@@ -1,4 +1,4 @@
-import operator, string, random, sys, time, mmap, os
+import operator, string, random, sys, time, mmap, os, time
import contrib.pyparsing as pp
import http, utils
import tornado.ioloop
@@ -430,7 +430,8 @@ class Response:
skip = 0
fp.finish()
- def render(self, fp):
+ def serve(self, fp):
+ started = time.time()
if self.body and not self.get_header("Content-Length"):
self.headers.append(
(
@@ -460,7 +461,13 @@ class Response:
vals.reverse()
actions = self.ready_actions(self.length(), self.actions)
actions.reverse()
- return self.write_values(fp, vals, actions)
+ self.write_values(fp, vals, actions[:])
+ duration = time.time() - started
+ return dict(
+ started = started,
+ duration = duration,
+ actions = actions,
+ )
def __str__(self):
parts = [
@@ -470,12 +477,17 @@ class Response:
class CraftedResponse(Response):
- def __init__(self, settings, tokens):
+ def __init__(self, settings, spec, tokens):
Response.__init__(self)
- self.tokens = tokens
+ self.spec, self.tokens = spec, tokens
for i in tokens:
i.mod_response(settings, self)
+ def serve(self, fp):
+ d = Response.serve(self, fp)
+ d["spec"] = self.spec
+ return d
+
class InternalResponse(Response):
def __init__(self, code, body):
@@ -494,9 +506,14 @@ class InternalResponse(Response):
)
]
+ def serve(self, fp):
+ d = Response.serve(self, fp)
+ d["internal"] = True
+ return d
+
def parse(settings, s):
try:
- return CraftedResponse(settings, Response.expr().parseString(s, parseAll=True))
+ return CraftedResponse(settings, s, Response.expr().parseString(s, parseAll=True))
except pp.ParseException, v:
raise ParseException(v.msg, v.line, v.col)